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

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 Enterprise Server、GitHub One、GitHub AEで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。

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

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 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                 # これを Amazon ECS クラスタ名に設定します
  ECS_TASK_DEFINITION: MY_ECS_TASK_DEFINITION # これを Amazon ECS タスク定義へのパスに設定します
                                               # ファイル(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: ${{ env.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 コンテナを作成し
          # CR にプッシュして
          # ECS にデプロイできるようにします。
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG .
          docker push $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG
          echo "::set-output name=image::$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG"

      - 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: ${{ env.ECS_TASK_DEFINITION }}
          container-name: ${{ env.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: ${{ env.ECS_SERVICE }}
          cluster: ${{ env.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.