Cloudformation Cloudwatch Форматирование ввода InputTemplate - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь использовать шаблон облачной информации для создания правила события cloudwatch, которое соответствует событию glue и предназначается для темы 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: [Источник: (String) "Работа завершена в следующем состоянии: null."; строка: 1, столбец: 10]. (Сервис: AmazonCloudWatchEvents; Код состояния: 400; Код ошибки: ValidationException; Идентификатор запроса: 12345678 ...)

Кажется, что <state> может быть проблемой.

Ответы [ 3 ]

0 голосов
/ 12 июня 2019

Это не проблема с форматом YAML, поскольку вы получаете ту же ошибку, используя JSON.

InputTemplate должен быть строкой внутри AWS:

InputTemplate=
                "\"The Pipeline <pipeline> Started\""

Эта тема форума разработчиков AWS дала мне ответ: https://forums.aws.amazon.com/thread.jspa?messageID=798687

0 голосов
/ 19 июля 2019

Я считаю, что проблема в том, что InputTemplate не является допустимым JSON. См .: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-events-rule-inputtransformer.html#cfn-events-rule-inputtransformer-inputtemplate

InputTemplate должен быть допустимым JSON.

0 голосов
/ 12 сентября 2018

Синтаксис для InputTemplate по какой-то причине довольно строг в CloudFormation. Он имеет тип 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.

...