|
| 1 | +--- |
| 2 | +layout: classic-docs |
| 3 | +title: AWS ECR/ECS へのデプロイ |
| 4 | +description: CircleCI を使用した AWS ECR から ECS へのデプロイ方法 |
| 5 | +--- |
| 6 | + |
| 7 | +ここでは、CircleCI を使用して、Amazon Elastic Container Registry (ECR) から Amazon Elastic Container Service (ECS) へデプロイする方法を説明します。 |
| 8 | + |
| 9 | +- 目次 |
| 10 | +{:toc} |
| 11 | + |
| 12 | +## 概要 |
| 13 | + |
| 14 | +このガイドは、次の 2段階に分かれています。 |
| 15 | + |
| 16 | +- Docker イメージをビルドして AWS ECR にプッシュする |
| 17 | +- 新しい Docker イメージを既存の AWS ECS サービスにデプロイする |
| 18 | + |
| 19 | +また、アプリケーションの [CircleCI でのビルド](https://circleci.com/gh/CircleCI-Public/circleci-demo-aws-ecs-ecr){:rel="nofollow"}についても触れています。 |
| 20 | + |
| 21 | +**メモ:**このプロジェクトには、簡単な [Dockerfile](https://github.com/CircleCI-Public/circleci-demo-aws-ecs-ecr/blob/master/Dockerfile) が含まれています。 |
| 22 | + |
| 23 | +詳細については、「[カスタムイメージの手動作成]({{ site.baseurl }}/ja/2.0/custom-images/#カスタムイメージの手動作成)」を参照してください。 |
| 24 | + |
| 25 | +## 前提条件 |
| 26 | + |
| 27 | +### Terraform を使用して AWS リソースを作成する |
| 28 | + |
| 29 | +このガイドに沿ってアプリケーションをビルドしてデプロイするには、いくつかの AWS リソースが必要です。 CircleCI では、これらのリソースを作成するために[いくつかの Terraform スクリプト](https://github.com/CircleCI-Public/circleci-demo-aws-ecs-ecr/tree/master/terraform_setup)を提供しています。 これらのスクリプトを使用するには、以下の手順を行います。 |
| 30 | + |
| 31 | +1. [AWS アカウントを作成します](https://aws.amazon.com/jp/premiumsupport/knowledge-center/create-and-activate-aws-account/)。 |
| 32 | +2. [Terraform をインストールします](https://www.terraform.io/)。 |
| 33 | +3. [サンプルプロジェクト](https://github.com/CircleCI-Public/circleci-demo-aws-ecs-ecr)のクローンを作成し、そのルートディレクトリに移動します。 |
| 34 | +4. AWS 変数の実際の値で `~/terraform_setup/terraform.tfvars` を更新します。 詳細については、以下の「[CircleCI 環境変数を設定する](#circleci-環境変数を設定する)」セクションを参照してください。 |
| 35 | +5. 以下のコマンドを実行して、AWS リソースを作成します。 |
| 36 | + |
| 37 | +```bash |
| 38 | +cd terraform_setup |
| 39 | +terraform init |
| 40 | +terraform plan # プランをレビュー |
| 41 | +terraform apply # プランを適用して AWS リソースを作成 |
| 42 | +``` |
| 43 | + |
| 44 | +**メモ:**ほとんどの AWS リソースは、`terraform destroy` を実行することで破棄できます。 リソースが残っている場合は、[AWS マネジメントコンソール](https://console.aws.amazon.com/)、特に **ECS**、**CloudFormation**、**VPC** のページを確認してください。 |
| 45 | + |
| 46 | +### CircleCI 環境変数を設定する |
| 47 | + |
| 48 | +CircleCI アプリケーションで、以下の[プロジェクト環境変数]({{ site.baseurl }}/ja/2.0/env-vars/#プロジェクト内で環境変数を設定する)を設定します。 |
| 49 | + |
| 50 | +変数 | 説明 |
| 51 | +-------------------------|------------ |
| 52 | +AWS_ACCESS_KEY_ID | AWS のセキュリティ認証情報です。 |
| 53 | +AWS_SECRET_ACCESS_KEY | AWS のセキュリティ認証情報です。 |
| 54 | +AWS_DEFAULT_REGION | AWS CLI によって使用されます。 |
| 55 | +AWS_ACCOUNT_ID | デプロイに必要です。 [AWS アカウント ID はこちらで確認してください](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)。 |
| 56 | +AWS_RESOURCE_NAME_PREFIX | 必須の AWS リソースのプレフィックスです。 `terraform_setup/terraform.tfvars` の `aws_resource_prefix` の値に対応する必要があります。 |
| 57 | +{:class="table table-striped"} |
| 58 | + |
| 59 | +## 設定の詳細説明 |
| 60 | + |
| 61 | +すべての CircleCI プロジェクトには、[`.circleci/config.yml`]({{ site.baseurl }}/ja/2.0/configuration-reference/) という設定ファイルが必要です。 以下の手順に従って、完全な `config.yml` ファイルを作成してください。 |
| 62 | + |
| 63 | +**メモ:**このセクションで説明するサンプルプロジェクトは、以下で提供されている CircleCI の AWS-ECR Orb と AWS-ECS Orb を使用します。 |
| 64 | +- [AWS-ECR](https://circleci.com/orbs/registry/orb/circleci/aws-ecr) |
| 65 | +- [AWS-ECS](https://circleci.com/orbs/registry/orb/circleci/aws-ecs) |
| 66 | + |
| 67 | +### Docker イメージをビルドして AWS ECR にプッシュする |
| 68 | + |
| 69 | +`build_and_push_image` ジョブは、デフォルトの場所 (チェックアウトディレクトリのルート) に Dockerfile から Docker イメージをビルドし、それを指定された ECR リポジトリにプッシュします。 |
| 70 | + |
| 71 | +```yaml |
| 72 | +version: 2.1 |
| 73 | +orbs: |
| 74 | + aws-ecr: circleci/[email protected] |
| 75 | + aws-ecs: circleci/[email protected] |
| 76 | +workflows: |
| 77 | + build-and-deploy: |
| 78 | + jobs: |
| 79 | + - aws-ecr/build_and_push_image: |
| 80 | + account-url: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION} |
| 81 | + .amazonaws.com" |
| 82 | + repo: "${AWS_RESOURCE_NAME_PREFIX}" |
| 83 | + region: ${AWS_DEFAULT_REGION} |
| 84 | + tag: "${CIRCLE_SHA1}" |
| 85 | + - ... |
| 86 | +``` |
| 87 | +
|
| 88 | +### 新しい Docker イメージを既存の AWS ECS サービスにデプロイする |
| 89 | +
|
| 90 | +aws-ecs Orb の `deploy-service-update` ジョブは、現在のタスク定義に基づきつつ、タスク定義のコンテナ定義で指定された新しい Docker イメージを使用して新しいタスク定義を作成し、この新しいタスク定義を指定された ECS サービスにデプロイします。 CircleCI AWS-ECS Orb の詳細については、https://circleci.com/orbs/registry/orb/circleci/aws-ecs を参照してください。 |
| 91 | + |
| 92 | +**メモ:**`deploy-service-update` ジョブは、`requires` キーがあるため、`build_and_push_image` に依存します。 |
| 93 | + |
| 94 | +```yaml |
| 95 | +version: 2.1 |
| 96 | +orbs: |
| 97 | + aws-ecr: circleci/[email protected] |
| 98 | + aws-ecs: circleci/[email protected] |
| 99 | +workflows: |
| 100 | + build-and-deploy: |
| 101 | + jobs: |
| 102 | + - ... |
| 103 | + - aws-ecs/deploy-service-update: |
| 104 | + requires: |
| 105 | + - aws-ecr/build_and_push_image |
| 106 | + aws-region: ${AWS_DEFAULT_REGION} |
| 107 | + family: "${AWS_RESOURCE_NAME_PREFIX}-service" |
| 108 | + cluster-name: "${AWS_RESOURCE_NAME_PREFIX}-cluster" |
| 109 | + container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX}-service,tag=${CIRCLE_SHA1}" |
| 110 | +``` |
| 111 | + |
| 112 | +### ワークフローを準備する |
| 113 | + |
| 114 | +ワークフローを使用して、`build_and_push_image` ジョブと `deploy-service-update` ジョブをリンクします。 |
| 115 | + |
| 116 | +```yaml |
| 117 | +version: 2.1 |
| 118 | +orbs: |
| 119 | + aws-ecr: circleci/[email protected] |
| 120 | + aws-ecs: circleci/[email protected] |
| 121 | +workflows: |
| 122 | + build-and-deploy: |
| 123 | + jobs: |
| 124 | + - aws-ecr/build_and_push_image: |
| 125 | + account-url: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION} |
| 126 | + .amazonaws.com" |
| 127 | + repo: "${AWS_RESOURCE_NAME_PREFIX}" |
| 128 | + region: ${AWS_DEFAULT_REGION} |
| 129 | + tag: "${CIRCLE_SHA1}" |
| 130 | + - aws-ecs/deploy-service-update: |
| 131 | + requires: |
| 132 | + - aws-ecr/build_and_push_image |
| 133 | + aws-region: ${AWS_DEFAULT_REGION} |
| 134 | + family: "${AWS_RESOURCE_NAME_PREFIX}-service" |
| 135 | + cluster-name: "${AWS_RESOURCE_NAME_PREFIX}-cluster" |
| 136 | + container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX}-service,tag=${CIRCLE_SHA1}" |
| 137 | +``` |
| 138 | + |
| 139 | +詳細については、[ワークフローを使用したジョブのスケジュール]({{ site.baseurl }}/ja/2.0/workflows/)を参照してください。 |
| 140 | + |
| 141 | +## 完全な設定ファイル |
| 142 | + |
| 143 | +```yaml |
| 144 | +version: 2.1 |
| 145 | +orbs: |
| 146 | + aws-ecr: circleci/[email protected] |
| 147 | + aws-ecs: circleci/[email protected] |
| 148 | +workflows: |
| 149 | + build-and-deploy: |
| 150 | + jobs: |
| 151 | + - aws-ecr/build_and_push_image: |
| 152 | + account-url: "${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_DEFAULT_REGION}.amazonaws.com" |
| 153 | + repo: "${AWS_RESOURCE_NAME_PREFIX}" |
| 154 | + region: ${AWS_DEFAULT_REGION} |
| 155 | + tag: "${CIRCLE_SHA1}" |
| 156 | + - aws-ecs/deploy-service-update: |
| 157 | + requires: |
| 158 | + - aws-ecr/build_and_push_image |
| 159 | + aws-region: ${AWS_DEFAULT_REGION} |
| 160 | + family: "${AWS_RESOURCE_NAME_PREFIX}-service" |
| 161 | + cluster-name: "${AWS_RESOURCE_NAME_PREFIX}-cluster" |
| 162 | + container-image-name-updates: "container=${AWS_RESOURCE_NAME_PREFIX}-service,tag=${CIRCLE_SHA1}" |
| 163 | +``` |
| 164 | + |
| 165 | +## 関連項目 |
| 166 | + |
| 167 | +- Docker イメージをビルドおよびテストして ECR にプッシュした後で、`aws-ecs` Orb を使用して更新をデプロイする例をレビューするには、[AWS-ECS-ECR Orbs](https://github.com/CircleCI-Public/circleci-demo-aws-ecs-ecr/tree/orbs) のデモページにアクセスしてください。 |
| 168 | +- CircleCI Orbs を使用しない例をレビューするには、[Non-Orbs AWS ECR-ECS](https://github.com/CircleCI-Public/circleci-demo-aws-ecs-ecr/tree/without_orbs) のデモページにアクセスしてください。 |
0 commit comments