amazon-web-services - Cloudformation Cloudwatch 输入模板格式
问题描述
我正在尝试使用 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 无效:[Source: (String)"Job 在以下状态下完成:null。"; 行:1,列:10]。(服务:AmazonCloudWatchEvents;状态代码:400;错误代码:ValidationException;请求 ID:12345678...)
似乎<state>
可能是问题所在。
解决方案
InputTemplate 的语法由于某种原因在 CloudFormation 中非常严格。它是字符串类型,但不接受任何形式的有效 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 多行。但是,正如我所指出的,大多数 YAML 多行规则不适用于 InputTemplate。
推荐阅读
- javascript - 如何将JSF中的对象列表传递给javascript函数
- android - HelloCordova 在我的 Android 手机上错误卸载但需要重新安装,在 CLI 中运行的 Cordova 不这样做
- javascript - 检查一个数组是否包含 JavaScript 中另一个数组的任何元素,并返回两个数组中都不存在的值
- python - Numpy 索引顺序
- makefile - 更改openwrt编译包的默认目录src
- python - 如何在 Python 中仅在特定点进行平滑样条插值设置导数?
- java - 如何查看 myBatis 真正使用的 SQL 查询?
- windows - 在 windows 中启动 mongod 服务
- node.js - 我正在查看 lambda 日志
- javascript - 更改 ngFor 的特定元素,其中列表更改