概要
CloudwatchEventsで、AWS Batchのイベントパターンを使用する場合、少し書き方で工夫が必要と思ったので、紹介します。
job-definition
の最新バージョンを取得できる?
AWS Batchのジョブステータスの変更をCloudwatchEventsをイベントパターンで指定する場合、以下のようにすると思います。jobDefinition
に特定のジョブ定義を指定することで、そのジョブのステータス変更のみを検知するようにできます。
{
"detail-type": ["Batch Job State Change"],
"source": ["aws.batch"],
"detail": {
"jobDefinition": ["arn:aws:batch:ap-northeast-1:012345678901:job-definition/sample-batch-job-definition"],
"status": ["FAILED"]
}
}
ただし、この場合、最新バージョンが作成されていても取得されませんでした。
例えば最新バージョンが5の場合、以下のように:5
と指定すれば、取得されます。
"jobDefinition": ["arn:aws:batch:ap-northeast-1:012345678901:job-definition/sample-batch-job-definition:5"],
ただし、これだとジョブ定義側に変更があるたびに、CloudWatchEvents側も変更しなければならないので、面倒だなと思いました。
Prefixを利用して最新バージョンを取得
CloudWatchイベントパターンでジョブ定義の特定のバージョンを指定せずに、最新バージョンを取得できる方法として、prefix
を利用した方法があります。
以下のように、jobDefinition
フィールドにprefix
を使用してジョブ定義名のみを指定。
{
"detail-type": ["Batch Job State Change"],
"source": ["aws.batch"],
"detail": {
"jobDefinition": [{
"prefix": "arn:aws:batch:ap-northeast-1:012345678901:job-definition/sample-batch-job-definition"
}],
"status": ["FAILED"]
}
}
上記のようにすることで、指定のジョブ定義の最新バージョンを取得することができました。こちらの方がメンテナンスを簡素化できて良いですね。ご参考ください。