Тема SNS не отправляет сообщения об изменении событий в конвейере при настройке через Cloudformation - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю 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 и создал subscription, используя aws console и прикрепил его к событию cloudwatch, которое было создано cloudformation stack в качестве цели, он работал нормально.Я могу получать уведомления при наличии изменений.

Я что-то пропустил в своем шаблоне?

Спасибо. Любая помощь приветствуется

1 Ответ

0 голосов
/ 03 декабря 2018

Вам не хватает установить 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
...