AWS ECR/ECS へのデプロイ
ここでは、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 スクリプトを提供しています。 これらのスクリプトを使用するには、以下の手順を行います。
- AWS アカウントを作成します。
- Terraform をインストールします。
- >サンプルプロジェクトのクローンを作成し、そのルートディレクトリに移動します。
- AWS 変数の実際の値で
~/terraform_setup/terraform.tfvars
を更新します。 詳細については、以下の CircleCI 環境変数を設定するセクションを参照してください。 - 以下のコマンドを実行して、AWS リソースを作成します。
cd terraform_setup
terraform init
terraform plan # プランをレビューします
terraform apply # プランを適用して AWS リソースを作成します
terraform destroy
を実行することで破棄できます。 リソースが残っている場合は、 AWS マネジメントコンソールで特に ECS、CloudFormation、VPC のページを確認してください。 apply
が失敗した場合は、ユーザーが EC2、Elastic Load Balancing、IAM のサービスの権限を持っているかどうかを確認してください。2. CircleCI 環境変数を設定する
CircleCI アプリケーションで、以下の プロジェクト環境変数を設定します。
変数 | 説明 |
---|---|
AWS_ACCESS_KEY_ID | AWS のセキュリティ認証情報です。 |
AWS_SECRET_ACCESS_KEY | AWS のセキュリティ認証情報です。 |
AWS_REGION | AWS CLI によって使用されます。 |
AWS_ACCOUNT_ID | デプロイに必要です。 AWS アカウント ID はこちらで確認してください。 |
AWS_RESOURCE_NAME_PREFIX | 必須の AWS リソースのプレフィックスです。 terraform_setup/terraform.tfvars の aws_resource_prefix の値に対応する必要があります。 |
AWS_ECR_REGISTRY_ID | ECR アカウントに関連づけられた 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 のデモ ページにアクセスしてください。