首页 文章

Cloudformation Cloudwatch InputTemplate格式

提问于
浏览
0

我正在尝试使用cloudformation模板创建一个匹配粘合事件的cloudwatch事件规则,并以SNS主题为目标发送消息,我可以在cloudwatch控制台中创建它,但不能通过 Cloud 监视模板创建 . 这是我的活动规则:

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 . ”; line:1,column:10] . (服务:AmazonCloudWatchEvents;状态代码:400;错误代码:ValidationException;请求ID:12345678 ......)

似乎 <state> 可能是问题所在 .

1 回答

  • 1

    在CloudFormation中,InputTemplate的语法由于某种原因非常严格 . 它是string类型,但它不接受任何形式的有效YAML字符串 .

    在您的情况下,您应该在输入字符串之前使用YAML Literal Block Scalar .

    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 .

相关问题