

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# チュートリアル: Amazon ECR ソース、ECS - CodeDeploy 間のデプロイでパイプラインを作成する
<a name="tutorials-ecs-ecr-codedeploy"></a>

このチュートリアルでは、Docker イメージをサポートする Blue/Green デプロイを使用して AWS CodePipeline コンテナアプリケーションをデプロイするパイプラインを で設定します。Blue/Green デプロイでは、古いバージョンと一緒に新しいバージョンのアプリケーションを起動し、トラフィックを再ルーティングする前に新しいバージョンをテストできます。また、デプロイプロセスをモニタリングし、問題がある場合は迅速にロールバックすることもできます。

**重要**  
パイプライン作成の一環として、CodePipeline は、ユーザーが指定した S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットが によって所有 AWS アカウント されており、安全で信頼できることを確認してください。

**注記**  
このチュートリアルでは、CodePipeline の Amazon ECS から CodeDeploy Blue/Green デプロイアクションについて説明します。CodePipeline で Amazon ECS スタンダードデプロイアクションを使用するチュートリアルについては、[チュートリアル: CodePipeline を使用した Amazon ECS 標準デプロイ](ecs-cd-pipeline.md) を参照してください。

完了したパイプラインは、Amazon ECR などのイメージリポジトリに保存されているイメージへの変更を検出し、CodeDeploy を使用してトラフィックを AmazonECS クラスターとロードバランサーにルーティングおよびデプロイします。CodeDeploy は、リスナーを使用して、AppSpec ファイルで指定し更新されたコンテナのポートにトラフィックを再ルーティングします。ロードバランサー、製造リスナー、ターゲットグループ、Amazon ECS アプリケーションが青/緑のデプロイでどのように使用されるかについては、[チュートリアル：Amazon ECS サービスのデプロイ](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment.html) を参照してください。

また、Amazon ECS タスク定義が保存されている CodeCommit リポジトリなどのソース場所を使用するようにパイプラインを設定することもできます。このチュートリアルでは、これらの各 AWS リソースを設定し、各リソースのアクションを含むステージでパイプラインを作成します。

ソースコードが変更されたり、新しいベースイメージが Amazon ECR にアップロードしたときは、継続的デリバリーパイプラインが自動的にコンテナイメージを構築してデプロイします。

このフローでは、次のアーティファクトを使用します。
+ Amazon ECR イメージリポジトリのコンテナ名とリポジトリ URI を指定する Docker イメージファイル。
+ Docker イメージ名、コンテナ名、Amazon ECS サービス名、およびロードバランサーの設定を一覧表示する Amazon ECS タスク定義。
+ Amazon ECS タスク定義ファイルの名前、更新されたアプリケーションのコンテナの名前、および CodeDeploy が製造トラフィックを再ルーティングするコンテナポートを指定する CodeDeployAppSpec ファイル。デプロイライフサイクルイベントフック中に実行できるオプションのネットワーク設定と Lambda 関数も指定できます。

