AWS CloudFormation: AWS:: События:: Правило - InputTemplate

Я создаю файл AWS CloudFormation и застрял в AWS::Events::Rule оказание услуг. Я пытаюсь создать правило, которое будет отправлять разработчикам электронное письмо для каждого этапа CodePipeline. Это весь файл:

{
    "PipelineWebpageAccessStageNotification": {
        "Type": "AWS::Events::Rule",
        "Properties": {
            "Description": "Send out notifications to developers about the CodePipeline stages status for the websites.",
            "Name": "codepipeline-webpage_access",
            "RoleArn": { "Fn::GetAtt": ["PipelineWebpageAccessStageNotificationRole", "Arn" ] },
            "EventPattern": {
                "source": [
                    "aws.codepipeline"
                ],
                "detail-type": [
                    "CodePipeline Stage Execution State Change"
                ],
                "detail": {
                    "pipeline": [
                        { "Ref": "PipelineWebpageAccess" }
                    ],
                    "state": [
                        "FAILED",
                        "CANCELED",
                        "RESUMED",
                        "SUCCEEDED",
                        "STARTED"
                    ]
                }
            },
            "State": "ENABLED",
            "Targets": [
                {
                    "Arn": { "Ref": "SNSTopic" },
                    "Id": "SNS",
                    "InputTransformer": {
                        "InputPathsMap": {
                            "pipeline": "$.detail.pipeline",
                            "stage": "$.detail.stage",
                            "state": "$.detail.state"
                        },
                        "InputTemplate": "Hello Human, This message is related to the CodePipeline: <pipeline>. Bellow are some details: \r\n\r\n - Stage: <stage>\r\n - Status: <state>\r\n\r\n Thank you for reading, Enjoy your existence."
                    }
                }
            ]
        }
    }
}

Вопрос с InputTemplate, CloudFormation говорит мне, чтобы отправить строку. Что я и делаю... Оказывается, вам действительно нужно отправить строку, содержащую JSON. Итак, я сделал это, как и в других местах, например, вы передаете строку с JSON при создании панели мониторинга в CloudWatch. Это работает без проблем. Но здесь - это продолжает терпеть неудачу.

Интересно, что такая же проблема возникает в панели инструментов AWS.

Я общался с AWS Tach Support, и они также не знают, как решить эту проблему, они предоставили несколько подходов, которые не попробовали.

Они сказали мне, что собираются спросить команду, которая отвечает за эту часть AWS, но у меня нет больших надежд.

Вопрос

Если бы у вас была такая же проблема и кое-как ее решить, мы были бы благодарны за решение:)

3 ответа

Это должна быть допустимая строка внутри AWS, а не только в JSON шаблон. Так InputTemplate должно быть так в JSON CloudFormation (обратите внимание на экранированные кавычки):

"InputTemplate": "\"your text here <placeholders>\""

За YAML это должно быть так:

InputTemplate: |
    "Line 1 <placeholders>."
    "Line 2 <placeholders>."

Когда я создал его из консоли, он показывает мне, как показано ниже:

Input Transformer: {"InputPathsMap":{"state":"$.detail.state"},"InputTemplate":"\"bla <state>\""}   

Для этой конкретной проблемы мы отправили не объект JSON, а одну строку в двойных кавычках, которая также действительна в формате JSON. Затем он позволяет использовать заполнители внутри строки, подходящие для составления тела или темы электронного письма.

Итак, лямбда-выражение нашей электронной почты принимает следующий аргумент:

      "recipient@email.org\nSubject line with <placeholder>\nMessage line 1 with <placeholder>\nMessage line N"

Подтверждая, что комментарий azize верен, хотя \ r \n у меня не работал, они просто отображались в уведомлении. Вот что у меня сработало.

JSON:

      "InputTemplate": "\"Hello Human, This message is related to the CodePipeline: <pipeline>. Details:  - Stage: <stage> - Status: <state> Thank you for reading, Enjoy your existence.\""

YAML:

      InputTemplate: '"Hello Human, This message is related to the CodePipeline: <pipeline>. Details:  - Stage: <stage> - Status: <state> Thank you for reading, Enjoy your existence."'
Другие вопросы по тегам