

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

# Amazon ECS コンピューティングプラットフォームのデプロイ
<a name="deployment-steps-ecs"></a>

このトピックでは、Amazon ECS コンピューティングプラットフォームを使用する CodeDeploy のデプロイのコンポーネントおよびワークフローについて説明します。

**Topics**
+ [Amazon ECS デプロイを開始する前に](#deployment-steps-prerequisites-ecs)
+ [Amazon ECS コンピューティングプラットフォームのデプロイワークフロー (高レベル)](#deployment-process-workflow-ecs)
+ [Amazon ECS デプロイ中の処理で起こっていること](#deployment-steps-what-happens)
+ [アプリケーションリビジョンのアップロード](#deployment-steps-uploading-your-app-ecs)
+ [アプリケーションとデプロイグループの作成](#deployment-steps-registering-app-deployment-groups-ecs)
+ [アプリケーションリビジョンのデプロイ](#deployment-steps-deploy-ecs)
+ [アプリケーションの更新](#deployment-steps-updating-your-app-ecs)
+ [停止、失敗したデプロイ](#deployment-stop-fail-ecs)
+ [デプロイと再デプロイのロールバック](#deployment-rollback-ecs)
+ [による Amazon ECS ブルー/グリーンデプロイ AWS CloudFormation](#deployment-steps-ecs-cf)

## Amazon ECS デプロイを開始する前に
<a name="deployment-steps-prerequisites-ecs"></a>

 Amazon ECS アプリケーションのデプロイを開始する前に、次の準備が完了している必要があります。デプロイグループを作成するときに指定される要件と、AppSpec ファイルで指定される要件があります。


****  

| 要件 | 指定される場所 | 
| --- | --- | 
| Amazon ECS クラスター | デプロイグループ | 
| Amazon ECS サービス | デプロイグループ | 
| Application Load Balancer および Network Load Balancer | デプロイグループ | 
| 本稼働リスナー | デプロイグループ | 
| テストリスナー (オプション) | デプロイグループ | 
| 2 つのターゲットグループ | デプロイグループ | 
| Amazon ECS タスク定義 | AppSpec ファイル | 
| コンテナ名 | AppSpec ファイル | 
| コンテナポート | AppSpec ファイル | 

**Amazon ECS クラスター**  
Amazon ECS*クラスター*は、タスクまたはサービスの論理グループです。CodeDeploy アプリケーションのデプロイグループを作成するときに、Amazon ECS サービスを含む Amazon ECS クラスターを指定します。詳細については、「[Amazon Elastic Container Service ユーザーガイド](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_clusters.html)」の「*Amazon ECS のクラスター*」を参照してください。

**Amazon ECS サービス**  
Amazon ECS *サービス*は、Amazon ECS クラスター内のタスク定義で指定されたインスタンスを維持し、実行します。Amazon ECS サービスが CodeDeploy で有効になっている必要があります。デフォルトでは、Amazon ECS サービスは、Amazon ECS デプロイで有効になっています。デプロイグループを作成するときは、Amazon ECS クラスター内の Amazon ECS サービスをデプロイすることを選択します。詳細については、「*Amazon Elastic Container Service ユーザーガイド*」の「[Amazon ECS のクラスター](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_services.html)」を参照してください。

** Application Load Balancer および Network Load Balancer**  
 Elastic Load Balancing は、Amazon ECS デプロイで更新する Amazon ECS サービスで使用する必要があります。Application Load Balancer または Network Load Balancer を作成できます。動的ポートマッピング、パスベースのルーティング、優先ルールなどの機能を利用できるように、 Application Load Balancer をお勧めします。CodeDeploy アプリケーションのデプロイグループを作成するときに、ロードバランサーを指定します。詳細については、「*Amazon Elastic Container Service ユーザーガイド*」の [CodeDeploy Amazon ECS デプロイ用のロードバランサー、ターゲットグループ、リスナーをセットアップする](deployment-groups-create-load-balancer-for-ecs.md) と「[ロードバランサーの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-load-balancer.html)」を参照してください。

**1 つまたは 2 つのリスナー**  
ロードバランサーは、*リスナー*を使用してターゲットグループにトラフィックをルーティングします。本稼働リスナーが 1 つ必要です。検証テストの実行中、置き換えタスクセットにトラフィックをルーティングする、2 番目のオプションのテストリスナーを指定できます。デプロイグループを作成するときに、一方または両方のリスナーを指定します。Amazon ECS コンソールを使用して Amazon ECS サービスを作成すると、リスナーが作成されます。詳細については、「*Elastic Load Balancing ユーザーガイド*」の「[Application Load Balancer のリスナー](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-listener.html)」そして「*Amazon Elastic Container Service ユーザーガイド*」の「[サービスの作成](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/create-service.html)」を参照してください。

** 2 つの Amazon ECS ターゲットグループ**  
 *ターゲットグループ*は、登録済みターゲットにトラフィックをルーティングするために使用されます。Amazon ECS デプロイには 2 つのターゲットグループが必要です。1 つは Amazon ECS アプリケーションの元のタスクセット用、もう 1 つはその置き換えタスクセット用です。デプロイ中、CodeDeploy は置き換えタスクセットを作成し、元のタスクセットから新しいタスクセットにトラフィックを再ルーティングします。CodeDeploy アプリケーションのデプロイグループを作成するときに、ターゲットグループを指定します。  
 デプロイ中、CodeDeploy は、ステータス `PRIMARY` (これが元のタスクセット) を持つ、Amazon ECS サービスのタスクセットに関連付けられているターゲットグループを決定し、それに一方のターゲットグループを関連付けます。さらに、もう一方のターゲットグループを置き換えタスクセットと関連付けます。別のデプロイを行う場合、現在のデプロイの元のタスクセットに関連付けられているターゲットグループは、次のデプロイの置き換えタスクセットに関連付けられています。詳細については、「*Elastic Load Balancingのユーザーガイド*」の「[Application Load Balancer のターゲットグループ](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html)」を参照してください。

** Amazon ECS タスク定義**  
 Amazon ECS アプリケーションを含んだ Docker コンテナを実行するには、*タスク定義* が必要です。CodeDeploy アプリケーションの AppSpec ファイルで、タスク定義の ARN を指定します。詳細については、「*Amazon Elastic Container Service ユーザーガイド*」と [Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs) の「[Amazon ECS のタスクロール](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html)」を参照してください。

** Amazon ECS アプリケーション用のコンテナ**  
 Docker *コンテナ*は、コードとその依存関係をパッケージ化してアプリケーションを実行できるようにするソフトウェアのユニットです。コンテナはアプリケーションを分離して、さまざまなコンピューティング環境で実行できるようにします。ロードバランサーは、Amazon ECS アプリケーションのタスクセットのコンテナにトラフィックをルーティングします。CodeDeploy アプリケーションの AppSpec ファイルで、コンテナの名前を指定します。AppSpec ファイル で指定したコンテナは、Amazon ECS タスク定義で指定したコンテナのいずれかである必要があります。詳細については、「*Amazon Elastic Container Service ユーザーガイド*」と [Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs) の「[Amazon Elastic Container Service とは](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html)」を参照してください。

**置き換えタスクセット用のポート**  
 Amazon ECS デプロイ中に、ロードバランサーが CodeDeploy アプリケーションの AppSpec ファイルで指定されたコンテナ上の *ポート* にトラフィックを指定します。CodeDeploy アプリケーションの AppSpec ファイル でポートを指定します。詳細については、「[Amazon ECS デプロイ用の AppSpec の「resources」セクション](reference-appspec-file-structure-resources.md#reference-appspec-file-structure-resources-ecs)」を参照してください。

## Amazon ECS コンピューティングプラットフォームのデプロイワークフロー (高レベル)
<a name="deployment-process-workflow-ecs"></a>

次の図表は、更新された Amazon ECS サービスのデプロイの主要なステップを示しています。

![\[CodeDeploy がアプリケーションをタスクセットとして Amazon ECS にデプロイする方法。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/deployment-process-ecs.png)


ステップには以下が含まれます。

1. デプロイする内容を一意に表す名前を指定して、 AWS CodeDeploy アプリケーションを作成します。Amazon ECS アプリケーションをデプロイするには、 AWS CodeDeploy アプリケーションで Amazon ECS コンピューティングプラットフォームを選択します。CodeDeploy は、デプロイ中にアプリケーションを使用して、デプロイグループ、ターゲットグループ、リスナー、トラフィックの再ルーティング動作、およびアプリケーションリビジョンなどの正しいデプロイコンポーネント参照します。詳細については、「[CodeDeploy でアプリケーションを作成する](applications-create.md)」を参照してください。

1. デプロイグループをセットアップするには、以下を指定します。
   +  デプロイグループ名。
   +  お客様の Amazon ECS クラスターとサービス名 Amazon ECS サービスのデプロイコントローラーは、CodeDeploy に設定する必要があります。
   +  本稼働リスナー、オプションのテストリスナー、およびターゲットグループは、デプロイ中に使用されます。
   +  本稼働トラフィックを Amazon ECS サービスの置き換え Amazon ECS タスクセットに再ルーティングするタイミングや、Amazon ECS サービスの元の Amazon ECS タスクセットを終了するタイミングなどのデプロイ設定。
   +  トリガー、アラーム、ロールバック動作などのオプション設定。

1. *アプリケーション仕様ファイル* (AppSpec ファイル) を指定します。Amazon S3 にアップロードしたり、YAML または JSON 形式でコンソールに入力したり、 AWS CLI または SDK で指定したりできます。AppSpec ファイル は、デプロイの Amazon ECS タスク定義、トラフィックをルーティングするコンテナ名とポートマッピング、およびデプロイのライフサイクルフックの後で実行される Lambda 関数を指定するために使用されます。コンテナ名は、Amazon ECS タスク定義内のコンテナである必要があります。詳細については、「[CodeDeploy のアプリケーションリビジョンの操作](application-revisions.md)」を参照してください。

1. アプリケーションリビジョンをデプロイします。 AWS CodeDeploy rerout は、Amazon ECS サービスのタスクセットの元のバージョンから新しい置き換えタスクセットにトラフィックをデプロイします。デプロイグループで指定されたターゲットグループは、元のタスクセットと置き換えタスクセットにトラフィックを提供するために使用されます。デプロイが完了すると、元のタスクセットは削除されます。トラフィックが再ルーティングされる前に、テストトラフィックを置き換えバージョンに提供するためのオプションのテストリスナーを指定できます。詳細については、「[CodeDeploy でデプロイを作成する](deployments-create.md)」を参照してください。

1. デプロイの結果を確認します。詳細については、「[CodeDeploy でのデプロイモニタリング](monitoring.md)」を参照してください。

## Amazon ECS デプロイ中の処理で起こっていること
<a name="deployment-steps-what-happens"></a>

テストリスナーを使用して Amazon ECS デプロイを開始する前に、そのコンポーネントを設定する必要があります。詳細については、「[Amazon ECS デプロイを開始する前に](#deployment-steps-prerequisites-ecs)」を参照してください。

 次の図表は、Amazon ECS デプロイを開始する準備ができたときのこれらのコンポーネント間の関係を示しています。

![\[Amazon ECS デプロイを開始する準備ができたときのロードバランサー、リスナー、ターゲットグループ、タスクセットの関係。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-1.png)


デプロイが開始されたら、デプロイライフサイクルイベントが一度に 1 つずつ実行され始めます。ライフサイクルイベントの中には、AppSpec ファイル で指定されている Lambda 関数のみを実行するフックがあります。次の表のデプロイのライフサイクルイベントは、実行された順序で一覧表示されています。詳細については、「[Amazon ECS のデプロイ向けの AppSpec の「hooks」セクション](reference-appspec-file-structure-hooks.md#appspec-hooks-ecs)」を参照してください。


| ライフサイクルイベント | ライフサイクルイベントアクション | 
| --- | --- | 
| BeforeInstall (Lambda 関数のフック) | Lambda 関数を実行します。 | 
| インストール | 代替タスクの設定を行います。 | 
| AfterInstall (Lambda 関数のフック) | Lambda 関数を実行します。 | 
| AllowTestTraffic | テストリスナーからターゲットグループ 2 にトラフィックをルーティングします。 | 
| AfterAllowTestTraffic (Lambda 関数のフック) | Lambda 関数を実行します。 | 
| BeforeAllowTraffic (Lambda 関数のフック) | Lambda 関数を実行します。 | 
| AllowTraffic | 本稼働リスナーからターゲットグループ 2 にトラフィックをルーティングします。 | 
| AfterAllowTraffic | Lambda 関数を実行します。 | 



**注記**  
フックの Lambda 関数はオプションです。

1. <a name="ecs-before-install"></a>

****

   AppSpec ファイルの `BeforeInstall` フックで指定された Lambda 関数を実行します。

1. <a name="ecs-install"></a>

****

   `Install` ライフサイクルイベント中:

   1.  代替タスクセットが Amazon ECS サービスで作成されます。

   1.  更新後のコンテナ化されたアプリケーションは、置き換えタスクセットにインストールされます。

   1.  2 番目のターゲットグループは置き換えタスクセットに関連付けられています。

    この図は、新しい置き換えタスクセットを含むデプロイコンポーネントを示しています。コンテナ化されたアプリケーションはこのタスクセット内にあります。タスクセットは 3 つのタスクで構成されています。(アプリケーションには任意の数のタスクを含めることができます。) 2 番目のターゲットグループが置き換えタスクセットに関連付けられました。  
![\[新しい置き換えタスクセットを含むデプロイコンポーネント。コンテナ化されたアプリケーションはこのタスクセット内にあります。タスクセットは 3 つのタスクで構成されています。2 番目のターゲットグループが置き換えタスクセットに関連付けられました。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-2.png)

1. <a name="ecs-after-install"></a>

****

   AppSpec ファイルの `AfterInstall` フックで指定された Lambda 関数を実行します。

1. <a name="ecs-allow-test-traffic"></a>

****

   `AllowTestTraffic` イベントが呼び出されます。このライフサイクルイベントの間、テストリスナーは、更新されたコンテナ化アプリケーションにトラフィックをルーティングします。  
![\[テストリスナーは、更新されたコンテナ化アプリケーションにトラフィックをルーティングします。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-3.png)

1. <a name="ecs-after-allow-test-traffic"></a>

****

   AppSpec ファイルの `AfterAllowTestTraffic` フックで指定された Lambda 関数を実行します。Lambda 関数は、テストトラフィックを使用してデプロイを検証します。たとえば、Lambda 関数はテストリスナーにトラフィックを送信し、置き換えタスクセットのメトリクスを追跡できます。ロールバックが設定されている場合は、Lambda 関数内の検証テストが失敗したときにロールバックをトリガーする CloudWatch アラームを設定できます。

    検証テストが完了したら、次のいずれかが発生します。
   +  検証が失敗し、ロールバックが設定されている場合、デプロイステータスは `Failed` とマークされ、コンポーネントはデプロイが開始されたときの状態に戻ります。
   +  検証が失敗し、ロールバックが設定されていない場合、デプロイステータスは `Failed` とマークされ、コンポーネントは現在の状態のまま変わりません。
   +  検証が正常に完了すると、デプロイは引き続き `BeforeAllowTraffic` に進みます。

    詳細については[CodeDeploy での CloudWatch アラームを使用したデプロイのモニタリング](monitoring-create-alarms.md)、[自動ロールバック](deployments-rollback-and-redeploy.md#deployments-rollback-and-redeploy-automatic-rollbacks)、および[デプロイグループの詳細オプションの設定](deployment-groups-configure-advanced-options.md)を参照してください。

1. <a name="ecs-before-allow-traffic"></a>

****

   AppSpec ファイルの `BeforeAllowTraffic` フックで指定された Lambda 関数を実行します。

1. <a name="ecs-allow-traffic"></a>

****

   `AllowTraffic` イベントが呼び出されます。本稼働トラフィックは、元のタスクセットから置き換えタスクセットに再ルーティングされます。次の図は、本稼働トラフィックを受信して​​いる代替タスクセットを示しています。  
![\[代替タスクセットは本番トラフィックを受け取ります。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-4.png)

1. <a name="ecs-after-allow-traffic"></a>

****

   AppSpec ファイルの `AfterAllowTraffic` フックで指定された Lambda 関数を実行します。

1. 

****

   すべてのイベントが正常に完了したら、デプロイステータスは `Succeeded` になり、元のタスクセットは削除されます。  
![\[成功するすべてのイベント。\]](http://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/images/codedeploy-ecs-deployment-step-6.png)

## アプリケーションリビジョンのアップロード
<a name="deployment-steps-uploading-your-app-ecs"></a>

Amazon S3 に AppSpec ファイルを配置するか、コンソールまたは AWS CLIに直接入力します。詳細については、「[CodeDeploy アプリケーション仕様 (AppSpec) ファイル](application-specification-files.md)」を参照してください。

## アプリケーションとデプロイグループの作成
<a name="deployment-steps-registering-app-deployment-groups-ecs"></a>

Amazon ECS コンピューティングプラットフォーム上の CodeDeploy デプロイグループは、更新された Amazon ECS アプリケーションへのトラフィックを提供するリスナー、およびデプロイ中に使用される 2 つのターゲットグループを識別します。デプロイグループは、アラームおよびロールバックの設定などの設定オプションのセットも定義します。

## アプリケーションリビジョンのデプロイ
<a name="deployment-steps-deploy-ecs"></a>

これで、デプロイグループで指定された、更新された Amazon ECS サービスをデプロイする準備が整いました。CodeDeploy コンソールまたは [create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) コマンドを使用できます。デプロイを制御するために指定できるパラメータ (リビジョン、デプロイグループなど) があります。

## アプリケーションの更新
<a name="deployment-steps-updating-your-app-ecs"></a>

アプリケーションを更新し、CodeDeploy コンソールを使用するか、[create-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment.html) コマンドを呼び出してリビジョンをプッシュできます。

## 停止、失敗したデプロイ
<a name="deployment-stop-fail-ecs"></a>

デプロイを停止するには、CodeDeploy コンソールまたは[stop-deployment](https://docs.aws.amazon.com/cli/latest/reference/deploy/stop-deployment.html)コマンドを使用できます。デプロイを停止しようとする場合、次の 3 つのうち 1 つのことが発生します。
+ デプロイは停止し、オペレーションは成功というステータスを返す。この場合、停止したデプロイに対してそれ以上デプロイライフサイクルイベントは実行されません。
+ デプロイは即時に停止せず、オペレーションは保留中というステータスを返す。この場合、一部のデプロイライフサイクルイベントは、デプロイグループでまだ実行中である可能性があります。保留中のオペレーションが完了すると、デプロイを停止するためのそれ以降の呼び出しは、成功というステータスを返します。
+ デプロイは停止できず、オペレーションはエラーを返す。詳細については、 AWS CodeDeploy API リファレンスの[「エラー情報](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ErrorInformation.html)」と[「一般的なエラー](https://docs.aws.amazon.com/codedeploy/latest/APIReference/CommonErrors.html)」を参照してください。

## デプロイと再デプロイのロールバック
<a name="deployment-rollback-ecs"></a>

CodeDeploy は、置き換えタスクセットから元のタスクセットにトラフィックを再ルーティングすることにより、ロールバックを実装します。

デプロイが失敗した、アラームのモニタリングしきい値に一致したなど、特定の条件が満たされた場合に、自動的にデプロイをロールバックするようグループデプロイを設定できます。個別のデプロイで、デプロイグループに指定されたロールバック設定をオーバーライドすることもできます。

以前のデプロイされたバージョンを手動で再デプロイして、失敗したデプロイをロールバックすることもできます。

いずれの場合でも、新しいデプロイまたはロールバックされたデプロイには独自のデプロイ ID が割り当てられます。CodeDeploy コンソールには、自動デプロイの結果であるデプロイの一覧が表示されます。

デプロイする場合、現在のデプロイの元のタスクセットに関連付けられているターゲットグループは、デプロイの置き換えタスクセットに関連付けられています。

詳細については、「[CodeDeploy を使用した再デプロイおよびデプロイのロールバック](deployments-rollback-and-redeploy.md)」を参照してください。

## による Amazon ECS ブルー/グリーンデプロイ AWS CloudFormation
<a name="deployment-steps-ecs-cf"></a>

を使用して AWS CloudFormation 、CodeDeploy を通じて Amazon ECS ブルー/グリーンデプロイを管理できます。詳細については、「[を使用して Amazon ECS ブルー/グリーンデプロイを作成する CloudFormation](deployments-create-ecs-cfn.md)」を参照してください。

**注記**  
を使用した Amazon ECS ブルー/グリーンデプロイの管理 CloudFormation は、アジアパシフィック (大阪) リージョンでは利用できません。