ふり返る暇なんて無いね

日々のメモ書きをつらつらと

EventBridgeのEventPatternで除外条件をつけたいとき

diary.masasuzu.net

EventBridgeでECS Taskの終了ステータスが0以外のとき、つまり異常終了したときのイベントを拾うためにrange関数を使いました。

resource "aws_cloudwatch_event_rule" "main" {
  name = local.name

  event_pattern = jsonencode(
    {
      "detail-type" : [
        "ECS Task State Change"
      ],
      "source" : [
        "aws.ecs"
      ],
      "detail" : {
        "containers" : {
          "exitCode" : range(1, 256),
          "lastStatus" : [
            "STOPPED"
          ]
        }
      }
    }
  )
}

が、よくよくドキュメントを見ると “anything-but” という比較演算子があるので、これを使えば素直に意図を表すことができそうです。

resource "aws_cloudwatch_event_rule" "main" {
  name = local.name

  event_pattern = jsonencode(
    {
      "detail-type" : [
        "ECS Task State Change"
      ],
      "source" : [
        "aws.ecs"
      ],
      "detail" : {
        "containers" : {
          "exitCode" : [
            {
              "anything-but" : [0]
            }
          ],
          "lastStatus" : [
            "STOPPED"
          ]
        }
      }
    }
  )
}

スッキリとした解法を見つけたのでこれで安眠できますね。