AWS ECR/ECS へのデプロイ

1+ year ago1 min read
Last updated • Read time
クラウド
This document is applicable to CircleCI クラウド
Server v4.x
This document is applicable to CircleCI Server v4.x
Server v3.x
This document is applicable to CircleCI Server v3.x

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

概要

このガイドは、次の 2 つのステップに分かれています。

  • Docker イメージをビルドして AWS ECR にプッシュする
  • 新しい Docker イメージを既存の AWS ECS サービスにデプロイするこのプロジェクトには、簡単な Dockerfile が含まれています。 詳細については、 カスタムイメージの手動作成を参照してください。

前提条件

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

このガイドに沿ってアプリケーションをビルドしてデプロイするには、いくつかの 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 リソースを作成します

2. CircleCI 環境変数を設定する

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

変数説明
AWS_ACCESS_KEY_IDAWS のセキュリティ認証情報です。
AWS_SECRET_ACCESS_KEYAWS のセキュリティ認証情報です。
AWS_REGIONAWS CLI によって使用されます。
AWS_ACCOUNT_IDデプロイに必要です。 AWS アカウント ID はこちらで確認してください
AWS_RESOURCE_NAME_PREFIX必須の AWS リソースのプレフィックスです。 terraform_setup/terraform.tfvarsaws_resource_prefix の値に対応する必要があります。
AWS_ECR_REGISTRY_IDECR アカウントに関連づけられた 12 桁の AWS ID です。

設定ファイルの詳細

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

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

Orb ではタグを使用してバージョン指定します (例: aws-ecr: circleci/aws-ecr@x.y.z)。 サンプルをコピー & ペーストする場合は、x.y.z を特定のバージョンの値に変更する必要があります。 使用可能なバージョンについては、 CircleCI Orb レジストリの各 Orb のページを参照してください。

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

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

version: 2.1

orbs:
  aws-ecr: circleci/aws-ecr@x.y.z
  aws-ecs: circleci/aws-ecs@0x.y.z

workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build-and-push-image:
          repo: "${AWS_RESOURCE_NAME_PREFIX}"
          tag: "${CIRCLE_SHA1}"

2. 新しい 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 を参照してください。

: deploy-service-update ジョブは、requires キーがあるため、build-and-push-image に依存します。

version: 2.1

orbs:
  aws-ecr: circleci/aws-ecr@x.y.z
  aws-ecs: circleci/aws-ecs@0x.y.z

workflows:
  build-and-deploy:
    jobs:
      - aws-ecr/build-and-push-image:
          repo: "${AWS_RESOURCE_NAME_PREFIX}"
          tag: "${CIRCLE_SHA1}"
      - aws-ecs/deploy-service-update:
          requires:
            - aws-ecr/build-and-push-image # only run this job once aws-ecr/build-and-push-image has completed
          family: "${AWS_RESOURCE_NAME_PREFIX}-service"
          cluster: "${AWS_RESOURCE_NAME_PREFIX}-cluster"
          container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX}-service,tag=${CIRCLE_SHA1}"

ここでは、ワークフローを使用してジョブの実行順や同時実行を定義しています。 詳細については、 ワークフローを使用したジョブのオーケストレーションを参照してください。

関連項目

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