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."'