Я запускаю контейнеры в 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, но получил эту ошибку:
Ошибка проверки.Подробности: Шаблон события содержит недопустимое значение (может быть только непустой массив или непустой объект)
Я, честно говоря, немного озадачен в этом пункте и был бы признателен за любые советы о том, где мой синтаксис неправильный.