如何在AWS中通过eventbridge 发送事件通知(Organization版)

License:Attribution-NonCommercial-ShareAlike 4.0 International

本文出自Suzf Blog。 如未注明,均为 SUZF.NET 原创。

转载请注明:https://suzf.net/post/1458


简介

在使用亚马逊云的过程中,各种服务的通知事件在日常运维里常常发挥着关键作用。但在实际使用过程中,这些通知常常因为各种原因被忽略而导致意外的损失。如:亚马逊云的维护事件会发送通知邮件到账号的注册邮箱,但这些邮箱通常无人值守,使得在维护事件发生时,客户会遭遇“意外”停机。另外,客户部署的工作负载也有各种自定义的通知希望集成到一个统一的客户端进行提醒;而现在各种流行的即时通信软件都有移动客户端,同时基本都支持webhook机制,外部通过API调用,即可传入相应的信息;因此即时通信软件是接收这些通知的理想终端。

但如果您管理着多个AWS账号,而这些账号可能又属于多个不同的AWS Organization,那您需要在每个账号里分别做配置;另外,日后新增账号时,也得配置一次。那这样看起来工作量也不小。

为此,我们在原有告警通知方案的基础上,增加了对AWS Organization和多子账号, 以便提高您的运维效率。

说明:此方案仅目前仅支持AWS Global Regions,在AWS 北京和宁夏区暂时不支持事件的跨区传输。

架构设计

架构图

相关服务介绍

Event Bridge – 用于事件的监听及转发;

SNS – 用于服务间的解耦合;

Lambda – 发送事件到飞书的的代码;

IAM – 用于给予账号发送事件信息的角色。

架构介绍

本架构支持在多个AWS Organization的部署,支持跨区域。

发送消息到飞书的代码只需要在任意一个账号中部署一次(此账号我们成为主账号),且全部采用无服务器架构,可以有效的节约企业成本。

在主账号中创建专门的事件总线(Target Event Bus),该Event Bus配置规则发送事件到SNS;Lambda用于接收SNS的事件,调用飞书的接口,发送信息。

主账号的默认事件总线(Default Event Bus)配置规则,用于对事件进行筛选并发送事件到Target Event Bus。

Target Event Bus需要配置一个Resource Based Policy,通过Organization ID或者AWS Account ID对其他账号进行信任,严格控制安全。

其他AWS Organization的账号通过Organization管理账号创建的StackSet来部署 IAM Rule 和规则。

子账号使用规则筛选事件并把事件转发到主账号的Target Event Bus。

准备工作

创建飞书机器人并将webbook记录一下

Organization Master 部署

IAM

创建执行 lambda function 需要的iam role

Lambda

创建 lambda function

创建 lambda layer

这里 Compatible architectures & runtimes 一定要和创建 function 的一致

暂时无法在飞书文档外展示此内容

源码可以从这里找到 https://github.com/Chris-wa-He/AWS-Lambda-notifier/tree/Feishu-notifier

lambda function 添加 layer

更新 lambda function 代码并部署

importosimportboto3fromfeishuimportFeishufromalarmimportAlarmsecretURL ="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxxxxxxx"# Initial Feishu handlerfeishu = Feishu(secretURL)deflambda_handler(event, context):print(event)    msg = msg_format(event)    print(msg)    fsAlarm = Alarm(        description=msg,    )    feishu.send_text_msg(fsAlarm)    response = {"statusCode":200,"body":"Message Sent."}returnresponsedefmsg_format(event):try:# 消息来源是SNS,取 $.Records[0].Sns.Message,并对字符串进行一些处理,确保发送时可以正常显示msg = event['Records'][0]['Sns']['Message']# 进行字符串处理后返回,以确保IM客户端正确显示msg = msg.replace("\\n","\n")ifmsg[0] =='\"'andmsg[-1] =='\"':            msg = msg[1:-1]returnmsgexcept:# 消息来源不是SNS,直接返回returnevent

SNS

创建 topic

创建 Subscriptions

EventBridge

Create event bus

Resource-base policy (PS: 可以在 Create event bus 时 Load template 加载默认模板 选择其中的 allow_all_accounts_from_organization_to_put_events polic )

Create rules

{ "source": [{ "prefix": "" }] }

子账号配置

每个需要被整合事件的子账号都需要在EventBridge里面的Default Event Bus中部署规则和所需的IAM角色。

IAM

Permission

<<Organization Account ID>> 需要替换成主账号ID

<<Event Bus Name>> 需要替换成主账号 event bus name

{ "Version":"2012-10-17", "Statement":[ { "Action":["events:PutEvents"], "Resource":["arn:aws:events:us-east-1:<<Organization Account ID>>:event-bus/<<Event Bus Name>>"], "Effect":"Allow"} ]}

Trust relationships

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":"events.amazonaws.com"}, "Action":"sts:AssumeRole"} ]}

EventBridge

敲黑板 这里一定要选择 default event bus

创建 ec2 status rules

创建 ec2 scheduled change rules 同理

event pattern

{ "source":["aws.health"], "detail-type":["AWS Health Event"], "detail":{ "service":["EC2"], "eventTypeCategory":["scheduledChange"]}}


测试

将 ec2 stop & start

卸载

将上述创建的资源逆向删除即可

参考连接

https://aws.amazon.com/premiumsupport/knowledge-center/eventbridge-notification-scheduled-events/

https://aws.amazon.com/cn/blogs/china/centralized-integration-of-eventbridge-event-notifications-sent-to-ding-talk-and-enterprise-wechat/

https://aws.amazon.com/cn/blogs/china/enable-wechat-dingtalk-alarm-notification-with-one-click-based-on-aws-serverless/

https://github.com/Chris-wa-He/AWS-Lambda-notifier/tree/Feishu-notifier

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容