
前言
在使用亚马逊云科技的过程中,各种服务的通知事件在日常运维里常常发挥着关键作用。
但在实际使用过程中,这些通知常常因为各种原因被忽略而导致意外的损失。如:亚马逊云科技的维护事件会发送通知邮件到账号的注册邮箱,但这些邮箱通常无人值守,使得在维护事件发生时,客户会遭遇“意外”停机。
另外,客户部署的工作负载也有各种自定义的通知希望集成到一个统一的客户端进行提醒;而现在各种流行的即时通信软件都有移动客户端,同时基本都支持webhook机制,外部通过API调用,即可传入相应的信息;因此即时通信软件是接收这些通知的理想终端。
结合以上需求,本文将介绍基于亚马逊云科技无服务器技术构建的通知方案,客户无需编写代码,仅需简单配置,一键部署,即可将各种通知集中到流行的即时通信软件。
架构设计

部署通知方案
本文以微信/钉钉为例,介绍部署步骤。
部署微信通知
配置企业微信应用
首先登录企业微信管理后台,创建一个新的应用,并记录 AgentId 和 Secret 。

记录企业ID :

以上三个参数,为微信通知部署时需要填入的参数。
如果希望从微信客户端直接接收告警消息,而不想使用企业微信客户端,可以考虑使用微信插件:

在 Serverless Application Repository 中部署微信通知应用
Serverless Application Repository(SAR)是亚马逊云科技上的无服务器应用仓库,客户可以打包自己的无服务器应用放置在SAR,方便后续的部署。同时客户也可以公开自己的应用,与其他客户共享。为方便客户部署,已开发完成的功能已由亚马逊解决方案架构师在SAR共享。可通过搜索功能在SAR中找到相应的应用。

点击应用名称,进入部署页面,填入上面获取的三个微信接口相关的参数:

点击部署。几分钟后将部署完成。
部署钉钉通知
创建钉钉机器人与获取 Webhook URL
配置钉钉自定义机器人,请参考官方说明(https://open.dingtalk.com/document/robots/custom-robot-access)
获取自定义机器人的 Webhook URL,作为部署的参数

在 Serverless Application Repository 中部署钉钉通知应用
应用搜索方式,与微信相同。同时,也可以搜索到其他已由亚马逊解决方案架构师共享的应用。

由于需要创建从EventBridge向SNS发布消息的权限,图中显示创建IAM角色的选项需要勾选。

选择DingTalk-Notifier应用,填入所配置的钉钉机器人的Webhook URL,点击部署。几分钟后将部署完成。

SAR 上无服务器应用背后是以 Cloudformation 进行部署,可通过 Cloudformation 查看相应的部署完成状况。
测试通知功能
本方案,默认配置了从 EventBridge 中捕获 EC2 的状态变化和 亚马逊云科技 Health 事件作为通知事件源,可通过 EC2 的 Start Stop Terminate 操作,触发通知进行测试。示例结果如下:

自定义通知的接入方式
对于亚马逊云其他服务的通知,或自定义通知的集成,可通过往部署方案中创建的 SNS 推送消息的方式,简便地完成配置。

Budgets 服务通知配置示例
通过 Amazon Budgets 服务,客户可以设置自定义预算,不管是最简单还是最复杂的使用案例,都能跟踪其成本和使用情况。同时 Budgets 服务提供了与 SNS 的直接集成,本文以此为例,提供其他服务通知信息,集成到统一通知客户端的方式。
配置 Budgets 成本预算通知
从已部署的 Cloudformation 中打开 SNS 关联主题,并获取ARN。

打开 Budgets 服务,选择“成本预算”类型,设置成本的信息,进入第三步:配置警报。在“提醒阀值”中设置 SNS 提醒。

点击“权限”,获取 SNS 的权限配置示例片段。
{"Sid": "AWSBudgets-notification-1","Effect": "Allow","Principal": {"Service": "budgets.amazonaws.com"},"Action": "SNS:Publish","Resource": "<insert-ARN-here>"}
在 SNS 的访问策略中添加以上片段,并将<insert-ARN-here>替换成 SNS 自身的ARN。

完成 Budgets 后续的配置步骤。
提示效果

卸载部署
如需对已部署的通知集成应用进行卸载,从 Cloudformation 中删除对应堆栈即可完成卸载。
结语
本文介绍了完全基于 serverless 服务构建的通知方案的架构及部署方式,客户选择主流的即时通讯软件集成应用部署后,即可完成终端的集成,获取 EC2 状态变化及维护事件的通知。最后,客户如需集成其他的通知事件,可通过简单配置 SNS 完成相应集成。
本篇作者

何文安
亚马逊云科技解决方案架构师,负责帮助客户进行上云架构的设计和咨询。

林俊
亚马逊云科技高级解决方案架构师,主要负责应用程序现代化的方案咨询与架构设计,致力于容器与无服务器技术的推广与应用


听说,点完下面4个按钮
就不会碰到bug了!





