Traffine I/O

日本語

2022-12-03

TerraformとGitHub ActionsにおけるECSタスク定義の二重管理の解消

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ドキュメントで提案されています。

https://github.com/aws-actions/amazon-ecs-deploy-task-definition

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の間で定義の不一致のリスクがなくなります。

参考

https://github.com/aws-actions/amazon-ecs-deploy-task-definition

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!