AWS ECR/ECS へのデプロイ

ここでは、CircleCI を使用して、Amazon Elastic Container Registry (ECR) から Amazon Elastic Container Service (ECS) にデプロイする方法を説明します。

概要

このガイドは、次の 2 段階に分かれています。

また、アプリケーションの CircleCI でのビルドについても取り上げます。

  • Docker イメージをビルドして AWS ECR にプッシュする
  • 新しい Docker イメージを既存の AWS ECS サービスにデプロイする

メモ: このプロジェクトには、簡単な Dockerfile が含まれています。

詳細については、「カスタム イメージの手動作成」を参照してください。

See Creating a Custom Image Manually for more information.

前提条件

Terraform を使用して AWS リソースを作成する

CircleCI アプリケーションで、以下のプロジェクト環境変数を設定します。

このガイドに沿ってアプリケーションをビルドしてデプロイするには、いくつかの AWS リソースが必要です。 CircleCI では、これらのリソースを作成するためにいくつかの Terraform スクリプトを提供しています。 これらのスクリプトを使用するには、以下の手順を行います。

  1. AWS アカウントを作成します
  2. Terraform をインストールします
  3. サンプル プロジェクトのクローンを作成し、そのルート ディレクトリに移動します。
  4. AWS 変数の実際の値で ~/terraform_setup/terraform.tfvars を更新します。 詳細については、以下の「CircleCI 環境変数を設定する」セクションを参照してください。
  5. 以下のコマンドを実行して、AWS リソースを作成します。
cd terraform_setup
terraform init
terraform plan  # プランをレビューします
terraform apply  # プランを適用して AWS リソースを作成します

メモ: ほとんどの AWS リソースは、terraform destroy を実行することで破棄できます。 リソースが残っている場合は、AWS マネジメント コンソール、特に ECSCloudFormationVPC のページを確認してください。 apply が失敗した場合は、ユーザーが EC2、Elastic Load Balancing、IAM のサービスの権限を持っているかどうかを確認してください。

CircleCI 環境変数を設定する

メモ: このセクションで説明するサンプル プロジェクトは、以下で提供されている CircleCI の AWS-ECR Orb と AWS-ECS Orb を使用します。

変数 説明
AWS_ACCESS_KEY_ID AWS のセキュリティ認証情報です。
AWS_SECRET_ACCESS_KEY AWS のセキュリティ認証情報です。
AWS_DEFAULT_REGION AWS CLI によって使用されます。
AWS_ACCOUNT_ID デプロイに必要です。 AWS アカウント ID はこちらで確認してください
AWS_RESOURCE_NAME_PREFIX 必須の AWS リソースのプレフィックスです。 terraform_setup/terraform.tfvarsaws_resource_prefix の値に対応する必要があります。
AWS_ECR_ACCOUNT_URL Amazon ECR account URL that maps to an AWS account, e.g. {awsAccountNum}.dkr.ecr.us-west-2.amazonaws.com

設定の詳細説明

メモ: deploy-service-update ジョブは、requires キーがあるため、build_and_push_image に依存します。

すべての CircleCI プロジェクトには、.circleci/config.yml という設定ファイルが必要です。 以下の手順に従って、完全な config.yml ファイルを作成してください。

詳細については、ワークフローを使用したジョブのスケジュールについて参照してください。

Notice the orbs are versioned with tags, for example, aws-ecr: circleci/aws-ecr@x.y.z. If you copy paste any examples you will need to edit x.y.z to specify a version. You can find the available versions listed on the individual orb pages in the CircleCI Orbs Registry.

Docker イメージをビルドして AWS ECR にプッシュする

build_and_push_image ジョブは、デフォルトの場所 (チェック アウト ディレクトリのルート) に Dockerfile から Docker イメージをビルドし、それを指定された ECR リポジトリにプッシュします。

The build-and-push-image job builds a Docker image from a Dockerfile in the default location (i.e. root of the checkout directory) and pushes it to the specified ECR repository.

version: 2.1
orbs:
  aws-ecr: circleci/aws-ecr@0.0.2
  aws-ecs: circleci/aws-ecs@0.0.10
workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build_and_push_image:
          account-url: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}
          .amazonaws.com"
          repo: "${AWS_RESOURCE_NAME_PREFIX}"
          region: ${AWS_DEFAULT_REGION}
          tag: "${CIRCLE_SHA1}"
      - ...

新しい Docker イメージを既存の AWS ECS サービスにデプロイする

aws-ecs Orb の deploy-service-update ジョブは、現在のタスク定義に基づきつつ、タスク定義のコンテナ定義で指定された新しい Docker イメージを使用して新しいタスク定義を作成し、この新しいタスク定義を指定された ECS サービスにデプロイします。 CircleCI AWS-ECS Orb の詳細については、https://circleci.com/developer/ja/orbs/orb/circleci/aws-ecs を参照してください。

ワークフローを使用して、build_and_push_image ジョブと deploy-service-update ジョブをリンクします。

version: 2.1
orbs:
  aws-ecr: circleci/aws-ecr@0.0.2
  aws-ecs: circleci/aws-ecs@0.0.8
workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build_and_push_image:
          account-url: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}
          .amazonaws.com"
          repo: "${AWS_RESOURCE_NAME_PREFIX}"
          region: ${AWS_DEFAULT_REGION}
          tag: "${CIRCLE_SHA1}"
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build_and_push_image
          aws-region: ${AWS_DEFAULT_REGION}
          family: "${AWS_RESOURCE_NAME_PREFIX}-service"
          cluster-name: "${AWS_RESOURCE_NAME_PREFIX}-cluster"
          container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX}-service,tag=${CIRCLE_SHA1}"

Note the use of Workflows to define job run order/concurrency. See the Using Workflows to Schedule Jobs for more information.

完全な設定ファイル

  • Docker イメージをビルドおよびテストして ECR にプッシュした後で、aws-ecs Orb を使用して更新をデプロイする例を参照するには、AWS-ECS-ECR Orbs のデモ ページにアクセスしてください。
  • CircleCI Orbs を使用しない例を参照するには、Non-Orbs AWS ECR-ECS のデモ ページにアクセスしてください。


Help make this document better

This guide, as well as the rest of our docs, are open-source and available on GitHub. We welcome your contributions.