我正在尝试使用cloudformation模板创建一个与胶粘事件匹配并以SNS主题为目标向其发送消息的cloudwatch事件规则,我可以在cloudwatch控制台中创建它,但不能通过cloud watch模板创建它。这是我的活动规则:
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;错误代码:ValidationException;请求ID:12345678 ...)
似乎是<state>
可能是问题。
在您的情况下,应在输入字符串之前使用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。
InputTemplate必须是AWS中的字符串:
InputTemplate=
"\"The Pipeline <pipeline> Started\""
此AWS开发者论坛主题为我提供了答案:https://forums.aws.amazon.com/thread.jspa?messageID=798687
InputTemplate必须是有效的JSON。