AWS Input Transformer - доступ к значению во вложенной JSON структуре - PullRequest
0 голосов
/ 25 февраля 2020

Я работаю над дизайном сообщения электронной почты, которое должно использовать AWS входной преобразователь.

https://docs.aws.amazon.com/eventbridge/latest/APIReference/API_InputTransformer.html

В сообщении я хотел бы включить детали .container.exitCode value.

Во входном преобразователе используется json точечная нотация для получения значений объектов, что-то вроде следующего вопроса: Как я могу получить доступ и обрабатывать вложенные объекты, массивы или JSON?

однако я не могу заставить его работать.

Мой шаблон входного преобразователя: a)

{"stopCode":"$.detail.stopCode","service":"$.detail.group",
"stoppedReason":"$.detail.stoppedReason",
"exitCode":"$.detail.containers[1].exitCode",
"clusterID":"$.detail.clusterArn",
"desiredStatus":"$.detail.desiredStatus",
"lastStatus":"$.detail.lastStatus",
"taskDef":"$.detail.taskDefinitionArn"}

b) шаблон электронной почты

"<service>: REQUEST=<desiredStatus>: 
LASTKNOWN=<lastStatus>: 
REASON=<stoppedReason>: 
CODE=<stopCode>: ID=<taskDef>: 
EXITCODE=<exitCode>"

Точнее, я заинтересован в этой части:

"exitCode":"$.detail.containers[1].exitCode"

Я могу получить доступ ко всем полям подробно, кроме секции контейнеров.

JSON структура сообщения (я удалил некоторые дополнительные поля):

 "detail":{      "attachments":[],
      "availabilityZone":"us-west-1a",
      "clusterArn":"arn:aws:ecs:us-west-1:575192902611:cluster/prod-batch",
      "containers":[         {            "containerArn":"arn:aws:ecs:us-west-1:575192902611:container/9f66314e-8d15-439e-8bc3-774119aa483c",
            "exitCode":0,
            "lastStatus":"STOPPED"

}

],
            "cpu":"0"

}

],
      "createdAt":"2020-02-24T16:22:46.518Z",
      "launchType":"FARGATE",
      "cpu":"256",
      "memory":"512",
      "stoppedReason":"Essential container in task exited",
      "version":5,
      "platformVersion":"1.3.0"

}

Буду очень признателен, если вы сможете посоветовать, как получить значение exitCode.

detail -> Containers-> exitCode

Я нашел разрешение. Правильная конструкция:

detail.containers[0].exitCode

Проблема была связана с тем фактом, что я пытался выбрать значение из 1-го узла (должен был использовать 0 для его адреса, а я использовал 1)

Подход, который я использовал для разработки этого выражение:

1. Получите неизмененный JSON вывод вашего уведомления SNS

Вставьте его в JSON средство проверки выражений
https://jsonpath.curiousconcept.com
Напишите ваше выражение и протестируйте его

Пример вывода, EXITCODE содержит правильное значение "семейство: backup-repo-to-s3-secrets-tsk: REQUEST = STOPPED: LASTKNOWN = STOPPED : REASON = Необходимый контейнер в задаче завершен: CODE = EssentialContainerExited: ID = arn: aws: ecs: us-west-1: 575192902611: определение задачи / резервное копирование, репозиторий-s3-secrets-tsk: 4: EXITCODE = 0"

...