📝

常に最新のジョブ定義をEventBridgeで実行するには

2022/02/23に公開

概要

AWS Batchにて、ジョブ定義を作成して、ジョブ定義をEventBridgeで定期的に実行しています。
ジョブ定義を修正しても、修正が反映されないという事象が発生しました。
そこで、もっといい指定方法はないかどうかを調査してみました。

結論

調査した結果、常に最新のジョブ定義を使用したい場合は、EventBridgede
「ジョブ定義名」を指定すれば良いことが分かりました。
ただし、メリット・デメリットがあるので、使い方には要注意です。

ジョブ定義名指定による、EventBridge検証

ルールの作成

  1. 作成したジョブ定義を実行するためのルールを作成していきます

ルールの作成

  1. ルール名は適当に「test_rule」とします

ルール名の入力

  1. 「ルールを作成」ボタンをクリックします

ルールを作成する

  1. 今回はテストなので、1分間隔で実行するようにします

スケジュールの設定

  1. ターゲットは「バッチジョブのキュー」を選択し、必要な情報を入力します
  • ジョブキュー(ジョブキューのARN)
  • ジョブ定義(ジョブ定義名またはARN)
  • ジョブ名(適当に)

ターゲットを選択

  1. ジョブ定義については、ARNを入力する方法もありますが、今回は常に最新のジョブ定義を実行したいので ジョブ定義名 を入力していきます

ジョブ定義名

  1. ジョブ名は適当に入力します

ジョブ名

  1. 「作成」ボタンをクリックします

作成ボタン

  1. ログを確認してみると、「hello world」出力されていることが分かります

CloudWatchログ

※最初に作成したジョブ定義はデフォルトで作成するとできるジョブ定義です

ここでジョブ定義を編集する

  1. ここでジョブ定義のリビジョンを上げるために、ジョブ定義の編集を行なっていきます。

  1. 「リビジョンの作成」ボタンをクリックする

  1. コマンドを変更する
    リビジョンが変わったことが分かるように出力される内容を変更します

  1. 「作成」ボタンをクリックする

  1. 新しいリビジョンのジョブ定義が作成されました

  1. ログを確認すると、先ほど変更した「hello world second」となっていることが確認できます

ジョブ定義の指定方法は用途によって使い分けられる

用途 Event Bridgeで指定するジョブ定義
常に最新のジョブ定義で実行したい場合 ジョブ定義名を指定する
特定のリビジョンで実行したい場合 ジョブ定義のARNを指定する

メリット・デメリット

指定方法 メリット デメリット
ジョブ定義名 特にEventBridgeを編集することなく、常に最新の上部定義で実行される 意図しないジョブ定義の編集を行なった場合にそのジョブ定義でEvent Bridgeが実行される場合がある。

(例えば、検証のためにジョブ定義を編集するような場合、使い終わったら削除するなどの作業が必要になる)
ARN EventBridgeを編集しない限り最新のジョブ定義が使用されることはない

(ARNはリビジョン番号も含まれているので、明示的にARNを変更しないと変更したジョブ定義が実行されることはない)
ジョブ定義の内容を変更した場合は、同時にEvent BridgeのARNを変更しなければならない

気をつけないとこの作業を忘れがち

おまけ

当時、ジョブ定義を更新するときに、必ず新規作成で作り直さなきゃいけなかったのに、いつの間にか「リビジョンの作成」なんてボタンができてる!

どうも、編集機能が追加されたようです。
もっと早く欲しかったなぁ。。

リビジョン作成

GitHubで編集を提案

Discussion