
背景
前回、AWS Batchのジョブ定義ファイルを取得するため、AWS CLIでスイッチロール先のAWSアカウントのCredentialsの設定を行いました。
今回はそのジョブ定義ファイルを使って、GitHub ActionsでAWS Batchのデプロイを行いたいと思います。
Batchのデプロイ
Batchのデプロイの範囲ですが、今回は以下の部分を対象とします。
- ECRにログイン
- Batch実行コンテナイメージのビルド
- Batch実行コンテナイメージをECRに登録
- ジョブ定義ファイル内に記載したコンテナイメージのURLを上記で登録したコンテナイメージのURLで置き換え
- ジョブ定義ファイルのデプロイ
GitHub Actionsの実装
ではGitHub Actionsを実装していきます。環境変数が至る所で参照されていますが、jobsの上あたりで全て定義してあります。また、GitHub上でsecretsを登録しております。
ECRにログイン
ECRへのログインはAmazon ECSのテンプレートと同じ形で実行できます。
1 | - name: Configure AWS credentials |
ここではまだ永続的なCredentialsを使っていますが、近いうちにIAM Roleを利用した一時的なCredentialsに置き換えようと思います。
コンテナイメージのビルド、ECRへ登録
コンテナイメージのビルドとECRへの登録もAmazon ECSのテンプレートと同じ形で実行できます。
1 | - name: Build, tag, and push image to Amazon ECR |
最後に、コンテナイメージのURLを出力しています。
ジョブ定義ファイルの更新
次にジョブ定義ファイルの更新を行います。
ジョブ定義ファイル内のコンテナイメージのURLを新しくECRに登録したコンテナイメージのURLに差し替える必要があります。
いろんな方法があると思いますが、わたしは前回取得したジョブ定義ファイルをテンプレートファイルとしてGit管理しておき、そのテンプレートファイルのコンテナイメージURLの部分だけ置換するような方法にしました。
1 | - name: Fill in the new image ID in the AWS Batch job definition |
ジョブ定義ファイル内のコンテナイメージの箇所は__image__としておき、それをECRに登録したコンテナイメージのURLに置き換え、ファイルとして保存します。
1 | { |
コマンドの箇所はplaceholderが利用できるようですが、コマンドの箇所だけのようです。
https://docs.aws.amazon.com/ja_jp/batch/latest/userguide/job_definition_parameters.html#parameters
これで新しいコンテナイメージのジョブ定義ファイルが作成できました。
ジョブ定義ファイルのデプロイ
最後にジョブ定義ファイルのデプロイを行います。
1 | - name: Deploy AWS Batch job definition |
aws batch register-job-definitionコマンドを用いて、ジョブ定義ファイルを登録します。そうすることで新しいジョブ定義ファイルが有効になります。
異常で、AWS Batchのデプロイは完了です。
まとめ
今回はAWS BatchをGitHub Actionsを用いてデプロイしました。AWS BatchのトリガーとしてAmazon EventBridgeを利用しているのであれば、EventBridge側の変更も必要になるかもしれません。こちらは近いうちに調査してみます。
また、今回はaccess_key_id, secret_access_keyという永続的なCredentialsを利用しましたが、セキュリティ的に永続的なCredentialsを利用するのは好ましくありません。次回は一時的なCredentialsを利用してAWS Batchをデプロイするよう修正したいと思います。