如何在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 北京和宁夏区暂时不支持事件的跨区传输。

架构设计

架构图

相关服务介绍

架构介绍

准备工作

创建飞书机器人并将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 代码并部署

import os
import boto3
from feishu import Feishu
from alarm import Alarm
secretURL = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxxxxxxxxxx"
# Initial Feishu handler
feishu = Feishu(secretURL)
def lambda_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."
    }
    return response
def msg_format(event):
    try:
        # 消息来源是SNS,取 $.Records[0].Sns.Message,并对字符串进行一些处理,确保发送时可以正常显示
        msg = event['Records'][0]['Sns']['Message']
        # 进行字符串处理后返回,以确保IM客户端正确显示
        msg = msg.replace("n", "
")
        if msg[0] == '"' and msg[-1] == '"':
            msg = msg[1:-1]
        return msg
    except:
        # 消息来源不是SNS,直接返回
        return event

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

<> 需要替换成主账号ID

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

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "events:PutEvents" ], "Resource": [ "arn:aws:events:us-east-1:<>:event-bus/<>" ], "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

展开阅读全文

页面更新:2024-05-05

标签:亚马逊   事件   通知   字符串   总线   架构   账号   客户端   规则   代码

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top