如何通过CloudFormation模板实现CodeBuild失败时自动发送通知邮件
实现思路
整个功能基于AWS三个服务的联动实现,无需修改现有CodeBuild项目的构建逻辑:
- CodeBuild运行时会自动向EventBridge推送构建状态变更事件
- 配置EventBridge规则过滤出构建失败的事件
- 规则触发后调用SNS(简单通知服务)向预设邮箱发送通知邮件
具体操作指引
1. 在现有CloudFormation模板中新增SNS相关资源
SNS用于存储接收通知的邮箱配置,以及发送邮件,在模板的Resources段添加以下内容:
# SNS主题,用于接收构建失败事件并推送邮件 CodeBuildFailNotificationTopic: Type: AWS::SNS::Topic Properties: DisplayName: CodeBuild构建失败通知 Subscription: - Endpoint: "你的接收通知邮箱地址@example.com" # 替换为实际邮箱 Protocol: email # 权限策略:允许EventBridge向该SNS主题发送消息 CodeBuildFailTopicPolicy: Type: AWS::SNS::TopicPolicy Properties: Topics: - Ref: CodeBuildFailNotificationTopic PolicyDocument: Version: "2012-10-17" Statement: - Effect: Allow Principal: Service: events.amazonaws.com Action: sns:Publish Resource: Ref: CodeBuildFailNotificationTopic
2. 新增EventBridge事件规则
用于匹配CodeBuild构建失败的事件,同样添加到Resources段:
CodeBuildFailEventRule: Type: AWS::Events::Rule Properties: Description: 匹配CodeBuild构建失败事件 EventPattern: source: - aws.codebuild detail-type: - CodeBuild Build State Change detail: build-status: - FAILED # 如果需要包含其他异常状态可以加下面两项 # - STOPPED # - FAULT # 如果只需要监控特定的CodeBuild项目,可以加上下面的配置,替换为你的项目名 # project-name: # - 你的CodeBuild项目名 State: ENABLED Targets: - Arn: Ref: CodeBuildFailNotificationTopic Id: "SendToSNSNotification"
3. 更新CloudFormation栈
修改完模板后执行更新操作即可:
- 控制台操作:进入CloudFormation控制台,找到你现有CodeBuild对应的栈,点击「更新」,选择「上传模板文件」提交修改后的模板,按提示走完流程即可,遇到权限确认页直接勾选允许即可。
- CLI操作:执行以下命令(需要提前配置好AWS CLI权限):
aws cloudformation update-stack --stack-name 你的栈名称 --template-body file://./修改后的模板文件名.yaml --capabilities CAPABILITY_NAMED_IAM
4. 生效验证
- 栈更新完成后,你填写的接收邮箱会收到一封AWS SNS的订阅确认邮件,点击邮件内的确认链接完成订阅
- 手动触发一次CodeBuild构建,故意让构建失败,测试是否能收到通知邮件
注意事项
- 如果需要添加多个接收邮箱,只需要在SNS主题的
Subscription配置段多加几条订阅配置即可 - 如果不需要限制只监控特定CodeBuild项目,不用添加
project-name过滤规则,账户内所有CodeBuild构建失败都会触发通知 - SNS订阅确认邮件有效期为3天,超过有效期未确认需要重新更新栈触发订阅邮件
内容的提问来源于stack exchange,提问作者Kivi
相关产品推荐
相关产品推荐

