📝
常に最新のジョブ定義をEventBridgeで実行するには
概要
AWS Batchにて、ジョブ定義を作成して、ジョブ定義をEventBridgeで定期的に実行しています。
ジョブ定義を修正しても、修正が反映されないという事象が発生しました。
そこで、もっといい指定方法はないかどうかを調査してみました。
結論
調査した結果、常に最新のジョブ定義を使用したい場合は、EventBridgede
「ジョブ定義名」を指定すれば良いことが分かりました。
ただし、メリット・デメリットがあるので、使い方には要注意です。
ジョブ定義名指定による、EventBridge検証
ルールの作成
- 作成したジョブ定義を実行するためのルールを作成していきます
- ルール名は適当に「test_rule」とします
- 「ルールを作成」ボタンをクリックします
- 今回はテストなので、1分間隔で実行するようにします
- ターゲットは「バッチジョブのキュー」を選択し、必要な情報を入力します
- ジョブキュー(ジョブキューのARN)
- ジョブ定義(ジョブ定義名またはARN)
- ジョブ名(適当に)
- ジョブ定義については、ARNを入力する方法もありますが、今回は常に最新のジョブ定義を実行したいので ジョブ定義名 を入力していきます
- ジョブ名は適当に入力します
- 「作成」ボタンをクリックします
- ログを確認してみると、「hello world」出力されていることが分かります
※最初に作成したジョブ定義はデフォルトで作成するとできるジョブ定義です
ここでジョブ定義を編集する
- ここでジョブ定義のリビジョンを上げるために、ジョブ定義の編集を行なっていきます。
- 「リビジョンの作成」ボタンをクリックする
- コマンドを変更する
リビジョンが変わったことが分かるように出力される内容を変更します
- 「作成」ボタンをクリックする
- 新しいリビジョンのジョブ定義が作成されました
- ログを確認すると、先ほど変更した「hello world second」となっていることが確認できます
ジョブ定義の指定方法は用途によって使い分けられる
用途 | Event Bridgeで指定するジョブ定義 |
---|---|
常に最新のジョブ定義で実行したい場合 | ジョブ定義名を指定する |
特定のリビジョンで実行したい場合 | ジョブ定義のARNを指定する |
メリット・デメリット
指定方法 | メリット | デメリット |
---|---|---|
ジョブ定義名 | 特にEventBridgeを編集することなく、常に最新の上部定義で実行される | 意図しないジョブ定義の編集を行なった場合にそのジョブ定義でEvent Bridgeが実行される場合がある。 (例えば、検証のためにジョブ定義を編集するような場合、使い終わったら削除するなどの作業が必要になる) |
ARN | EventBridgeを編集しない限り最新のジョブ定義が使用されることはない (ARNはリビジョン番号も含まれているので、明示的にARNを変更しないと変更したジョブ定義が実行されることはない) |
ジョブ定義の内容を変更した場合は、同時にEvent BridgeのARNを変更しなければならない 気をつけないとこの作業を忘れがち |
おまけ
当時、ジョブ定義を更新するときに、必ず新規作成で作り直さなきゃいけなかったのに、いつの間にか「リビジョンの作成」なんてボタンができてる!
どうも、編集機能が追加されたようです。
もっと早く欲しかったなぁ。。
Discussion