无法通过 CFT 在 CodeBuild 项目上成功设置 SNS,但手动工作
Posted
技术标签:
【中文标题】无法通过 CFT 在 CodeBuild 项目上成功设置 SNS,但手动工作【英文标题】:Unable to successfully set up SNS on CodeBuild project through CFT but works manually 【发布时间】:2020-09-30 04:17:51 【问题描述】:我正在尝试设置一个 SNS 系统,以便在构建失败时发送电子邮件。目前,我只是将它设置为在达到几个不同阶段时发送通知以进行测试。
我已经按照 AWS 的教程学习了很多次,以至于我已经记住了整个过程,但是当我将它翻译成 CFT 时,有些东西不起作用。
创建所有内容后,我会收到确认电子邮件,但之后在我的 CodeBuild 项目中单击“开始构建”按钮时,我不会再收到任何有关构建状态的电子邮件。 如果我手动执行此操作,我将收到所有预期的电子邮件。
sns-build-notifications.yml
###
### Stack Name: sns-build-notifications
###
### Template Name: sns-build-notifications.yml
###
### Description: Creates a notification system that emails users when a
### specified build fails
###
AWSTemplateFormatVersion : '2010-09-09'
Globals:
Api:
OpenApiVersion: 3.0.1
Transform: AWS::Serverless-2016-10-31
Resources:
rSnsTopicDemo:
Type: AWS::SNS::Topic
Properties:
TopicName: rSnsTopicDemo
Subscription:
- Protocol: email
Endpoint: myEmail@gmail.com
rCloudWatchEventRuleDemo:
Type: AWS::Events::Rule
Properties:
Description: Delete when finished
EventPattern:
source:
- aws.codebuild
detail-type:
- CodeBuild Build State Change
detail:
build-status:
- IN_PROGRESS
- SUCCEEDED
- FAILED
- STOPPED
project-name:
- CodeBuildStateChangeDemo
Targets:
- Arn: !Ref rSnsTopicDemo
Id: CodeBuildStateChangeDemo
InputTransformer:
InputPathsMap:
build-status: "$.detail.build-status"
InputTemplate: |
"Build has entered status: '<build-status>'"
我附上了一些通过 CFT 创建的资源图片。 出于安全考虑,某些名称可能与我在此处描述的名称不同。
CodeBuildStateChangeDemo
rSnsTopicDemo
rSnsTopicDemo 订阅
CloudWatch 事件规则
【问题讨论】:
【参考方案1】:根据您发布的内容,我看到 没有 AWS::SNS::TopicPolicy 允许 CW 事件向其提交任何消息。
主题政策需要在 CFN 中显式创建。控制台在后台执行此操作。示例策略如下:
"Sid": "AWSEvents_kkk_Id983908485049",
"Effect": "Allow",
"Principal":
"Service": "events.amazonaws.com"
,
"Action": "sns:Publish",
"Resource": "<my-sns-topic-arn>"
【讨论】:
好的,我先试试这个,谢谢你的建议。我确实注意到的一件事是,如果我将上面的两个资源分成两个单独的 CFT 并在不同的时间运行它们(首先是主题/子,然后是 CW 事件),一切都很好。这些知识会改变你的答案吗?这没有您建议的 TopicPolicy。 @BrandonBenefield 有趣。我不确定那将如何工作。您可以在控制台中查看 sns 策略。您可以比较通过控制台手动设置所有内容时的策略是什么,以及通过一两个 CFT 完成的策略有何不同。 正如你所说,我错过了 TopicPolicy 资源。谢谢您的帮助。请注意,此答案中的 JSON 实际上是 TopicPolicy 的Properties
部分。您仍然需要包含 Marcin 共享的链接中显示的其余资源。以上是关于无法通过 CFT 在 CodeBuild 项目上成功设置 SNS,但手动工作的主要内容,如果未能解决你的问题,请参考以下文章
Puppeteer 无法在 AWS CodeBuild 上运行 Chrome
CodeBuild 与 Amazon Virtual Private Cloud 结合使用
无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit