Включение события выхода 1 в CloudWatch с использованием Terraform для ECS - PullRequest
0 голосов
/ 26 октября 2018

Я запускаю контейнеры в ECS и использую события AWS Cloudwatch, чтобы уведомлять меня о завершении моих задач.Вся инфраструктура была создана с использованием Terraform.Однако я не могу получить правильный синтаксис в своем шаблоне событий, так что я получаю уведомления только о ненулевых кодах выхода.

Следующий ресурс прекрасно работает и отправляет уведомления в SNS каждый раз, когда один из моихконтейнеры выходят:

resource "aws_cloudwatch_event_rule" "container-stopped-rule" {
  name        = "container-stopped"
  description = "Notification for containers that exit for any reason. (error)."

  event_pattern = <<PATTERN
{
  "source": [
    "aws.ecs"
    ],
  "detail-type": [
    "ECS Task State Change"
    ],
  "detail": {

    "lastStatus": [
      "STOPPED"
    ],
"stoppedReason" : [
    "Essential container in task exited"
  ]
}
}
PATTERN
}

Однако я пытаюсь слегка изменить шаблон, чтобы получать уведомления только при выходе из контейнера с кодом ошибки - так как мы получаем так много уведомлений, мы началичтобы отключить электронную почту и иногда не замечать уведомления по электронной почте о выходе контейнеров с ошибками:

resource "aws_cloudwatch_event_rule" "container-stopped-rule" {
  name        = "container-stopped"
  description = "Notification for containers with exit code of 1 (error)."

  event_pattern = <<PATTERN
{
  "source": [
    "aws.ecs"
    ],
  "detail-type": [
    "ECS Task State Change"
    ],
  "detail": {
    "containers": [
      {
      "exitCode": 1
      }
    ],
    "lastStatus": [
      "STOPPED"
    ],
"stoppedReason" : [
    "Essential container in task exited"
  ]
}
}
PATTERN
}

Это вызывает следующую ошибку, когда я terraform apply:

aws_cloudwatch_event_rule.container-Stop-rule: Обновление правила события CloudWatch не выполнено: InvalidEventPatternException: Шаблон события недопустим.Причина: значение соответствия должно быть String, number, true, false или null в [Source: (String) "{" detail ": {" Containers ": [{" exitCode ": 1}]," lastStatus ": ["STOPPED "]," StopReason ": [" Основной контейнер в задаче завершен "]}," detail-type ": [" Изменение состояния задачи ECS "]," source ": [" aws.ecs "]}";строка: 1, столбец: 27] код состояния: 400

Меня это озадачивает, поскольку я следую точной структуре, изложенной в документации AWS CloudWatch для контейнеров ,Я даже пытался поместить двойные кавычки вокруг 1 на тот случай, если Terraform требуется строка вместо числа.

Я также пытался использовать Консоль AWS для ручного редактирования шаблона событий JSON, но получил эту ошибку:

Ошибка проверки.Подробности: Шаблон события содержит недопустимое значение (может быть только непустой массив или непустой объект)

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

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Синтаксис шаблона событий довольно странный, я столкнулся с той же проблемой.Будет работать следующее:

{
  "source": [
    "aws.ecs"
  ],
  "detail-type": [
    "ECS Task State Change"
  ],
  "detail": {
    "lastStatus": [
      "STOPPED"
    ],
    "stoppedReason": [
      "Essential container in task exited"
    ],
    "containers": {
      "exitCode": [
        1
      ]
    }
  }
}

Я использовал $.detail.group в Input Transformer, чтобы получить имя семейства задач в уведомлении.

0 голосов
/ 29 октября 2018

Согласно https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/CloudWatchEventsandEventPatterns.html, For a pattern to match an event, the event must contain all the field names listed in the pattern. The field names must appear in the event with the same nesting structure.

Можете ли вы добавить дополнительные списки полей здесь https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html как clusterArn, containerInstanceArn и т. Д.

...