亚马逊AWS官方博客

亚马逊云科技中国区 Health Event 集中 IM 通知方案

摘要:AWS 中国区暂时不支持 Health Organizational View,多账号健康事件分散难以统一管理。本文介绍一种基于 EventBridge 跨账号事件转发的集中通知方案,通过 Hub-Spoke 架构将多个账号的 Health Event 聚合,并自动推送到飞书、钉钉、Teams、企业微信、Slack 等主流即时通讯工具,CloudFormation 一键部署,Serverless 架构无需预置资源。


一、背景与挑战

Amazon Personal Health Dashboard(PHD)为每个账号提供基础设施维护、产品生命周期变更等健康事件通知。然而在多账号环境下,PHD 事件管理存在以下痛点:

  • 事件分散难追踪:运维人员需要逐一登录各账号查看健康事件,响应效率低
  • 通知渠道不统一:团队使用不同的即时通讯工具,缺乏统一的事件通知机制
  • 缺乏集中视图:中国区暂时不支持 Health Event 的 Organizational View 功能,无法在组织层面集中查看所有成员账号的健康事件

本方案通过 EventBridge 跨账号事件转发机制,实现了类似 Organizational View 的集中监控能力,将多个账号的 Health Event 统一推送到飞书、钉钉、Teams、企业微信、Slack 等主流即时通讯工具。

二、方案架构

2.1 整体架构

[图 1]

方案采用 Hub-Spoke 模式:

  • 集中通知账号(Hub):部署 EventBridge 自定义事件总线、EventBridge Rule(含 InputTransformer)和 Lambda 通知函数
  • 推送账号(Spoke):部署 EventBridge 规则,将 Health Event 转发到集中账号

2.2 事件流程

[图 2]

完整流程:Amazon Health 产生事件 → 推送账号 EventBridge 规则匹配 → 跨账号转发到集中账号自定义事件总线 → InputTransformer 格式化消息 → 触发 Lambda → 自动识别平台并发送 Webhook 通知。

2.3 设计亮点

  • 集中管理:所有通知配置集中在一个账号,便于维护和审计
  • 灵活扩展:新增账号只需部署一条 EventBridge 转发规则,无需修改通知逻辑,也可通过 StackSets 实现新账号创建时自动部署
  • 多平台自适应:通过 Webhook URL 自动识别目标平台,适配对应消息格式
  • 消息模板可配置:通过 EventBridge InputTransformer 定义消息模板,修改格式无需改动代码
  • 安全可控:集中账号 EventBus 通过 Resource Policy 精确控制允许推送事件的账号或组织,防止未授权访问
  • 无固定成本:Serverless 架构,无需预置实例或固定资源,按事件触发付费,成本低

三、技术实现

3.1 跨账号事件转发

推送账号在默认事件总线上创建规则,匹配 aws.health 事件并转发到集中账号的自定义事件总线:

PhDPushRule:
  Type: AWS::Events::Rule
  Properties:
    EventBusName: default
    EventPattern:
      source:
        - aws.health
      detail-type:
        - AWS Health Event
    Targets:
      - Arn: !Ref PhDEventBusArn
        RoleArn: !GetAtt PhDPushRole.Arn

集中账号通过 EventBus 资源策略控制访问,支持按账号 ID 或 Organization ID 授权。

3.2 InputTransformer 消息格式化

消息格式化在 EventBridge Rule 层面完成,Lambda 只负责发送。修改通知内容只需更新 CloudFormation 模板中的 Event Bridge Rule 的 InputTransformer:

InputTransformer:
  InputPathsMap:
    account: "$.account"
    region: "$.region"
    service: "$.detail.service"
    eventTypeCode: "$.detail.eventTypeCode"
    startTime: "$.detail.startTime"
    description: "$.detail.eventDescription[0].latestDescription"
  InputTemplate: |
    "【Amazon Health 事件通知】\n 账号: <account>\n 区域: <region>\n 服务: <service>"

3.3 多平台通知发送

