基于 Serverless 服务,无代码构建微信/钉钉告警通知

Serverless
亚马逊云科技
Amazon Lambda
0
0
{"value":"#### **前言**\n\n**在使用亚马逊云科技的过程中,各种服务的通知事件在日常运维里常常发挥着关键作用**。\n\n但在实际使用过程中,这些通知常常因为各种原因被忽略而导致意外的损失。如:亚马逊云科技的维护事件会发送通知邮件到账号的注册邮箱,但这些邮箱通常无人值守,使得在维护事件发生时,客户会遭遇“意外”停机。\n\n另外,客户部署的工作负载也有各种自定义的通知希望集成到一个统一的客户端进行提醒;而现在各种流行的即时通信软件都有移动客户端,同时基本都支持 **webhook 机制**,外部通过 **API** 调用,即可传入相应的信息;因此即时通信软件是接收这些通知的理想终端。\n\n结合以上需求,本文将介绍基于亚马逊云科技无**服务器技术构建的通知方案**,客户无需编写代码,仅需**简单配置,一键部署**,即可将各种通知集中到流行的即时通信软件。\n### **架构设计**\n![image.png](https://dev-media.amazoncloud.cn/f70bb2977f564846be168e2ef3664e5d_image.png)\n\n**EventBridge **是一种[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)事件总线,可使用从应用程序、集成式软件即服务(SaaS) 应用程序和亚马逊云服务生成的事件,更轻松地**大规模构建事件驱动型应用程序**\n\n在本方案中,默认收集 **EC2** 的状态变化和亚马逊云服务的健康事件作为通知事件源,解决常规维护事件通知容易被忽略的痛点。\n\n**SNS是一项用于应用与应用之间 (A2A) 以及应用与人之间 (A2P) 通信的完全托管型消息收发服务**。通过 SNS 接收 **EventBridge**的事件触发 **Lambda**,一方面在系统上进行了解耦,另一方面能作为后续其他通知接入的便捷入口。\n\n[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)计算 **Lambda** 服务,负责调用不同**即时通信软件的API**,完成通知消息的传递。\n\n已实现支持的通信软件包括:**微信、钉钉、飞书、Slack**。\n\n### **部署通知方案**\n本文以微信/钉钉为例,介绍部署步骤。\n\n**部署微信通知\n配置企业微信应用**\n\n首先登录企业微信管理后台,创建一个新的应用,并记录 AgentId 和 Secret 。\n\n![image.png](https://dev-media.amazoncloud.cn/8836f1eff3034bc09a53d5c946fbd6b0_image.png)\n\n记录企业ID :\n![image.png](https://dev-media.amazoncloud.cn/b3cfa4c960a24924914b690c34bb6115_image.png)\n\n以上三个参数,为微信通知部署时需要填入的参数。\n\n如果希望从微信客户端直接接收告警消息,而不想使用企业微信客户端,可以考虑使用微信插件:\n![image.png](https://dev-media.amazoncloud.cn/bae455da6b3e477b8600ca69a1b7bf97_image.png)\n\n**在 Serverless Application Repository 中部署微信通知应用**\nServerless Application Repository(SAR)是亚马逊云科技上的**[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用仓库**,客户可以打包自己的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用放置在SAR,方便后续的部署。同时客户也可以公开自己的应用,与其他客户共享。为方便客户部署,已开发完成的功能已由亚马逊解决方案架构师在SAR共享。可通过搜索功能在 SAR 中找到相应的应用。\n![image.png](https://dev-media.amazoncloud.cn/89a1ffb5fd35484895c0efb9a6fb186b_image.png)\n\n点击应用名称,进入部署页面,填入上面获取的三个微信接口相关的参数:\n\n![image.png](https://dev-media.amazoncloud.cn/b7f09765b46a4d8b83a64eeaec4676f7_image.png)\n\n点击部署。几分钟后将部署完成。\n\n**部署钉钉通知\n创建钉钉机器人与获取 Webhook URL**\n\n配置钉钉自定义机器人,请参考官方说明([https://open.dingtalk.com/document/robots/custom-robot-access](https://open.dingtalk.com/document/robots/custom-robot-access))\n\n获取自定义机器人的 Webhook URL,作为部署的参数\n![image.png](https://dev-media.amazoncloud.cn/661eafce1c664356a7c77760318a4a5e_image.png)\n\n**在 Serverless Application Repository 中部署钉钉通知应用**\n应用搜索方式,与微信相同。同时,也可以搜索到其他已由亚马逊解决方案架构师共享的应用。\n\n![image.png](https://dev-media.amazoncloud.cn/38be8cd062b34fcf8220313796953714_image.png)\n\n由于需要创建从EventBridge向SNS发布消息的权限,图中显示创建IAM角色的选项需要勾选。\n\n![image.png](https://dev-media.amazoncloud.cn/fff9ee9ad06d489f91243f5d3f9df5d2_image.png)\n\n选择 DingTalk-Notifier 应用,填入所配置的钉钉机器人的 Webhook URL,点击部署。几分钟后将部署完成。\n\n![image.png](https://dev-media.amazoncloud.cn/d4c89ffdd3fb42ff898754c8a715ec81_image.png)\n\nSAR 上[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用背后是以 Cloudformation 进行部署,可通过 Cloudformation 查看相应的部署完成状况。\n\n### **测试通知功能**\n\n本方案,默认配置了从 EventBridge 中捕获 **EC2 的状态变化**和 **亚马逊云科技 Health** 事件作为通知事件源,可通过 EC2 的 Start / Stop / Terminate 操作,触发通知进行测试。示例结果如下:\n![image.png](https://dev-media.amazoncloud.cn/d4d160fc92fd4bfb8784bd6c5c6fbc52_image.png)\n\n### **自定义通知的接入方式**\n对于亚马逊云其他服务的通知,或自定义通知的集成,可通过往部署方案中创建的 SNS 推送消息的方式,简便地完成配置。\n\n![image.png](https://dev-media.amazoncloud.cn/75629b1d1e174007810e7c280994cfb9_image.png)\n\n**Budgets 服务通知配置示例**\n\n通过 Amazon Budgets 服务,客户可以设置自定义预算,不管是最简单还是最复杂的使用案例,都能跟踪其成本和使用情况。同时 Budgets 服务提供了与 SNS 的直接集成,本文以此为例,提供其他服务通知信息,集成到统一通知客户端的方式。\n\n**配置 Budgets 成本预算通知**\n\n从已部署的 Cloudformation 中打开 SNS 关联主题,并获取ARN。\n\n![image.png](https://dev-media.amazoncloud.cn/3543bd9a125f4d00bfd12949960f5c35_image.png)\n\n打开 Budgets 服务,选择“成本预算”类型,设置成本的信息,进入第三步:配置警报。在“提醒阀值”中设置 SNS 提醒。\n\n![image.png](https://dev-media.amazoncloud.cn/0f09e31482ab40949cdcb58813e77a0e_image.png)\n\n点击“权限”,获取 SNS 的权限配置示例片段。\n\n```\\n{\\n \\"Sid\\": \\"AWSBudgets-notification-1\\",\\n \\"Effect\\": \\"Allow\\",\\n \\"Principal\\": {\\n \\"Service\\": \\"budgets.amazonaws.com\\"\\n },\\n \\"Action\\": \\"SNS:Publish\\",\\n \\"Resource\\": \\"<insert-ARN-here>\\"\\n}\\n```\n在 SNS 的访问策略中添加以上片段,并将```<insert-ARN-here>```替换成 SNS 自身的ARN。\n\n![image.png](https://dev-media.amazoncloud.cn/cadb8a2eace44ca9acd69793bf7b0929_image.png)\n\n完成 Budgets 后续的配置步骤。\n\n**提示效果**\n![image.png](https://dev-media.amazoncloud.cn/89732421c6134cbc98567aa0c144b613_image.png)\n\n### **卸载部署**\n如需对已部署的通知集成应用进行卸载,从 Cloudformation 中删除对应堆栈即可完成卸载。\n\n### **结语**\n本文介绍了完全基于 serverless 服务构建的通知方案的架构及部署方式,客户选择主流的即时通讯软件集成应用部署后,即可完成终端的集成,获取 EC2 状态变化及维护事件的通知。最后,客户如需集成其他的通知事件,可通过简单配置 SNS 完成相应集成。\n\n##### **本篇作者**\n\n**何文安**\n亚马逊云科技解决方案架构师,负责帮助客户进行上云架构的设计和咨询。\n\n\n**林俊**\n亚马逊云科技高级解决方案架构师,主要负责应用程序现代化的方案咨询与架构设计,致力于容器与[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)技术的推广与应用\n\n[阅读原文](https://github.com/yuhuiaws/ML-study/tree/main/)","render":"<h4><a id=\\"_0\\"></a><strong>前言</strong></h4>\\n<p><strong>在使用亚马逊云科技的过程中,各种服务的通知事件在日常运维里常常发挥着关键作用</strong>。</p>\\n<p>但在实际使用过程中,这些通知常常因为各种原因被忽略而导致意外的损失。如:亚马逊云科技的维护事件会发送通知邮件到账号的注册邮箱,但这些邮箱通常无人值守,使得在维护事件发生时,客户会遭遇“意外”停机。</p>\n<p>另外,客户部署的工作负载也有各种自定义的通知希望集成到一个统一的客户端进行提醒;而现在各种流行的即时通信软件都有移动客户端,同时基本都支持 <strong>webhook 机制</strong>,外部通过 <strong>API</strong> 调用,即可传入相应的信息;因此即时通信软件是接收这些通知的理想终端。</p>\\n<p>结合以上需求,本文将介绍基于亚马逊云科技无<strong>服务器技术构建的通知方案</strong>,客户无需编写代码,仅需<strong>简单配置,一键部署</strong>,即可将各种通知集中到流行的即时通信软件。</p>\\n<h3><a id=\\"_9\\"></a><strong>架构设计</strong></h3>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/f70bb2977f564846be168e2ef3664e5d_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>EventBridge <strong>是一种无服务器事件总线,可使用从应用程序、集成式软件即服务(SaaS) 应用程序和亚马逊云服务生成的事件,更轻松地</strong>大规模构建事件驱动型应用程序</strong></p>\n<p>在本方案中,默认收集 <strong>EC2</strong> 的状态变化和亚马逊云服务的健康事件作为通知事件源,解决常规维护事件通知容易被忽略的痛点。</p>\\n<p><strong>SNS是一项用于应用与应用之间 (A2A) 以及应用与人之间 (A2P) 通信的完全托管型消息收发服务</strong>。通过 SNS 接收 <strong>EventBridge</strong>的事件触发 <strong>Lambda</strong>,一方面在系统上进行了解耦,另一方面能作为后续其他通知接入的便捷入口。</p>\\n<p>无服务器计算 <strong>Lambda</strong> 服务,负责调用不同<strong>即时通信软件的API</strong>,完成通知消息的传递。</p>\\n<p>已实现支持的通信软件包括:<strong>微信、钉钉、飞书、Slack</strong>。</p>\\n<h3><a id=\\"_22\\"></a><strong>部署通知方案</strong></h3>\\n<p>本文以微信/钉钉为例,介绍部署步骤。</p>\n<p><strong>部署微信通知<br />\\n配置企业微信应用</strong></p>\\n<p>首先登录企业微信管理后台,创建一个新的应用,并记录 AgentId 和 Secret 。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/8836f1eff3034bc09a53d5c946fbd6b0_image.png\\" alt=\\"image.png\\" /></p>\n<p>记录企业ID :<br />\\n<img src=\\"https://dev-media.amazoncloud.cn/b3cfa4c960a24924914b690c34bb6115_image.png\\" alt=\\"image.png\\" /></p>\n<p>以上三个参数,为微信通知部署时需要填入的参数。</p>\n<p>如果希望从微信客户端直接接收告警消息,而不想使用企业微信客户端,可以考虑使用微信插件:<br />\\n<img src=\\"https://dev-media.amazoncloud.cn/bae455da6b3e477b8600ca69a1b7bf97_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>在 Serverless Application Repository 中部署微信通知应用</strong><br />\\nServerless Application Repository(SAR)是亚马逊云科技上的<strong>无服务器应用仓库</strong>,客户可以打包自己的[无服务器](https://aws.amazon.com/cn/serverless/?trk=cndc-detail)应用放置在SAR,方便后续的部署。同时客户也可以公开自己的应用,与其他客户共享。为方便客户部署,已开发完成的功能已由亚马逊解决方案架构师在SAR共享。可通过搜索功能在 SAR 中找到相应的应用。<br />\\n<img src=\\"https://dev-media.amazoncloud.cn/89a1ffb5fd35484895c0efb9a6fb186b_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击应用名称,进入部署页面,填入上面获取的三个微信接口相关的参数:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/b7f09765b46a4d8b83a64eeaec4676f7_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击部署。几分钟后将部署完成。</p>\n<p><strong>部署钉钉通知<br />\\n创建钉钉机器人与获取 Webhook URL</strong></p>\\n<p>配置钉钉自定义机器人,请参考官方说明(<a href=\\"https://open.dingtalk.com/document/robots/custom-robot-access\\" target=\\"_blank\\">https://open.dingtalk.com/document/robots/custom-robot-access</a>)</p>\\n<p>获取自定义机器人的 Webhook URL,作为部署的参数<br />\\n<img src=\\"https://dev-media.amazoncloud.cn/661eafce1c664356a7c77760318a4a5e_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>在 Serverless Application Repository 中部署钉钉通知应用</strong><br />\\n应用搜索方式,与微信相同。同时,也可以搜索到其他已由亚马逊解决方案架构师共享的应用。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/38be8cd062b34fcf8220313796953714_image.png\\" alt=\\"image.png\\" /></p>\n<p>由于需要创建从EventBridge向SNS发布消息的权限,图中显示创建IAM角色的选项需要勾选。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/fff9ee9ad06d489f91243f5d3f9df5d2_image.png\\" alt=\\"image.png\\" /></p>\n<p>选择 DingTalk-Notifier 应用,填入所配置的钉钉机器人的 Webhook URL,点击部署。几分钟后将部署完成。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/d4c89ffdd3fb42ff898754c8a715ec81_image.png\\" alt=\\"image.png\\" /></p>\n<p>SAR 上无服务器应用背后是以 Cloudformation 进行部署,可通过 Cloudformation 查看相应的部署完成状况。</p>\n<h3><a id=\\"_73\\"></a><strong>测试通知功能</strong></h3>\\n<p>本方案,默认配置了从 EventBridge 中捕获 <strong>EC2 的状态变化</strong>和 <strong>亚马逊云科技 Health</strong> 事件作为通知事件源,可通过 EC2 的 Start / Stop / Terminate 操作,触发通知进行测试。示例结果如下:<br />\\n<img src=\\"https://dev-media.amazoncloud.cn/d4d160fc92fd4bfb8784bd6c5c6fbc52_image.png\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"_78\\"></a><strong>自定义通知的接入方式</strong></h3>\\n<p>对于亚马逊云其他服务的通知,或自定义通知的集成,可通过往部署方案中创建的 SNS 推送消息的方式,简便地完成配置。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/75629b1d1e174007810e7c280994cfb9_image.png\\" alt=\\"image.png\\" /></p>\n<p><strong>Budgets 服务通知配置示例</strong></p>\\n<p>通过 Amazon Budgets 服务,客户可以设置自定义预算,不管是最简单还是最复杂的使用案例,都能跟踪其成本和使用情况。同时 Budgets 服务提供了与 SNS 的直接集成,本文以此为例,提供其他服务通知信息,集成到统一通知客户端的方式。</p>\n<p><strong>配置 Budgets 成本预算通知</strong></p>\\n<p>从已部署的 Cloudformation 中打开 SNS 关联主题,并获取ARN。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/3543bd9a125f4d00bfd12949960f5c35_image.png\\" alt=\\"image.png\\" /></p>\n<p>打开 Budgets 服务,选择“成本预算”类型,设置成本的信息,进入第三步:配置警报。在“提醒阀值”中设置 SNS 提醒。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/0f09e31482ab40949cdcb58813e77a0e_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击“权限”,获取 SNS 的权限配置示例片段。</p>\n<pre><code class=\\"lang-\\">{\\n &quot;Sid&quot;: &quot;AWSBudgets-notification-1&quot;,\\n &quot;Effect&quot;: &quot;Allow&quot;,\\n &quot;Principal&quot;: {\\n &quot;Service&quot;: &quot;budgets.amazonaws.com&quot;\\n },\\n &quot;Action&quot;: &quot;SNS:Publish&quot;,\\n &quot;Resource&quot;: &quot;&lt;insert-ARN-here&gt;&quot;\\n}\\n</code></pre>\\n<p>在 SNS 的访问策略中添加以上片段,并将<code>&lt;insert-ARN-here&gt;</code>替换成 SNS 自身的ARN。</p>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/cadb8a2eace44ca9acd69793bf7b0929_image.png\\" alt=\\"image.png\\" /></p>\n<p>完成 Budgets 后续的配置步骤。</p>\n<p><strong>提示效果</strong><br />\\n<img src=\\"https://dev-media.amazoncloud.cn/89732421c6134cbc98567aa0c144b613_image.png\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"_119\\"></a><strong>卸载部署</strong></h3>\\n<p>如需对已部署的通知集成应用进行卸载,从 Cloudformation 中删除对应堆栈即可完成卸载。</p>\n<h3><a id=\\"_122\\"></a><strong>结语</strong></h3>\\n<p>本文介绍了完全基于 serverless 服务构建的通知方案的架构及部署方式,客户选择主流的即时通讯软件集成应用部署后,即可完成终端的集成,获取 EC2 状态变化及维护事件的通知。最后,客户如需集成其他的通知事件,可通过简单配置 SNS 完成相应集成。</p>\n<h5><a id=\\"_125\\"></a><strong>本篇作者</strong></h5>\\n<p><strong>何文安</strong><br />\\n亚马逊云科技解决方案架构师,负责帮助客户进行上云架构的设计和咨询。</p>\n<p><strong>林俊</strong><br />\\n亚马逊云科技高级解决方案架构师,主要负责应用程序现代化的方案咨询与架构设计,致力于容器与无服务器技术的推广与应用</p>\n<p><a href=\\"https://github.com/yuhuiaws/ML-study/tree/main/\\" target=\\"_blank\\">阅读原文</a></p>\n"}
0
目录
关闭