【问题标题】:SNS Topic is not sending the pipeline event change emails when configured through Cloudformation通过 Cloudformation 配置时,SNS 主题未发送管道事件更改电子邮件
【发布时间】:2019-05-04 10:50:12
【问题描述】:

我正在创建一个cloudwatch event,它会在我的code pipeline 中发生状态更改并分配给SNS topic 时触发。我正在通过Cloudformation Stack进行上述所有配置。下面是我的堆栈模板

{
    "Description": "Triggering CodePipeline notifications.",
    "AWSTemplateFormatVersion": "2010-09-09",
    "Parameters": {
        "EmailAddress": {
            "Description": "Email Address",
            "Type": "String"
        }
    },
    "Resources": {
        "EventRule": {
            "Type": "AWS::Events::Rule",
            "Properties": {
                "Description": "EventRule",
                "EventPattern": {
                    "source": [
                        "aws.codepipeline"
                    ],
                    "detail-type": [
                        "CodePipeline Pipeline Execution State Change"
                    ],
                    "detail": {
                        "state": [
                            "FAILED"
                        ],
                        "pipeline": [
                           "mypipelinename"
                        ]
                    }
                },
                "State": "ENABLED",
                "Targets": [
                    {
                        "Arn": {
                            "Ref": "MySNSTopic"
                        },
                        "Id": "PipelineNotificationTopic",
                        "InputTransformer": {
                            "InputTemplate": "\"The Pipeline <pipeline> has failed.\" ",
                            "InputPathsMap": {
                                "pipeline": "$.detail.pipeline"
                            }
                        }
                    }
                ]
            }
        },
        "MySNSTopic": {
            "Type": "AWS::SNS::Topic",
            "Properties": {
             "TopicName": "Huaaa",
                "Subscription": [
                    {
                        "Endpoint": {
                            "Ref": "EmailAddress"
                        },
                        "Protocol": "email"
                    }
                ]
            }
        }
    }
}

这将创建所有必要的资源,例如 cloudwatch 事件和 SNS 订阅,并为我的电子邮件地址发送通知以进行确认。但是,当 mypipeline 中有 state change 时,这不会触发任何电子邮件通知。

但是当我创建一个新的SNSTopic 并使用aws console 创建一个subscription 并将其附加到由cloudformation stack 作为目标创建的cloudwatch 事件时,它运行良好。我可以在有变化时收到通知。

我的模板中是否缺少任何内容?

谢谢 任何帮助表示赞赏

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-sns amazon-cloudwatch


    【解决方案1】:

    您缺少设置允许发布的AWS::SNS::TopicPolicy

    例如(写成.yml)

    MySNSTopicPolicy:
      Type: AWS::SNS::TopicPolicy
      Properties:
        Topics:
          - !Ref MySNSTopic
        PolicyDocument:
          Version: 2012-10-17
          Statement:
            - Effect: Allow
              Principal:
                AWS: '*'
              Action: sns:Publish
              Resource: !Ref MySNSTopic
    

    【讨论】:

    • 谢谢@MaikaY。我有几个问题:我应该只使用AWS::SNS::TopicPolicy 不能使用IAM:Role 并授予它 SNS 权限吗?而且在您的代码 sn-p 中,我可以将Prinicpal 保留为我的Cloudwatchevent ARN 吗?因为当我尝试将其保存在 MySNSTopicPolicyPrincipal 中时,我收到了错误状态 400。
    • @Private 如果您只想将sns:publish 操作限制为您的CloudWatch 事件,您可以轻松地将* 与您的EventRule 资源的ARN 交换。请记住,每个Topic 可以只添加一个 TopicPolicy
    猜你喜欢
    • 2017-10-03
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2023-02-14
    • 2021-11-17
    • 1970-01-01
    • 2011-07-21
    • 2013-01-01
    相关资源
    最近更新 更多