Lambda 通过 Webhook URL 特征自动识别目标平台,构造对应格式发送:

def lambda_handler(event, context):
    # event 已是 InputTransformer 格式化后的字符串
    message_content = event if isinstance(event, str) else json.dumps(event)
    send_notification(WEBHOOK_URL, message_content)

支持的平台及消息格式:

平台 URL 特征 数据格式
飞书 feishu.cn / lark msg_type: text
钉钉 dingtalk.com msgtype: text
Teams powerplatform.com / webhook.office.com Adaptive Card
企业微信 qyapi.weixin.qq.com msgtype: markdown
Slack hooks.slack.com text

四、部署指南

4.1 前置准备

获取 Webhook 地址:在目标通讯平台创建机器人/Webhook 并记录 URL:

准备 Lambda Layer 包

mkdir -p python-layer/python && cd python-layer
pip install requests -t python/
zip -r requests-layer.zip python/

4.2 部署集中通知账号(Hub)

# 上传 Lambda Layer
aws lambda publish-layer-version \
  --layer-name requests-layer \
  --zip-file fileb://requests-layer.zip \
  --region cn-northwest-1
# 部署 CloudFormation 栈
aws cloudformation create-stack \
  --stack-name PhDCentral \
  --template-body file://CNPhDCentral.yaml \
  --parameters \
    ParameterKey=WebhookUrl,ParameterValue=<Webhook 地址> \
    ParameterKey=RequestsLayerArn,ParameterValue=<Layer ARN> \
    ParameterKey=AllowedAccountIds,ParameterValue=<账号 ID 列表> \
  --capabilities CAPABILITY_IAM \
  --region cn-northwest-1

4.3 部署推送账号(Spoke)

在每个需要监控的亚马逊云科技账号中执行:

aws cloudformation create-stack \
  --stack-name PhDPush \
  --template-body file://CNPhDPush.yaml \
  --parameters \
    ParameterKey=PhDEventBusArn,ParameterValue=<集中账号 EventBus ARN> \
  --capabilities CAPABILITY_IAM \
  --region cn-northwest-1

4.4 测试验证

aws events put-events \
  --entries '[{
    "Source": "self.test.aws.health",
    "DetailType": "AWS Health Event",
    "Detail": "{\"eventTypeCode\":\"TEST_EVENT\",\"service\":\"EC2\",...}"
  }]' \
  --region cn-northwest-1

五、通知效果展示

[图 3]

[图 4]

[图 5]

六、扩展方向

  • 多 Webhook 支持:Lambda 环境变量配置多个 Webhook URL,同时推送到不同平台或群组
  • 更多平台与通知方式扩展:方案基于 Webhook 通用协议,任何支持 Webhook 方式接收消息的平台均可作为通知接收端。对于关键事件,还可对接飞书加急消息等接口实现短信、电话通知,具体示例参见项目仓库中的飞书加急通知方案部分
  • 事件过滤:在推送账号的 EventPattern 中添加服务、区域等过滤条件,按需推送
  • 自定义消息模板:修改 EventBridge Rule 的 InputTemplate,调整通知内容和格式
  • 通知审计:结合 CloudWatch Logs 对通知发送记录进行审计和追溯
  • 通知来源和通知方式扩展:可以参考项目仓库中对重点资源通过飞书加急消息接口进行短信、电话通知的示例,通过扩展 lambda 对接其他平台。

七、总结

本方案通过 EventBridge 跨账号事件转发 + InputTransformer 消息格式化 + Lambda Webhook 发送的组合,解决了亚马逊云科技中国区缺乏 Health Organizational View 的痛点。开箱即用支持飞书、钉钉、Teams、企业微信、Slack 等主流即时通讯工具,CloudFormation 一键部署,适用于单账号或任意规模的多账号环境。

资源链接

➡️ 下一步行动:

相关产品:

相关文章:

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

于培亮

西云数据技术客户经理,专注为亚马逊云科技中国区客户提供应用上云、架构优化及技术支持服务。


AWS 架构师中心:云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用