**注記**  
Amazon ECR イメージリポジトリへの変更をコミットすると、パイプラインソースアクションはそのコミット用に `imageDetail.json` ファイルを作成します。`imageDetail.json` ファイルの詳細については、「[Amazon ECS Blue/Green デプロイアクション用の imageDetail.json ファイル](file-reference.md#file-reference-ecs-bluegreen)」を参照してください。

パイプラインを作成または編集し、デプロイステージのソースアーティファクトを更新または指定するときは、使用する最新の名前とバージョンのソースアーティファクトを必ず指してください。パイプラインを設定した後、イメージまたはタスク定義を変更したら、リポジトリ内のソースアーティファクトファイルを更新してから、パイプラインのデプロイステージを編集する必要があります。

**Topics**
+ [前提条件](#tutorials-ecs-ecr-codedeploy-prereq)
+ [ステップ 1: イメージを作成して Amazon ECR リポジトリにプッシュする](#tutorials-ecs-ecr-codedeploy-imagerepository)
+ [ステップ 2: タスク定義ソースファイルと AppSpec ソースファイルを作成して、CodeCommit リポジトリにプッシュする](#tutorials-ecs-ecr-codedeploy-taskdefinition)
+ [ステップ 3: Application Load Balancer とターゲットグループを作成する](#tutorials-ecs-ecr-codedeploy-loadbal)
+ [ステップ 4: Amazon ECS クラスターとサービスを作成する](#tutorials-ecs-ecr-codedeploy-cluster)
+ [ステップ 5: CodeDeploy アプリケーションとデプロイグループ (ECS コンピューティングプラットフォーム) を作成する](#tutorials-ecs-ecr-codedeploy-deployment)
+ [ステップ 6: パイプラインを作成する](#tutorials-ecs-ecr-codedeploy-pipeline)
+ [ステップ 7: パイプラインに変更を加えてデプロイを確認する](#tutorials-ecs-ecr-codedeploy-update)

## 前提条件
<a name="tutorials-ecs-ecr-codedeploy-prereq"></a>

以下のリソースがすでに作成されている必要があります。
+ CodeCommit リポジトリ。で作成した AWS CodeCommit リポジトリを使用できます[チュートリアル: シンプルなパイプラインを作成する (CodeCommit リポジトリ)](tutorials-simple-codecommit.md)。
+ このチュートリアルに示すように、Amazon EC2 Linux インスタンスを起動し、Docker をインストールしてイメージを作成します。使用するイメージがすでにある場合、この前提条件は省略できます。

## ステップ 1: イメージを作成して Amazon ECR リポジトリにプッシュする
<a name="tutorials-ecs-ecr-codedeploy-imagerepository"></a>

このセクションでは、Docker を使用してイメージを作成し、 を使用して Amazon ECR リポジトリ AWS CLI を作成し、そのイメージをリポジトリにプッシュします。

**注記**  
使用するイメージがすでにある場合、このスキップは省略できます。

**イメージを作成するには**

1. Docker がインストールされている Linux インスタンスにサインインします。

   `nginx` のイメージをプルダウンから選択します。このコマンドは `nginx:latest` イメージを返します。

   ```
   docker pull nginx
   ```

1. **docker images** を実行します。リストにイメージが表示されます.。

   ```
   docker images
   ```

**Amazon ECR リポジトリを作成してイメージをプッシュするには**

1.  イメージを保存する Amazon ECR リポジトリを作成します。出力の `repositoryUri` を書き留めます。

   ```
   aws ecr create-repository --repository-name nginx
   ```

   出力:

   ```
   {
       "repository": {
           "registryId": "aws_account_id",
           "repositoryName": "nginx",
           "repositoryArn": "arn:aws:ecr:us-east-1:aws_account_id:repository/nginx",
           "createdAt": 1505337806.0,
           "repositoryUri": "aws_account_id.dkr.ecr.us-east-1.amazonaws.com/nginx"
       }
   }
   ```

1. 前のステップの `repositoryUri` でイメージをタグ付けします。

   ```
   docker tag nginx:latest aws_account_id.dkr.ecr.us-east-1.amazonaws.com/nginx:latest
   ```

1. この例に示すように、`us-west-2` リージョンと 111122223333 アカウント ID を指定して **aws ecr get-login-password** コマンドを実行します。

   ```
   aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 111122223333.dkr.ecr.us-west-2.amazonaws.com/nginx
   ```

1. 前のステップの `repositoryUri` を使用して、Amazon ECR にイメージをプッシュします。

   ```
   docker push 111122223333.dkr.ecr.us-east-1.amazonaws.com/nginx:latest
   ```

## ステップ 2: タスク定義ソースファイルと AppSpec ソースファイルを作成して、CodeCommit リポジトリにプッシュする
<a name="tutorials-ecs-ecr-codedeploy-taskdefinition"></a>

このセクションでは、Amazon ECS でタスク定義 JSON ファイルを作成します。次に、CodeDeploy 用の AppSpec ファイルを作成し、Git クライアントを使用してファイルを CodeCommit リポジトリにプッシュします。

**イメージのタスク定義を作成するには**

1. 次の内容で、`taskdef.json` という名前のファイルを作成します。`image` に、イメージの名前 (例: nginx) を入力します。この値は、パイプラインの実行時に更新されます。
**注記**  
タスク定義に指定されている実行ロールに `AmazonECSTaskExecutionRolePolicy` が含まれていることを確認します。詳細については、*Amazon ECS デベロッパーガイド* の [Amazon ECS タスク実行 IAM ロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_execution_IAM_role.html) を参照してください。

   ```
   {
       "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
       "containerDefinitions": [
           {
               "name": "sample-website",
               "image": "nginx",
               "essential": true,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ]
           }
       ],
       "requiresCompatibilities": [
           "FARGATE"
       ],
       "networkMode": "awsvpc",
       "cpu": "256",
       "memory": "512",
       "family": "ecs-demo"
   }
   ```

1. タスク定義を `taskdef.json` ファイルに登録します。

   ```
   aws ecs register-task-definition --cli-input-json file://taskdef.json
   ```

1. タスク定義が登録されたら、イメージ名を削除して、イメージフィールド名に `<IMAGE1_NAME>` プレースホルダーが含まれるようにファイルを編集します。

   ```
   {
       "executionRoleArn": "arn:aws:iam::account_ID:role/ecsTaskExecutionRole",
       "containerDefinitions": [
           {
               "name": "sample-website",
               "image": "<IMAGE1_NAME>",
               "essential": true,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ]
           }
       ],
       "requiresCompatibilities": [
           "FARGATE"
       ],
       "networkMode": "awsvpc",
       "cpu": "256",
       "memory": "512",
       "family": "ecs-demo"
   }
   ```

**AppSpec ファイルを作成するには**
+ AppSpec ファイルは、CodeDeploy のデプロイに使用されます。オプションのフィールドが含まれるファイルでは、この形式を使用します。

  ```
  version: 0.0
  Resources:
    - TargetService:
        Type: AWS::ECS::Service
        Properties:
          TaskDefinition: "task-definition-ARN"
          LoadBalancerInfo:
            ContainerName: "container-name"
            ContainerPort: container-port-number
  # Optional properties
          PlatformVersion: "LATEST"
          NetworkConfiguration:
              AwsvpcConfiguration:
                Subnets: ["subnet-name-1", "subnet-name-2"]
                SecurityGroups: ["security-group"]
                AssignPublicIp: "ENABLED"
  Hooks:
  - BeforeInstall: "BeforeInstallHookFunctionName"
  - AfterInstall: "AfterInstallHookFunctionName"
  - AfterAllowTestTraffic: "AfterAllowTestTrafficHookFunctionName"
  - BeforeAllowTraffic: "BeforeAllowTrafficHookFunctionName"
  - AfterAllowTraffic: "AfterAllowTrafficHookFunctionName"
  ```

  例を含む AppSpec ファイルの詳細については、[CodeDeploy AppSpec ファイルのリファレンス](https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file.html) を参照してください。

  次の内容で、`appspec.yaml` という名前のファイルを作成します。`TaskDefinition` の `<TASK_DEFINITION>` プレースホルダーテキストは変更しないでください。この値は、パイプラインの実行時に更新されます。

  ```
  version: 0.0
  Resources:
    - TargetService:
        Type: AWS::ECS::Service
        Properties:
          TaskDefinition: <TASK_DEFINITION>
          LoadBalancerInfo:
            ContainerName: "sample-website"
            ContainerPort: 80
  ```

**ファイルを CodeCommit リポジトリにプッシュするには**

1. ファイルを CodeCommit リポジトリにプッシュまたはアップロードします。このファイルは、CodePipeline でのデプロイアクションのために **パイプラインの作成** のウィザードによって作成されたソースアーティファクトです。ファイルは、ローカルディレクトリに次のように表示されます。

   ```
   /tmp
     |my-demo-repo
       |-- appspec.yaml
       |-- taskdef.json
   ```

1. ファイルをアップロードする方法を選択します。

   1. ローカルコンピュータのクローンされたリポジトリから git コマンドを使用するには

      1. ディレクトリをローカルリポジトリに変更する:

         ```
         (For Linux, macOS, or Unix) cd /tmp/my-demo-repo
         (For Windows) cd c:\temp\my-demo-repo
         ```

      1. 以下のコマンドを実行して、すべてのファイルを一度にステージングします。

         ```
         git add -A
         ```

      1. 以下のコマンドを実行して、コミットメッセージによりファイルをコミットします。

         ```
         git commit -m "Added task definition files"
         ```

      1. 以下のコマンドを実行して、ローカルリポジトリから CodeCommit リポジトリにファイルをプッシュします。

         ```
         git push
         ```

   1. CodeCommit コンソールを使用してファイルをアップロードするには:

      1. CodeCommit コンソールを開き、**リポジトリ** リストから自分のリポジトリを選択します。

      1. [**Add file**]、[**Upload file**] の順に選択します。

      1. [**Choose file**] を選択し、ファイルを参照します。ユーザー名とメールアドレスを入力して、変更をコミットします。**[Commit changes]** (変更のコミット) を選択します。

      1. アップロードするファイルごとにこのステップを繰り返します。

## ステップ 3: Application Load Balancer とターゲットグループを作成する
<a name="tutorials-ecs-ecr-codedeploy-loadbal"></a>

このセクションでは、Amazon EC2 Application Load Balancer を作成します。後で Amazon ECS サービスを作成するときに、ロードバランサーで作成したサブネット名とターゲットグループ値を使用します。Application Load Balancer または Network Load Balancer を作成できます。ロードバランサーでは、2 つのパブリックサブネットを別々のアベイラビリティーゾーンに持つ VPC を使用する必要があります。以下のステップでは、デフォルト VPC を確認して、ロードバランサーを作成してから、ロードバランサーの 2 つのターゲットグループを作成します。詳細については、「[Network Load Balancer のターゲットグループ](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html)」を参照してください。

**デフォルト VPC とパブリックサブネットを確認するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

1. 使用するデフォルト VPC を確認します。ナビゲーションペインで、**[Your VPCs（お使いの VPC）]** を選択します。**デフォルトのVPC** 列に **はい** と表示されている VPC に注意してください。これがデフォルト VPC です。選択するデフォルトのサブネットが含まれています。

1. [**サブネット**] を選択します。**デフォルトのサブネット** 列に **はい** と表示されている 2 つのサブネットを選択します。
**注記**  
サブネット ID を書き留めます。これらは、このチュートリアルで後ほど必要になります。

1. サブネットを選択後、[**説明**] タブを選択します。使用するサブネットが、異なるアベイラビリティーゾーンにあることを確認します。

1. サブネットを選択後、[**Route Table**] タブを選択します。使用する各サブネットがパブリックサブネットであることを確認するには、ルートテーブルにゲートウェイ行が含まれていることを確認します。

**Amazon EC2 Application Load Balancer を作成するには**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) で Amazon EC2 コンソールを開きます。

1. ナビゲーションペインで、**[ロードバランサー]** を選択します。

1. [**Create Load Balancer**] を選択します。

1. [**Application Load Balancer**] を選択し、[**Create**] を選択します。

1. [**Name**] に、ロードバランサーの名前を入力します。

1. [**Scheme**] で、[**インターネット向け**] を選択します。

1. [**IP address type**] で、[**ipv4**] を選択します。

1. ロードバランサー用に 2 つのリスナーポートを設定するには:

   1. [**Load Balancer Protocol (ロードバランサーのプロトコル)**] で、[**HTTP**] を選択します。[**Load Balancer Port (ロードバランサーポート)**] に [**80**] を入力します。

   1. **[リスナーの追加]** を選択します。

   1. 2 番目のリスナーの [**Load Balancer Protocol**] で、[**HTTP**] を選択します。[**Load Balancer Port (ロードバランサーポート)**] に [**8080**] を入力します。

1. [**アベイラビリティーゾーン**] の [**VPC**] で、デフォルトの VPC を選択します。次に、使用する 2 つのデフォルトサブネットを選択します。

1. [**Next: Configure Security Settings**] を選択します。

1. [**Next: Configure Security Groups**] を選択します。

1. [**Select an existing security group**] を選択し、セキュリティグループ ID を書き留めます。

1. [**Next: Configure Routing**] を選択します。

1. [**Target group**] で、[**New target group**] を選択し、最初のターゲットグループを設定します。

   1. [**Name**] に、ターゲットグループの名前 (例: **target-group-1**) を入力します。

   1. [**Target type**] で、[**IP**] を選択します。

   1. [**Protocol**] で、[**HTTP**] を選択します。[**Port**] に「**80**」と入力します。

   1. [**Next: Register Targets**] を選択します。

1. [**Next: Review**]、[**Create**] の順に選択します。

**ロードバランサーの 2 番目のターゲットグループを作成するには**

1. ロードバランサーがプロビジョニングされたら、Amazon EC2 コンソールを開きます。ナビゲーションペインで、[**ターゲットグループ**] を選択します。

1. [**ターゲットグループの作成**] を選択します。

1. [**Name**] に、ターゲットグループの名前 (例: **target-group-2**) を入力します。

1. [**Target type**] で、[**IP**] を選択します。

1. [**Protocol**] で、[**HTTP**] を選択します。[**Port**] に「**8080**」と入力します。

1. [**VPC**] で、デフォルトの VPC を選択します。

1. [**作成**] を選択します。
**注記**  
デプロイを実行するには、ロードバランサー用に 2 つのターゲットグループを作成する必要があります。最初のターゲットグループの ARN を書き留める必要があります。この ARN は、次のステップの `create-service` JSON ファイルで使用されます。

**2 番目のターゲットグループを含めるようにロードバランサーを更新するには**

1. Amazon EC2 コンソールを開きます。ナビゲーションペインで、**[ロードバランサー]** を選択します。

1. ロードバランサーを選択後、[**Listeners**] を選択します。ポート 8080 のリスナーを選択後、[**編集**] を選択します。

1. [**Forward to**] の横の鉛筆アイコンを選択します。2 番目のターゲットグループを選択してから、チェックマークを選択します。[**更新**] を選択して、更新を保存します。

## ステップ 4: Amazon ECS クラスターとサービスを作成する
<a name="tutorials-ecs-ecr-codedeploy-cluster"></a>

このセクションでは、CodeDeploy がデプロイ中に（EC2インスタンスではなくAmazon ECS クラスターに）トラフィックをルーティングするAmazon ECS クラスターとサービスを作成します。Amazon ECS サービスを作成するには、ロードバランサーで作成したサブネット名、セキュリティグループ、ターゲットグループの値を使用してサービスを作成する必要があります。

**注記**  
これらのステップを使用して Amazon ECS クラスターを作成する場合、Fargate コンテナをプロビジョニング AWS する **Networking Only** クラスターテンプレートを使用します。 AWS Fargate は、コンテナインスタンスインフラストラクチャを管理するテクノロジーです。Amazon ECS クラスター用の Amazon EC2 インスタンスを手動で選択または作成する必要はありません。

**Amazon ECS クラスターを作成するには**

1. Amazon ECS クラシックコンソール ([https://console.aws.amazon.com/ecs/](https://console.aws.amazon.com/ecs/)) を開きます。

1. ナビゲーションペインで **[Clusters]** (クラスター) を選択してください。

1. **[クラスターを作成]** を選択します。

1.  AWS Fargate を使用する **ネットワークのみ** クラスターテンプレートを選択後、**次のステップ** を選択します。

1. [**Configure cluster (クラスターの設定)**] ページで、クラスター名を入力します。リソースに任意のタグを追加することができます。[**作成**] を選択します。

**Amazon ECS サービスを作成する**

 AWS CLI を使用して、Amazon ECS でサービスを作成します。

1. JSON ファイルを作成し、`create-service.json` と名付けます。次の内容を JSON ファイルに貼り付けます。

   `taskDefinition`フィールドでは、Amazon ECS にタスク定義を登録するときに、ファミリーを指定します。これは、リビジョン番号で指定された、複数バージョンのタスク定義の名前に似ています。この例では、ファイル内のファミリーとリビジョン番号に「`ecs-demo:1`」を使用します。[ステップ 3: Application Load Balancer とターゲットグループを作成する](#tutorials-ecs-ecr-codedeploy-loadbal) でロードバランサーを使用して作成したサブネット名、セキュリティグループ、ターゲットグループの値を使用します。
**注記**  
ターゲットグループ ARN をこのファイルに含める必要があります。Amazon EC2 コンソールを開き、ナビゲーションペインの **ロードバランシング** で **ターゲットグループ** を選択します。最初のターゲットグループを選択します。[**説明**] タブから ARN をコピーします。

   ```
   {
       "taskDefinition": "family:revision-number",
       "cluster": "my-cluster",
       "loadBalancers": [
           {
               "targetGroupArn": "target-group-arn",
               "containerName": "sample-website",
               "containerPort": 80
           }
       ],
       "desiredCount": 1,
       "launchType": "FARGATE",
       "schedulingStrategy": "REPLICA",
       "deploymentController": {
           "type": "CODE_DEPLOY"
       },
       "networkConfiguration": {
           "awsvpcConfiguration": {
               "subnets": [
                   "subnet-1",
                   "subnet-2"
               ],
               "securityGroups": [
                   "security-group"
               ],
               "assignPublicIp": "ENABLED"
           }
       }
   }
   ```

1. JSON ファイルを指定して、**create-service** コマンドを実行します。
**重要**  
ファイル名の前に必ず `file://` を含めてください。このコマンドでは必須です。

   この例では、`my-service` という名前のサービスが作成されます。
**注記**  
このコマンド例では、my-service という名前のサービスを作成します。この名前のサービスがすでにある場合、このコマンドはエラーを返します。

   ```
   aws ecs create-service --service-name my-service --cli-input-json file://create-service.json
   ```

   出力はサービスの説明フィールドが返ります。

1. **describe-services** コマンドを実行して、サービスが作成されたことを確認します。

   ```
   aws ecs describe-services --cluster cluster-name --services service-name
   ```

## ステップ 5: CodeDeploy アプリケーションとデプロイグループ (ECS コンピューティングプラットフォーム) を作成する
<a name="tutorials-ecs-ecr-codedeploy-deployment"></a>

Amazon ECS コンピューティングプラットフォーム用の CodeDeploy アプリケーションとデプロイグループを作成すると、アプリケーションはデプロイ中に使用され、正しいデプロイグループ、ターゲットグループ、リスナー、およびトラフィックの再ルーティング動作を参照します。

**CodeDeploy でアプリケーションを作成する。**

1. CodeDeploy コンソールを開き、**アプリケーションの作成** を選択します。

1. [**アプリケーション名**] に、使用する名前を入力します。

1. [**コンピューティングプラットフォーム**] で [**Amazon ECS**] を選択します。

1. [**アプリケーションを作成**] を選択します。

**次に、CodeDeploy デプロイ グループを作成します。**

1. アプリケーションページの [**デプロイグループ**] タブで [**デプロイグループの作成**] を選択します。

1. [**デプロイグループ名**] に、デプロイグループを表す名前を入力します。

1. **サービスロール** で、CodeDeployに Amazon ECS へのアクセスを許可するサービスロールを選択します。新しいサービスロールを作成するには、次の手順を実行します。

   1. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソール を開きます。

   1. コンソールダッシュボードで [**ロール**] を選択します。

   1. [**ロールの作成**] を選択してください。

   1. [**信頼されたエンティティのタイプを選択**] で、[**AWS のサービス** ] を選択します。**ユースケースの選択** で、**CodeDeploy** を選択します。[**ユースケースの選択**] で、[**CodeDeploy - ECS**] を選択します。**[Next: Permissions]** (次のステップ: 許可) を選択します。`AWSCodeDeployRoleForECS` マネージドポリシーはロールにアタッチ済みです。

   1. [**次の手順: タグ**]、[**次の手順: 確認**] の順に選択します。

   1. ロールの名前 (例: **CodeDeployECSRole**) を入力し、[**ロールの作成**] を選択します。

1. **環境設定** で、Amazon ECS クラスターの名前とサービス名を選択します。

1. **ロードバランサー** から、Amazon ECS サービスにトラフィックを提供するロードバランサーの名前を選択します。

1. [**Production listener port**] から、Amazon ECS サービスへの本稼働トラフィックを提供するリスナーのポートとプロトコルを選択します。[**Test listener port**] で、テストリスナーのポートとプロトコルを選択します。

1. [**Target group 1 name**] および [**Target group 2 name**] から、デプロイ時にトラフィックをルーティングするターゲットグループを選択します。これらが、ロードバランサー用に作成したターゲットグループであることを確認します。

1. **すぐにトラフィックを再ルーティング** を選択して、デプロイが成功してから更新された Amazon ECS タスクにトラフィックを再ルーティングするまでの時間を決定します。

1. **デプロイグループの作成** を選択します。

## ステップ 6: パイプラインを作成する
<a name="tutorials-ecs-ecr-codedeploy-pipeline"></a>

このセクションでは、以下のアクションを使用してパイプラインを作成します。
+ ソースアーティファクトがタスク定義と AppSpec ファイルである CodeCommit アクション。
+ ソースアーティファクトがイメージファイルである Amazon ECR ソースアクションを持つソースステージ。
+ デプロイが CodeDeploy アプリケーションとデプロイグループで実行される、Amazon ECS デプロイアクションを使用したデプロイステージ。

**ウィザードで 2 ステージパイプラインを作成するには**

1. にサインイン AWS マネジメントコンソール し、[http://console.aws.amazon.com/codesuite/codepipeline/home](https://console.aws.amazon.com/codesuite/codepipeline/home) で CodePipeline コンソールを開きます。

1. [**ようこそ**] ページ、[**開始方法**] ページ、または [**パイプライン**] ページで、[**パイプラインの作成**] を選択します。

1. **[ステップ 1: 作成オプションを選択する]** ページの **[作成オプション]** で、**[カスタムパイプラインを構築する]** オプションを選択します。**[次へ]** を選択します。

1. **[ステップ 2: パイプラインの設定を選択する]** で、**[パイプライン名]** に「**MyImagePipeline**」と入力します。

1. CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「[パイプラインタイプ](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipeline-types-planning.html?icmpid=docs_acp_help_panel)」を参照してください。CodePipeline の料金については、[料金](https://aws.amazon.com/codepipeline/pricing/)を参照してください。

1. **サービスロール** で、**新しいサービスロール** を選択して、CodePipeline が IAM でサービスロールを作成できるようにします。

1. [**詳細設定**] をデフォルト設定のままにし、[**次へ**] を選択します。

1. **[ステップ 3: ソースステージの追加]** の **[ソースプロバイダー]** で、**[AWS CodeCommit]** を選択します。**リポジトリ名** で、[ステップ 1: CodeCommit リポジトリを作成する](tutorials-simple-codecommit.md#codecommit-create-repository) で作成した CodeCommit リポジトリの名前を選択します。[**Branch name**] で、最新のコード更新を含むブランチの名前を選択します。

   [**次へ**] を選択します。

1. **[ステップ 4: ビルドステージの追加]** で、**[ビルドステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。[**次へ**] を選択します。

1. **[ステップ 5: テストステージの追加]** で、**[テストステージをスキップ]** を選択し、もう一度 **[スキップ]** を選択して警告メッセージを受け入れます。

   [**次へ**] を選択します。

1. **ステップ 6: デプロイステージの追加**:

   1. [**Deploy provider**] で、[**Amazon ECS (Blue/Green)**] を選択します。[**アプリケーション名**] で、`codedeployapp` などの、アプリケーションの名前を入力またはリストから選択します。[**デプロイグループ**] に、`codedeploydeplgroup` などの、デプロイグループの名前を入力またはリストから選択します。

       
**注記**  
「デプロイ」は、[**ステップ 4: デプロイ**] ステップで作成されるステージにデフォルトで付けられる名前であり、「ソース」は、パイプラインの最初のステージに付けられる名前です。

   1. [**Amazon ECS タスク定義**] で、[**SourceArtifact**] を選択します。フィールドに [**taskdef.json**] と入力します。

   1. **AWS CodeDeploy AppSpec ファイル** で、**SourceArtifact** を選択します。フィールドに [**appspec.yaml**] と入力します。
**注記**  
この時点では、[**Dynamically update task definition image**] に情報は入力しないでください。

   1. [**次へ**] を選択します。

1. **ステップ 7: **情報を確認してから、**パイプラインの作成**を選択します。

**Amazon ECR ソースアクションをパイプラインに追加するには**

パイプラインを表示し、Amazon ECR ソースアクションをパイプラインに追加します。

1. パイプラインを選択します。左上の **[Edit]** (編集) を選択します。

1. ソースステージで、[**ステージを編集**] を選択します。

1. CodeCommitソースアクションの横にある **\$1アクションの追加** を選択して、並列アクションを追加します。

1. [**アクション名**] に、名前を入力します (例えば、**Image**)。

1. [**アクションプロバイダ**] で [**Amazon ECR**] を選択します。  
![\[\]](http://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/images/ECR-source-action.png)

1. **リポジトリ名** で、Amazon ECR リポジトリの名前を選択します。

1. [**Image tag**] で、イメージの名前とバージョンを指定します (最新でない場合)。

1. **出力アーティファクト**で、次のステージで使用するイメージ名およびリポジトリ URI 情報が含まれている出力アーティファクトのデフォルト(例: `MyImage`)を選択します。

1. アクション画面で、[**Save**] を選択します。ステージ画面で、[**Done**] を選択します。パイプラインで、[**Save**] を選択します。メッセージは、Amazon ECR ソースアクション用に作成されるAmazon CloudWatch Events ルールを示しています。

**ソースアーティファクトをデプロイアクションに関連付けるには**

1. デプロイステージで **編集** を選択後、アイコンを選択して、**Amazon ECS (Blue/Green)** アクションを編集します。

1. ペインの下部までスクロールします。[**入力アーティファクト**] で [**Add**] を選択します。新しい Amazon ECR リポジトリ (例: `MyImage` など) からソースアーティファクトを追加します。

1. [**タスク定義**] で [**SourceArtifact**] を選択し、「**taskdef.json**」と入力されていることを確認します。

1. **AWS CodeDeploy AppSpec ファイル** で、**SourceArtifact** を選択し、**appspec.yaml**と入力されていることを確認します。

1. [**Dynamically update task definition image**] の [**Input Artifact with Image URI**] で、[**MyImage**] を選択し、`taskdef.json` ファイルで使用されているプレースホルダー「** IMAGE1\$1NAME**」を入力します。**[保存]** を選択します。

1.  AWS CodePipeline ペインで、**パイプラインの変更の保存**を選択し、**変更の保存**を選択します。更新されたパイプラインを表示します。

   このサンプルパイプラインが作成されると、コンソールエントリのアクション設定が以下のようにパイプライン構造に表示されます。

   ```
   "configuration": {
     "AppSpecTemplateArtifact": "SourceArtifact",
     "AppSpecTemplatePath": "appspec.yaml",
     "TaskDefinitionTemplateArtifact": "SourceArtifact",
     "TaskDefinitionTemplatePath": "taskdef.json",
     "ApplicationName": "codedeployapp",
     "DeploymentGroupName": "codedeploydeplgroup",
     "Image1ArtifactName": "MyImage",
     "Image1ContainerName": "IMAGE1_NAME"
   },
   ```

1. 変更を送信してパイプラインのビルドを開始するには、**[変更をリリース]**、**[リリース]** の順に選択します。

1. デプロイアクションを選択して CodeDeploy で表示し、トラフィックシフトの進捗状況を確認します。
**注記**  
オプションの待機時間を示すデプロイステップが表示される場合があります。デフォルトで、CodeDeploy はデプロイが成功してから 1 時間後に元のタスク設定を終了します。この時間を使用してタスクをロールバックまたは終了することはできますが、それ以外の場合、タスクセットが終了した時点でデプロイは完了します。

## ステップ 7: パイプラインに変更を加えてデプロイを確認する
<a name="tutorials-ecs-ecr-codedeploy-update"></a>

イメージを変更して、その変更を Amazon ECR リポジトリにプッシュします。これにより、パイプラインの実行がトリガーされます。イメージソースの変更がデプロイされていることを確認します。