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" ] } } } ) }
スッキリとした解法を見つけたのでこれで安眠できますね。