ECSタスク定義の二重管理の問題
通常の設定では、ECSのタスク定義は2つの場所で管理されます。
- Terraformを使用してECSリソースを作成するとき
- GitHub Actionsを使用して継続的インテグレーションと継続的デリバリー(CI/CD)パイプラインを設定するとき
この二重性は、管理上の複雑さやTerraformとGitHubの間でのタスク定義の潜在的な不一致による課題を引き起こし、これらのプロセスを管理するチームにとって困難をもたらす可能性があります。
GitHub Actionsを使用したCI/CDの実装
ECSデプロイメントでは、task-definition.json
ファイルがリポジトリに配置され、GitHub Actionsのワークフローで参照されます。
次のスニペットは、GitHub Actionsがtask-definition.json
を使用してAmazon ECSタスク定義をレンダリングし、それをAmazon ECSサービスにデプロイする一般的な実装です。
.
.
.
- name: Render Amazon ECS task definition
id: render-container
uses: aws-actions/amazon-ecs-render-task-definition@v1
with:
task-definition: task-definition.json
container-name: container_name
image: 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/repo:latest
- name: Deploy to Amazon ECS service
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: ${{ steps.render-container.outputs.task-definition }}
service: sample-service
cluster: sample-cluster
この設定は、TerraformとGitHub Actionsの両方でタスク定義が管理される二重管理の問題の基盤となり、潜在的な困難や不一致が引き起こされます。
解決策のアプローチ
この問題への解決策は、amazon-ecs-deploy-task-definition
GitHub ActionsのAWSドキュメントで提案されています。
If you do not wish to store your task definition as a file in your git repository, your GitHub Actions workflow can download the existing task definition.
タスク定義はGitリポジトリのファイルとして保存せず、代わりに、既存のタスク定義はAWS CLIを使用して直接AWS ECSからGitHub Actionsのワークフローでダウンロードすることができます。
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition my-task-definition-family --query taskDefinition > task-definition.json
GitHub Actionsの修正
したがって、GitHub Actionsでの変更は次のようになります。
.
.
.
- name: Download task definition
run: |
aws ecs describe-task-definition --task-definition sample-definition --query taskDefinition > task-definition.json
- name: Deploy to Amazon ECS service
uses: aws-actions/amazon-ecs-deploy-task-definition@v1
with:
task-definition: task-definition.json
service: sample-service
cluster: sample-cluster
この変更により、タスク定義の管理がシンプルになります。GitHubリポジトリでtask-definition.json
ファイルを管理する必要はありません。タスク定義はTerraformだけで管理することができ、TerraformとGitHubの間で定義の不一致のリスクがなくなります。
参考