无法通过 CFT 在 CodeBuild 项目上成功设置 SNS,但可以手动工作

Unable to successfully set up SNS on CodeBuild project through CFT but works manually

我正在尝试设置一个 SNS 系统,以便在构建失败时发送电子邮件。目前我只是将它设置为在达到几个不同阶段时发送通知以进行测试。

我已经按照 AWS 的教程多次学习,以至于我已经记住了整个过程,但是当我将其转换为 CFT 时,有些东西不起作用。

我在创建所有内容时收到确认电子邮件,但之后当我单击我的 CodeBuild 项目中的 "Start Build" 按钮时,我没有收到任何有关构建状态的电子邮件。
如果我手动执行此操作,我将收到所有预期的电子邮件。

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 事件规则

根据您发布的内容,我看到没有 AWS::SNS::TopicPolicy 允许 CW 事件向其提交任何消息。

主题策略需要在 CFN 中明确创建。控制台在后台执行此操作。示例策略如下:

{
  "Sid": "AWSEvents_kkk_Id983908485049",
  "Effect": "Allow",
  "Principal": {
    "Service": "events.amazonaws.com"
  },
  "Action": "sns:Publish",
  "Resource": "<my-sns-topic-arn>"
}