Pensieve: 1842

2018-10-20 18:30

所观所读

在Netflix上看了一部电影, Your name. 并没有那么出色, 给我的感觉是在村上春树的遇到百分百女孩的基础上加了些科幻而已, 而且这些科幻的成分还没完全自圆其说. 所以说, 嗯, 算是看过了吧.

报名了明年一月份的GCP架构师考试, 制订好了计划, 看看视频读读书, 应该没大问题, 前提是两周后Diablo3在Switch上发布不会占用我太多时间.

Cloudformation循环依赖一例

最近工作中遇到一个小问题, 有点感想. 任务大概是这样的: 我们在AWS里有一个S3的bucket, 需要在每次有文件写到bucket的时候用lambda处理一下文件的元信息. 这个lambda自然需要有访问这个bucket的权限. 为了让这个架构能够代码化, 我们自然是要用Cloudformation来完成这个任务的. 不过, 这个看起来不太难的任务却给我了一个小意外. 我们在Cloudformation里面要制定创建三个资源, 一个是bucket, 一个是lambda, 一个是IAM的role, 让lambda能够访问到bucket. 但是, 按AWS的要求, lambda的触发器是在S3资源里定义的, 所以这个S3资源依赖于lambda资源, 而lambda资源又依赖于IAM的role, IAM的role又依赖于S3, 看看, 循环依赖. 为了避免这样的循环依赖, AWS还有一个专门的页面来解决这个循环依赖.

至此, 这个问题应该已经解决了, 不是吗? 不是, 我们在定义API的时候, 应该尽量少给用户制造意外. 从我最开头的描述来看, 我们所要实现的东西在逻辑上没有任何循环依赖之处. 我们要一个bucket, 一个lambda, 然后要两个桥将两者联系起来, 一个桥是触发的定义, 一个桥是权限的指定. 这里面有循环依赖吗? 没有. 那这个循环依赖是怎么来的呢? AWS要求触发器是定义在信息源这一头. 例如SNS里面定义一个终点来指定触发一个lambda, S3里定义一个NotificationConfiguration来触发一个lambda等等. 不过, 由于这样的要求, 我们人为地制造了一个循环依赖出来. 合理吗? 不太合理.

一个解决这个循环依赖的办法是将lambda的触发器抽出来作为一个独立的资源, 这样显式地定义触发器在可扩展性(例如定义前置过滤规则)和易用性上都会好一圈. 这个循环依赖也就不复存在了. 另一个解决这个循环依赖的办法是在IAM的role里面指定arn的时候, 允许引用一个尚不存在的资源, 内部实现时, 使用触发的办法在有匹配资源被创建的时候, 更新这个role, 绑定到这个刚创建的资源, 这样, 上面所谓的循环依赖也不复存在了.

最后, AWS那篇文档里建议用户使用特定的模式来解决一个并不是用户造成的问题, 这是最让我不满意的地方.

Google每况愈下的风评

IT圈内对Google的评价越来越差了. Google最近若干年来为了扩大收入, 做了不少脏事; 为了控制成本, 给技术圈专业人士的免费午餐越来越少, 所以圈子里对它从褒多余贬变成了贬多褒少.

看看国内百度的境遇, 我愈发觉得广告公司的下场都是一样的, 让人不喜欢又离不开.

用树莓派搭NAS

前几天尝试将iPad上购买的iTunes视频投屏到家里的Sony电视上播放, 电视上Google Play里的不少app都试过, 很不稳定. 就动了搞NAS的念头, 用群晖肯定省心, 不过溢价实在太高, 所以下单买了树莓派3B+, 准备做这几件事情:

  1. TimeMachine备份服务器
  2. Airplay服务器
  3. 视频播放服务器

目前就这几个想法, 查了下基本都能实现. 而且有了这个低功耗24*7的服务器在家里, 想临时挂个cron什么的都容易.