Cloudformation Cloudwatch 输入模板格式
Posted
技术标签:
【中文标题】Cloudformation Cloudwatch 输入模板格式【英文标题】:Cloudformation Cloudwatch InputTemplate Formatting 【发布时间】:2019-02-02 15:42:37 【问题描述】:我正在尝试使用 cloudformation 模板创建与粘合事件匹配的 cloudwatch 事件规则,并以 SNS 主题为目标发送消息,我可以在 cloudwatch 控制台中创建它,但不能通过云手表模板创建.这是我的活动规则:
NotifyEventRule:
Type: AWS::Events::Rule
Properties:
Name: JobNotifyEvent
Description: Notification event on job status change.
EventPattern:
source:
- aws.glue
account:
- !Ref AWS::AccountId
detail-type:
- Glue Job State Change
detail:
jobName:
- !Ref GlueJobName
Targets:
-
Arn:
Ref: "JobNotificationTopic"
Id:
Ref: "JobNotificationTopicName"
InputTransformer:
InputTemplate: "Job finished in the following state: <state>."
InputPathsMap:
state: "$.detail.state"
问题在于 InputTemplate。我得到的错误是:
目标 JobNotificationTopic 的 InputTemplate 无效:[来源: (字符串)“工作在以下状态下完成:null。”;行:1,列: 10]。 (服务:AmazonCloudWatchEvents;状态代码:400;错误代码: 验证异常;请求编号:12345678...)
看来<state>
可能是问题所在。
【问题讨论】:
【参考方案1】:出于某种原因,CloudFormation 中 InputTemplate 的语法非常严格。它是字符串类型,但不接受任何形式的有效 YAML 字符串。
在您的情况下,您应该在输入字符串之前使用 YAML 文字块标量 |。
InputTransformer:
InputPathsMap:
state: "$.detail.state"
InputTemplate: |
"Job finished in the following state: <state>."
如果输入字符串是多行的,每行都必须用双引号引起来。
InputTransformer:
InputPathsMap:
state: $.detail.state
name: $.detail.name
InputTemplate: |
"Job <name> has just been run."
"Job finished in the following state: <state>."
请注意,您的字符串使用纯流标量,这对 : 字符很挑剔。冒号不能出现在空格或换行符之前。有关详细信息,请参阅Yaml multiline。但是,正如我指出的,大多数 YAML 多行规则不适用于 InputTemplate。
【讨论】:
【参考方案2】:这不是 YAML 格式的问题,因为使用 JSON 时会出现同样的错误。
InputTemplate 必须是 AWS 内部的字符串:
InputTemplate=
"\"The Pipeline <pipeline> Started\""
这个 AWS 开发者论坛主题给了我答案:https://forums.aws.amazon.com/thread.jspa?messageID=798687
【讨论】:
【参考方案3】:我认为问题在于 InputTemplate 不是有效的 JSON。见:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-inputtransformer.html#cfn-events-rule-inputtransformer-inputtemplate
InputTemplate 必须是有效的 JSON。
【讨论】:
以上是关于Cloudformation Cloudwatch 输入模板格式的主要内容,如果未能解决你的问题,请参考以下文章
如何为在 Cloudformation 中创建的 Lambda 设置 Cloudwatch 日志
如何在 cloudFormation 模板中包含 cloudWatch 日志组订阅?
通过 cloudformation 为 fargate 启动类型任务创建 cloudwatch 事件规则的“目标”
使用 cloudformation 基于 lambda 持续时间指标创建 cloudwatch 警报