ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

Amazon Elastic Container Serviceへのデプロイ

継続的デプロイメント(CD)ワークフローの一部として、Amazon Elastic Container Service (ECS) へのデプロイを行えます。

GitHub ActionsはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。

ここには以下の内容があります:

Note: GitHub Actions was available for GitHub Enterprise Server 2.22 as a limited beta. The beta has ended. GitHub Actions is now generally available in GitHub Enterprise Server 3.0 or later. For more information, see the GitHub Enterprise Server 3.0 release notes.


Note: GitHub-hosted runners are not currently supported on GitHub Enterprise Server. You can see more information about planned future support on the GitHub public roadmap.

はじめに

このガイドは、GitHub Actionsを使ってコンテナ化されたアプリケーションをビルドし、それをAmazon Elastic Container Registry (ECR)にプッシュし、Amazon Elastic Container Service (ECS)にデプロイする方法を説明します。

GitHubリポジトリへの新しいリリースごとに、GitHub Actionsワークフローは新しいコンテナイメージをビルドし、Amazon ECRにプッシュし、そして新しいタスクの定義をAmazon ECSにデプロイします。

必要な環境

GitHub Actionsワークフローを作成する前に、まず以下のAmazon ECR及びECSのセットアップのステップを完了しておかなければなりません。

  1. イメージを保存するAmazon ECRリポジトリの作成

    たとえばAWS CLIを使って以下を行います。

    Shell
    aws ecr create-repository \ --repository-name MY_ECR_REPOSITORY \ --region MY_AWS_REGION

    以下のワークフロー中では、ECR_REPOSITORY変数に同じAmazon ECRリポジトリ名(ここではMY_ECR_REPOSITORY)を使っていることを確認してください。

    以下のワークフローで AWS_REGION 変数(ここでは MY_AWS_REGION`)に同じ AWSリージョンの値を使用していることを確認してください。

  2. Amazon ECSのタスク定義、クラスター、サービスの作成

    詳細については、Getting started wizard on the Amazon ECS consoleもしくはAmazon ECSドキュメンテーションのFargate を使用した Amazon ECS の開始方法を参照してください。

    Amazon ECSサービスとクラスターに設定した名前を記録しておき、以下のワークフロー中でECS_SERVICE及びECS_CLUSTERの変数に使ってください。

  3. Amazon ECSのタスク定義をJSONファイルとしてGitHubリポジトリに保存してください。

    ファイルのフォーマットは、以下で生成される出力と同じでなければなりません。

    Shell
    aws ecs register-task-definition --generate-cli-skeleton

以下のワークフローでは、ECS_TASK_DEFINITION変数をJSONファイルのパスに設定してください。

以下のワークフロー中のCONTAINER_NAME変数を、タスク定義中のcontainerDefinitionsセクションのコンテナ名に設定してください。

  1. Amazon IAMアクセスキーの値を保存するためのAWS_ACCESS_KEY_ID及びAWS_SECRET_ACCESS_KEYという名前のGitHub Actionsシークレットの作成

    GitHub Actionsのシークレットの作成に関する詳しい情報については、「[暗号化されたシークレット](/actions/reference/encrypted-secrets#creating-encrypted-secrets-for-a-repository)」を参照してください。

    IAMユーザに推奨されるIAMポリシー及びアクセスキーの認証情報を処理するメソッドについては、以下で使われている各アクションのドキュメンテーションを参照してください。

ワークフローの作成

必要な環境を整えたら、ワークフローの作成に進むことができます。

以下の例のワークフローは、コンテナイメージを作成してAmazon ECRにプッシュする方法を示します。 そして、タスク定義を新しいイメージIDで更新し、タスク定義をAmazon ECSにデプロイします。

ワークフローのenvキー内のすべての変数について、自分の値を渡すようにしてください。

YAML
name: Deploy to Amazon ECS

on:
  release:
    types: [ created ]

env:
  AWS_REGION: MY_AWS_REGION                   # 使用するAWSリージョン 例 us-west-1 に設定してください
  ECR_REPOSITORY: MY_ECR_REPOSITORY           # 使用するAmazon ECRリポジトリ名に設定してください
  ECS_SERVICE: MY_ECS_SERVICE                 # 使用するAmazon ECSサービス名に設定してください
  ECS_CLUSTER: MY_ECS_CLUSTER                 # set this to your Amazon ECS cluster name
  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # set this to the path to your Amazon ECS task definition
                                               # file, e.g. .aws/task-definition.json
  CONTAINER_NAME: MY_CONTAINER_NAME           # タスク定義のcontainerDefinitions中の
                                               # コンテナ名に設定してください

defaults:
  run:
    shell: bash

jobs:
  deploy:
    name: Deploy
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: $AWS_REGION

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1

      - name: Build, tag, and push image to Amazon ECR
        id: build-image
        env:
          ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
          IMAGE_TAG: ${{ github.sha }}
        run: |
          # dockerコンテナをビルドし
          # ECRへプッシュして、
          # ECSにデプロイできるようにする。
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
          echo "image=$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" >> $GITHUB_ENV

      - name: Fill in the new image ID in the Amazon ECS task definition
        id: task-def
        uses: aws-actions/amazon-ecs-render-task-definition@v1
        with:
          task-definition: $ECS_TASK_DEFINITION
          container-name: $CONTAINER_NAME
          image: ${{ steps.build-image.outputs.image }}

      - name: Deploy Amazon ECS task definition
        uses: aws-actions/amazon-ecs-deploy-task-definition@v1
        with:
          task-definition: ${{ steps.task-def.outputs.task-definition }}
          service: $ECS_SERVICE
          cluster: $ECS_CLUSTER
          wait-for-service-stability: true

追加リソース

この例で使われているサービスに関する詳しい情報については、以下のドキュメンテーションを参照してください。

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.