{"meta":{"title":"Amazon Elastic Container Serviceへのデプロイ","intro":"継続的デプロイ (CD) ワークフローの一部として Amazon Elastic Container Service (ECS) にプロジェクトをデプロイする方法について説明します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/how-tos","title":"方法"},{"href":"/ja/actions/how-tos/deploy","title":"デプロイ"},{"href":"/ja/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"サード パーティのプラットフォームへのデプロイ"},{"href":"/ja/actions/how-tos/deploy/deploy-to-third-party-platforms/amazon-elastic-container-service","title":"Amazon Elastic Container Service"}],"documentType":"article"},"body":"# Amazon Elastic Container Serviceへのデプロイ\n\n継続的デプロイ (CD) ワークフローの一部として Amazon Elastic Container Service (ECS) にプロジェクトをデプロイする方法について説明します。\n\n## 前提条件\n\nGitHub Actionsワークフローを作成する前に、まず Amazon ECR と ECS の次のセットアップ手順を完了する必要があります。\n\n1. イメージを保存するAmazon ECRリポジトリの作成\n\n   たとえば、[AWS CLI](https://aws.amazon.com/cli/) を使用する:\n\n   ```bash copy\n   aws ecr create-repository \\\n       --repository-name MY_ECR_REPOSITORY \\\n       --region MY_AWS_REGION\n\n   ```\n\n   以下のワークフローの `MY_ECR_REPOSITORY` 変数には、同じ Amazon ECR リポジトリ名 (ここで `ECR_REPOSITORY` で表されます)を使用していることを確認します。\n\n   以下のワークフローで、`AWS_REGION` (ここで `MY_AWS_REGION` で表される) 変数に同じ AWS リージョン値を使用していることを確認します。\n\n2. Amazon ECS タスク定義、クラスター、サービスを作成します。\n\n   詳細については、[Amazon ECS コンソールの入門ウィザード](https://us-east-2.console.aws.amazon.com/ecs/home?region=us-east-2#/firstRun)、または Amazon ECS ドキュメントの[ファースト ステップ ガイド](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/getting-started-fargate.html)に従ってください。\n\n   Amazon ECS サービスとクラスターに設定した名前をメモし、以下のワークフローの `ECS_SERVICE` 変数と`ECS_CLUSTER` 変数に使用していることを確認します。\n\n3. Amazon ECS タスク定義を JSON ファイルとして GitHub リポジトリに格納します。\n\n   ファイルの形式は、次によって生成される出力と同じである必要があります。\n\n   ```bash copy\n\n   aws ecs register-task-definition --generate-cli-skeleton\n\n   ```\n\n   以下のワークフローで、JSON ファイルへのパスとして `ECS_TASK_DEFINITION` 変数を設定していることを確認します。\n\n   以下のワークフローの `CONTAINER_NAME` 変数を、タスク定義の `containerDefinitions` セクションのコンテナー名として設定していることを確認します。\n\n4. Amazon IAM アクセスキーの値を格納するために、GitHub Actions および `AWS_ACCESS_KEY_ID` という名前の `AWS_SECRET_ACCESS_KEY` シークレットを作成します。\n\nGitHub Actionsのシークレットの作成の詳細については、[GitHub Actions でのシークレットの使用](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository) を参照してください。\n\nIAM ユーザーに推奨される IAM ポリシーと、アクセスキー資格情報を処理する方法については、以下で使用する各操作のドキュメントを参照してください。\n\n1. 必要に応じて、デプロイ環境を構成します。 環境は、一般的なデプロイ ターゲットを記述するために使用されます (例: `production`、`staging`、または `development`)。\n   GitHub Actions ワークフローが環境にデプロイされると、その環境がリポジトリのメイン ページに表示されます。 環境を使って、ジョブを進めるために承認を必要とすること、ワークフローをトリガーできるブランチを制限すること、カスタム デプロイ保護規則でデプロイを制限すること、またはシークレットへのアクセスを制限することができます。 環境の作成の詳細については、「[デプロイメント用の環境管理](/ja/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)」を参照してください。\n\n## ワークフローの作成\n\n必要な環境を整えたら、ワークフローの作成に進むことができます。\n\n以下のワークフロー例は、コンテナー イメージをビルドして Amazon ECR にプッシュする方法を示しています。 その後、新しいイメージ ID でタスク定義を更新し、Amazon ECS にタスク定義をデプロイします。\n\nワークフローの `env` キー内のすべての変数に独自の値を指定していることを確認してください。\n\nデプロイ環境を構成した場合は、`environment` の値を環境の名前に変更します。 環境を構成しなかった場合、またはワークフローがプライベート リポジトリにあり、GitHub Enterprise Cloud を使わない場合は、`environment` キーを削除します。\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\n\n# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。\n# 新しいバージョンを取得するには、SHA を更新する必要があります。\n# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。\n\nname: Deploy to Amazon ECS\n\non:\n  push:\n    branches:\n      - main\n\nenv:\n  AWS_REGION: MY_AWS_REGION                   # set this to your preferred AWS region, e.g. us-west-1\n  ECR_REPOSITORY: MY_ECR_REPOSITORY           # set this to your Amazon ECR repository name\n  ECS_SERVICE: MY_ECS_SERVICE                 # set this to your Amazon ECS service name\n  ECS_CLUSTER: MY_ECS_CLUSTER                 # set this to your Amazon ECS cluster name\n  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition\n                                               # file, e.g. .aws/task-definition.json\n  CONTAINER_NAME: MY_CONTAINER_NAME           # set this to the name of the container in the\n                                               # containerDefinitions section of your task definition\n\njobs:\n  deploy:\n    name: Deploy\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n\n      - name: Configure AWS credentials\n        uses: aws-actions/configure-aws-credentials@0e613a0980cbf65ed5b322eb7a1e075d28913a83\n        with:\n          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}\n          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n          aws-region: ${{ env.AWS_REGION }}\n\n      - name: Login to Amazon ECR\n        id: login-ecr\n        uses: aws-actions/amazon-ecr-login@62f4f872db3836360b72999f4b87f1ff13310f3a\n\n      - name: Build, tag, and push image to Amazon ECR\n        id: build-image\n        env:\n          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}\n          IMAGE_TAG: ${{ github.sha }}\n        run: |\n          # Build a docker container and\n          # push it to ECR so that it can\n          # be deployed to ECS.\n          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .\n          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG\n          echo \"image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG\" >> $GITHUB_OUTPUT\n\n      - name: Fill in the new image ID in the Amazon ECS task definition\n        id: task-def\n        uses: aws-actions/amazon-ecs-render-task-definition@c804dfbdd57f713b6c079302a4c01db7017a36fc\n        with:\n          task-definition: ${{ env.ECS_TASK_DEFINITION }}\n          container-name: ${{ env.CONTAINER_NAME }}\n          image: ${{ steps.build-image.outputs.image }}\n\n      - name: Deploy Amazon ECS task definition\n        uses: aws-actions/amazon-ecs-deploy-task-definition@df9643053eda01f169e64a0e60233aacca83799a\n        with:\n          task-definition: ${{ steps.task-def.outputs.task-definition }}\n          service: ${{ env.ECS_SERVICE }}\n          cluster: ${{ env.ECS_CLUSTER }}\n          wait-for-service-stability: true\n```\n\n## 参考資料\n\n元のワークフロー テンプレートについては、`aws.yml`[](https://github.com/actions/starter-workflows/blob/main/deployments/aws.yml) リポジトリのGitHub Actionsを参照してください。\n\nこの例で使われているサービスに関する詳しい情報については、以下のドキュメンテーションを参照してください。\n\n* [IAM でのセキュリティのベスト プラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) (Amazon AWS ドキュメント)。\n* [AWS の資格情報を構成する](https://github.com/aws-actions/configure-aws-credentials) (公式 AWS アクション)。\n* 公式 AWS [Amazon ECR \"ログイン\"](https://github.com/aws-actions/amazon-ecr-login) アクション。\n* 公式 AWS [Amazon ECS \"タスク定義のレンダリング\"](https://github.com/aws-actions/amazon-ecs-render-task-definition) アクション。\n* 公式 AWS アクション [Amazon ECS「タスク定義のデプロイ」](https://github.com/aws-actions/amazon-ecs-deploy-task-definition)。"}