ECSタスク終了時のEventBridgeイベントパターンでメンテナンスとスケールインによるイベントを除外したい
公開日: 2024/11/17
概要
ECSのタスクが終了した際に、Slack通知したりイベントをログ保存したりしておきたいことがあります。
EventBridgeでイベントパターンを定義できるのですが、定期メンテナンスによるタスク置き換えとデプロイ時のスケールインも通知されてしまうのでそれらは除外したいです。
そういった場合のために特定の終了理由の場合は除外するルールを作成しました。
パターン
detail-typeをECS Task State Change
とすることでECSタスクの終了を検知し、detailでmy-cluster
のクラスタの変更のみ検知しています。
lastStatus
をSTOPPED
にしていますが、STOPPED
になるまでには数分かかるので、さらに早い段階でイベント発生したければDEACTIVATING
〜STOPPED
までいれると多少検知時間を早くできます。
Amazon ECS task lifecycle - Amazon Elastic Container Service
{
"detail-type": [
"ECS Task State Change"
],
"detail": {
"clusterArn": [
"arn:aws:ecs:ap-northeast-1:000000000000:cluster/my-cluster"
],
"lastStatus": [
"STOPPED"
],
"stoppedReason": [
{
"anything-but": {
"wildcard": [
"Scaling activity initiated by*",
"*ECS is performing maintenance on the underlying infrastructure hosting the task*"
]
}
}
]
}
}
stoppedReason
のanything-but
を複数定義してしまうと条件がORで繋がれるため思ったような挙動になりません。
「(Aでない)または(Bでない)」という条件は、それがAであれば(Bでない)、Bであれば(Aでない)が真になってしまうので結局全ての条件が真になってしまいます。
2023年10月以前はwildcardの条件がなかったので、prefixとsuffixの両方で除外したいようなときうまくパターンを作れなかったのですが、 wildcardで条件指定できるようになったことで「(AまたはB)でない」というように条件をまとめることができました。
参考
- [小ネタ]ECSタスクの異常終了を検知するEventBridgeイベントパターン | DevelopersIO
- Amazon ECS タスク停止イベントに関する Amazon Simple Notification Service アラートの送信 - Amazon Elastic Container Service
- Amazon ECS タスク状態変更イベント - Amazon Elastic Container Service
- Amazon のイベントパターンで使用する比較演算子 EventBridge - Amazon EventBridge
- Amazon EventBridge がルールでのワイルドカードフィルターのサポートを発表