

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

# チュートリアル: Amazon ECS へアプリケーションをデプロイする
<a name="tutorial-ecs-deployment"></a>

 このチュートリアルでは、CodeDeploy を使用して アプリケーションを Amazon ECS にデプロイする方法について学びます。すでに作成し、Amazon ECS にデプロイ済みのアプリケーションによって開始します。最初のステップは、タスク定義ファイルを新しいタグで変更してアプリケーションを更新することです。次に、CodeDeploy を使用して、更新をデプロイします。デプロイ中に、CodeDeploy は新しい置き換えタスクセットに更新をインストールします。そして、本稼働トラフィックは、元のタスクセットにある Amazon ECS アプリケーションの元のバージョンから、置き換えタスクセットの更新されたバージョンに移行します。

 Amazon ECS デプロイ中、CodeDeploy は 2 つのターゲットグループと 1 つの本稼働トラフィックリスナーで構成されたロードバランサーを使用します。次の図表は、デプロイが始まるの前に、ロードバランサー、本稼働、リスナー、ターゲットグループ、および Amazon ECS アプリケーションがどのように関連しているかを示しています。このチュートリアルでは、Application Load Balancer を使用します。Network Load Balancer を使用することもできます。

![\[Application Load Balancer またはNetwork Load Balancer、1 つの本稼働リスナー、2 つのターゲットグループ、1 つのタスクセット、および 1 つの Amazon ECS サービス。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-1.png)


 デプロイが成功すると、本稼働トラフィックリスナーは新しい置き換えタスクセットにトラフィックを提供し、元のタスクセットは終了します。次の図は、デプロイが成功した後にリソースがどのように関連しているかを示しています。詳細については、「[Amazon ECS デプロイ中の処理で起こっていること](deployment-steps-ecs.md#deployment-steps-what-happens)」を参照してください。

![\[Application Load Balancer または Network Load Balancer、1 つの本稼働リスナー、2 つのターゲットグループ、および 1 つの置換タスクセット。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-with-no-test-listener-step-5.png)


を使用してアプリケーションを Amazon ECS に AWS CLI デプロイする方法については、[「チュートリアル: Blue/Green デプロイを使用したサービス](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html)の作成」を参照してください。CodePipeline を使用して、CodeDeploy を用いての Amazon ECS サービスへの deploy の変更を検出し、自動的にデプロイする方法については、[チュートリアル: Create a pipeline with an Amazon ECR source and ECS-to-CodeDeploy deployment](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials-ecs-ecr-codedeploy.html) を参照してください。

このチュートリアルを完了したら、作成した CodeDeploy アプリケーションとデプロイグループを使用して、[チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-deployment-with-hooks.md) 中にデプロイ検証テストを追加できます。

**Topics**
+ [前提条件](tutorial-ecs-prereqs.md)
+ [ステップ 1: Amazon ECS アプリケーションを更新する](tutorial-ecs-update-the-ecs-application.md)
+ [ステップ 2: AppSpec ファイルを作成します。](tutorial-ecs-create-appspec-file.md)
+ [ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする](tutorial-ecs-deployment-deploy.md)
+ [ステップ 4: クリーンアップする](tutorial-ecs-clean-up.md)

# 前提条件
<a name="tutorial-ecs-prereqs"></a>

このチュートリアルを完了するには、まず以下を行う必要があります。
+  「[CodeDeploy の開始方法](getting-started-codedeploy.md)」のステップ 2 と 3 を完了します。
+  2 つのターゲットグループと 1 つのリスナーを用いて設定した Application Load Balancer を作成します。コンソールを使用してロードバランサーを作成する方法については、「[CodeDeploy Amazon ECS デプロイ用のロードバランサー、ターゲットグループ、リスナーをセットアップする](deployment-groups-create-load-balancer-for-ecs.md)」を参照してください。を使用してロードバランサーを作成する方法については AWS CLI、*「Amazon Elastic Container Service ユーザーガイド*」の[「ステップ 1: Application Load Balancer を作成する](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html#create-blue-green-loadbalancer)」を参照してください。ロードバランサーを作成するときは、このチュートリアルで以下の点に注意してください。
  +  ロードバランサーの名前。
  +  ターゲットグループの名前。
  +  ロードバランサーのリスナーが使用するポート。
+  Amazon ECS クラスターとサービスを作成します。さらなる詳細については、ステップ 2、3、および *Amazon Elastic Container サービスユーザーガイド* の [チュートリアル: Creating a service using a blue/green deployment](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-blue-green.html) の ステップ 4 を参照してください。このチュートリアルでは、以下の点に注意してください。
  +  Amazon ECS クラスターの名前。
  +  Amazon ECS サービスによって使用されるタスク定義の ARN 
  +  Amazon ECS サービスによって使用されるコンテナの名前 
+  AppSpec ファイル用の Amazon S3 バケットを作成します。

# ステップ 1: Amazon ECS アプリケーションを更新する
<a name="tutorial-ecs-update-the-ecs-application"></a>

 このセクションでは、タスク定義の新しいリビジョンで Amazon ECS アプリケーションを更新します。更新されたリビジョンは、新しいキーとタグのペアを追加します。[ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする](tutorial-ecs-deployment-deploy.md) では、Amazon ECS アプリケーションの更新バージョンをデプロイします。

**タスク定義を更新するには**

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

1.  ナビゲーションペインで、**[タスク定義]** を選択します。

1. Amazon ECS サービスによって使用されるタスク定義を選択します。

1. タスク定義リビジョンを選択し、**[新しいリビジョンを作成]**、**[新しいリビジョンを作成]** を選択します。

1.  このチュートリアルでは、タグを追加してタスク定義を少し更新します。ページの下部にある [**タグ**] で、新しいキーと値のペアを入力して新しいタグを作成します。

1.  **[作成]** を選択します。

   タスク定義のリビジョン番号が 1 つずつ増加します。

1.  **JSON** タブを選択します。この情報は次のステップで必要なため、以下の点に注意してください。
   +  `taskDefinitionArn` の値。形式は `arn:aws:ecs:aws-region:account-id:task-definition/task-definition-family:task-definition-revision` です。これは、更新されたタスク定義の ARN です。
   +  `containerDefinitions` 要素の、`name` の値。これはコンテナの名前です。
   +  `portMappings` 要素の、`containerPort` の値。これはコンテナのポートです。

# ステップ 2: AppSpec ファイルを作成します。
<a name="tutorial-ecs-create-appspec-file"></a>

 このセクションでは、AppSpec ファイルを作成し、[前提条件](tutorial-ecs-prereqs.md) のセクションで作成した Amazon S3 バケットにアップロードします。Amazon ECS デプロイのための AppSpec ファイル は、タスク定義、コンテナ名、およびコンテナポートを指定します。詳細については、「[Amazon ECS デプロイの AppSpec ファイルの例](reference-appspec-file-example.md#appspec-file-example-ecs)」および「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」を参照してください。

**AppSpec ファイルを作成するには**

1.  [YAML] を使用して AppSpec ファイルを作成したい場合は、`appspec.yml` という名前のファイルを作成します。JSON を使用して AppSpec ファイルを作成したい場合は、`appspec.json` という名前のファイルを作成します。

1.  AppSpec ファイルのために YAML または JSON を使用するかどうかに応じて、適切なタブを選択し、そのコンテンツを、先ほど作成した AppSpec ファイルにコピーします。`TaskDefinition` プロパティには、「[ステップ 1: Amazon ECS アプリケーションを更新する](tutorial-ecs-update-the-ecs-application.md)」セクションで書き留めたタスク定義 ARN を使用します。

------
#### [ JSON AppSpec ]

   ```
   {
     "version": 0.0,
     "Resources": [
       {
         "TargetService": {
           "Type": "AWS::ECS::Service",
           "Properties": {
             "TaskDefinition": "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number",
             "LoadBalancerInfo": {
               "ContainerName": "your-container-name",
               "ContainerPort": your-container-port
             }
           }
         }
       }
     ]
   }
   ```

------
#### [ YAML AppSpec ]

   ```
   version: 0.0
   Resources:
     - TargetService:
         Type: AWS::ECS::Service
         Properties:
           TaskDefinition: "arn:aws:ecs:aws-region-id:aws-account-id:task-definition/ecs-demo-task-definition:revision-number"
           LoadBalancerInfo:
             ContainerName: "your-container-name"
             ContainerPort: your-container-port
   ```

------
**注記**  
 置き換えタスクセットは、元のタスクセットからサブネット、セキュリティグループ、プラットフォームバージョン、割り当てられたパブリック IP 値を継承します。AppSpec ファイル中でオプションのプロパティを設定することで、置き換えタスクセットのこれらの値を上書きできます。詳細については、「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」および「[Amazon ECS デプロイの AppSpec ファイルの例](reference-appspec-file-example.md#appspec-file-example-ecs)」を参照してください。

1.  このチュートリアルの前提条件として、作成済みの S3 バケットに AppSpec ファイルをアップロードします。

# ステップ 3: CodeDeploy コンソールを使用してアプリケーションをデプロイする
<a name="tutorial-ecs-deployment-deploy"></a>

 このセクションでは、CodeDeploy アプリケーションとデプロイグループを作成して、更新されたアプリケーションを Amazon ECS にデプロイします。デプロイ中、CodeDeploy はアプリケーションの本稼働トラフィックを、新しい置き換えタスクセットの新しいバージョンに移行します。このステップを完了するには、以下の項目が必要です。
+  Amazon ECS クラスターの名前。
+  Amazon ECS サービスの名前。
+  Application Load Balancer の名前 
+  本稼働リスナーポート。
+  ターゲットグループ名。
+  作成した S3 バケットの名前。

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

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

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

1. [**アプリケーション名**] に、「**ecs-demo-codedeploy-app**」と入力します。

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

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

**CodeDeploy デプロイ グループを作成するには**

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

1. **[Deployment group name]** (デプロイグループ名) に「**ecs-demo-dg**」と入力します。

1. **サービスロール** で、CodeDeploy に Amazon ECS へのアクセスを許可するサービスロールを選択します。詳細については、「[の ID とアクセスの管理 AWS CodeDeploy](security-iam.md)」を参照してください。

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

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

1. **Production listener port (本稼働リスナーポート)** から、Amazon ECSサービスへの本稼働トラフィックを提供するリスナーのポートとプロトコルを選択します（例: **HTTP: 80**）。このチュートリアルにはオプションのテストリスナーが含まれていないため、[**Test listener port (リスナーポートをテスト)**]からポートを選択しないでください。

1. [**Target group 1 name (ターゲットグループ 1 の名前)**] および [**Target group 2 name (ターゲットグループ 2 の名前)**] から、デプロイ時にトラフィックをルーティングする 2 つの異なるターゲットグループを選択します。これらが、ロードバランサー用に作成したターゲットグループであることを確認します。どちらがターゲットグループ 1 に使用され、どちらがターゲットグループ 2 に使用されるかは関係ありません。

1. [**Reroute traffic immediately (すぐにトラフィックを再ルーティングする)**]を選択します。

1. [**Original revision termination (元のリビジョンの終了)**] で、0 日、0 時間、5 分を選択します。これにより、デフォルトの（1 時間）を使用するよりも迅速にデプロイが完了したことがわかります。  
![\[CodeDeploy コンソールの環境設定セクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-demo-create-acd-dg.png)

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

**Amazon ECS アプリケーションをデプロイするには**

1. デプロイグループのコンソールページで、[**デプロイの作成**] を選択します。

1.  [**デプロイグループ**] で、[**ecs-demo-dg**] を選択します。

1.  [**Revision type (リビジョンのタイプ)**] の横の [**My application is stored in Amazon S3 (Amazon S3 に保存されているアプリケーション)**] を選択します。[**リビジョンの場所**] に、S3 バケットの名前を入力します。

1.  [**リビジョンファイルタイプ**] で、必要に応じて[**.json**] または [**.yaml**] を選択します。

1.  (オプション)[**デプロイの説明**] に、デプロイの説明を入力します。

1. **[デプロイの作成]** を選択します。

1.  [**Deployment status　(デプロイのステータス)**] で、デプロイをモニタリングできます。本稼働トラフィックの 100% が置き換えタスクセットにルーティングされた後、5 分の待機時間が期限切れになる前に、[**Terminate original task set (元のタスクセットの終了)**] を選択して元のタスクセットをすぐに終了できます。[**Terminate original task set (元のタスクセットの終了)**] を選択しない場合、指定した 5 分の待機時間が経過すると元のタスクセットが終了します。  
![\[CodeDeploy コンソールのデプロイステータスセクション。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/ecs-tutorial-deployment-status-without-test-listener.png)

# ステップ 4: クリーンアップする
<a name="tutorial-ecs-clean-up"></a>

 次のチュートリアル、[チュートリアル: 検証テストを使用して Amazon ECS サービスをデプロイする](tutorial-ecs-deployment-with-hooks.md) で、このチュートリアルを基盤として構築し、作成した CodeDeploy アプリケーションとデプロイグループを使用します。そのチュートリアルのステップを実行する場合は、このステップをスキップし、作成したリソースを削除しないでください。

**注記**  
 AWS アカウントでは、作成した CodeDeploy リソースに対して料金は発生しません。

これらのステップのリソース名は、このチュートリアルで提案されている名前です（例えば、CodeDeploy アプリケーションの名前のための **ecs-demo-codedeploy-app** など）。別の名前を使用した場合は、クリーンアップ時にそれらを使用してください。

1. [delete-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-deployment-group.html) コマンドを使用して、CodeDeploy デプロイグループを削除します。

   ```
   aws deploy delete-deployment-group --application-name ecs-demo-codedeploy-app --deployment-group-name ecs-demo-dg --region aws-region-id
   ```

1. [delete-application](https://docs.aws.amazon.com/cli/latest/reference/deploy/delete-application.html) コマンドを使用して、 CodeDeploy アプリケーションを削除します。

   ```
   aws deploy delete-application --application-name ecs-demo-codedeploy-app --region aws-region-id
   ```