CloudWatch Events配合AWS Lambda使用初体验
2018年9月12日
AWS AWS Lambda CloudWatch背景
按照团队的标准规范,在 AWS 上新建的 EC2 实例都要添加 Name, Region, App, Env, Layer, Group 等标签。其中 Name 标签的格式是:{Region}-{App}-{Layer}-{Env}-{Group}-{IP后两段}
,例如:vg-store-web-release-a-12-34
。
在 Auto Scaling Group 的配置上,我设置了为新扩容出的实例自动添加 Region, App, Env, Layer, Group 这些标签,但因为 Name 标签中包含 IP 后缀,因此没办法预先设置在 Auto Scaling Group 上,只能在实例创建出来分配到私有 IP 后手动的添加 Name 标签。
为了解决这个问题,我最先想到的方案是:使用脚本调用 API 定时扫描没有 Name 标签的实例,然后获取实例的 PrivateIP 和其他标签拼装出 Name 添加到实例上。
我很快就编写出 Demo,经过测试,可以实现需求,但总觉得不够优雅:
- 需要定时调用脚本,间隔时间过长就不能及时发现新扩容的实例,间隔过短则显得有些浪费计算资源(事实上,在我们的业务场景中发生扩容的次数很少,间隔以天为单位设置都有些多余)。
- 需要部署维护脚本及crontab。
- 需要找一台服务器运行脚本。
后来我想到了 Auto Scaling Group 有 LifeCycle Hook,又从它的设置界面了解到了 CloudWatch Events 这一服务。
最后通过 CloudWatch Events 和 AWS Lambda 就可以很好的实现我的需求!