Amazon ECS コンピューティングプラットフォームでのデプロイ - AWS CodeDeploy

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

Amazon ECS コンピューティングプラットフォームでのデプロイ

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

Amazon ECS デプロイを開始する前に

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 ECS クラスターAmazon Elastic Container Service ユーザー

Amazon ECS サービス

Amazon ECSサービスは、Amazon ECS クラスター内のタスク定義の指定されたインスタンスを維持し、実行します。Amazon ECS サービスが CodeDeploy で有効になっている必要があります。デフォルトでは、Amazon ECS サービスは Amazon ECS デプロイに対して有効になっています。デプロイグループを作成するときは、Amazon ECS クラスターの Amazon ECS サービスをデプロイします。詳細については、「」を参照してください。Amazon ECS サービスAmazon Elastic Container Service ユーザー

Application Load Balancer またはNetwork Load Balancer

Amazon ECS デプロイで更新する Amazon ECS サービスでは、Elastic Load Balancing を使用する必要があります。Application Load Balancer または Network Load Balancer を使用できます。動的ポートマッピング、パスベースのルーティング、優先ルールなどの機能を利用できるように、Application Load Balancer をお勧めします。CodeDeploy アプリケーションのデプロイグループを作成するときに、ロードバランサーを指定します。詳細については、「」を参照してください。ロードバランサー、ターゲットグループ、リスナーをセットアップする CodeDeploy Amazon ECS デプロイそしてロードバランサーの作成Amazon Elastic Container Service ユーザー

1 つまたは 2 つのリスナー

ロードバランサーは、リスナーを使用してターゲットグループにトラフィックをルーティングします。本稼働リスナーが 1 つ必要です。検証テストの実行中、置き換えタスクセットにトラフィックをルーティングする、2 番目のオプションのテストリスナーを指定できます。デプロイグループを作成するときに、一方または両方のリスナーを指定します。Amazon ECS コンソールを使用して Amazon ECS サービスを作成すると、リスナーが自動的に作成されます。詳細については、「」を参照してください。アプリケーションロードバランサーのリスナーElastic Load Balancingそしてサービスの作成Amazon Elastic Container Service ユーザー

2 つの Amazon ECS ターゲットグループ

ターゲットグループは、登録済みターゲットにトラフィックをルーティングするために使用されます。Amazon ECS デプロイには 2 つのターゲットグループが必要です。1 つは Amazon ECS アプリケーションの元のタスクセット用、もう 1 つはその置き換えタスクセット用です。デプロイ中、CodeDeploy は置き換えタスクセットを作成し、元のタスクセットから新しいタスクセットにトラフィックを再ルーティングします。CodeDeploy アプリケーションのデプロイグループを作成するときに、ターゲットグループを指定します。

デプロイ中、CodeDeploy は、ステータスを持つ Amazon ECS サービスのタスクセットに関連付けられているターゲットグループを決定します。PRIMARY(これが元のタスクセット)、および 1 つのターゲットグループを関連付けます。さらに、もう一方のターゲットグループを置き換えタスクセットと関連付けます。別のデプロイを行う場合、現在のデプロイの元のタスクセットに関連付けられているターゲットグループは、次のデプロイの置き換えタスクセットに関連付けられています。詳細については、「」を参照してください。Application Load Balancer のターゲットグループElastic Load Balancing

Amazon ECS タスク定義

あるタスク定義は、Amazon ECS アプリケーションを含む Docker コンテナを実行するために必要です。CodeDeploy アプリケーションの AppSpec ファイルで、タスク定義の ARN を指定します。詳細については、「」を参照してください。Amazon ECSの タスク定義Amazon Elastic Container Service ユーザーそして AppSpec Amazon ECS デプロイ用の「resources」セクション

Amazon ECS アプリケーション用のコンテナ

Docker コンテナは、コードとその依存関係をパッケージ化してアプリケーションを実行できるようにするソフトウェアのユニットです。コンテナはアプリケーションを分離して、さまざまなコンピューティング環境で実行できるようにします。ロードバランサーは Amazon ECS アプリケーションのタスクセットのコンテナにトラフィックをルーティングします。CodeDeploy アプリケーションの AppSpec ファイルにコンテナの名前を指定します。AppSpec ファイルで指定するコンテナは、Amazon ECS タスク定義で指定したコンテナのいずれかである必要があります。詳細については、「」を参照してください。Amazon Elastic Container Service とはAmazon Elastic Container Service ユーザーそして AppSpec Amazon ECS デプロイ用の「resources」セクション

置き換えタスクセット用のポート

Amazon ECS デプロイ中に、ロードバランサーがトラフィックをこれに送信します。CodeDeploy アプリケーションの AppSpec ファイルで指定されたコンテナ上で指定します。ポートは、CodeDeploy アプリケーションの AppSpec ファイルで指定します。詳細については、「 AppSpec Amazon ECS デプロイ用の「resources」セクション 」を参照してください。

Amazon ECS コンピューティングプラットフォームのデプロイワークフロー (概要)

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

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

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

  2. デプロイグループをセットアップするには、以下を指定します。

    • デプロイグループ名。

    • Amazon ECS クラスターとサービス名。Amazon ECS サービスのデプロイコントローラーは CodeDeploy に設定する必要があります。

    • 本稼働リスナー、オプションのテストリスナー、およびターゲットグループは、デプロイ中に使用されます。

    • Amazon ECS サービスの置き換え先の Amazon ECS タスクセットに本稼働トラフィックを再ルーティングするタイミングや、Amazon ECS サービスの元の Amazon ECS タスクセットを終了するタイミングなどのデプロイ設定。

    • トリガー、アラーム、ロールバック動作などのオプション設定。

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

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

  5. デプロイの結果を確認します。詳細については、「CodeDeploy でのデプロイの」を参照してください。

Amazon ECS デプロイ中に何が起こりますか

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

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

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

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

注記

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

  1. で指定されたすべての Lambda 関数を実行します。BeforeInstallAppSpec ファイルをフックします。

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

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

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

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

    この図は、新しい置き換えタスクセットを含むデプロイコンポーネントを示しています。コンテナ化されたアプリケーションはこのタスクセット内にあります。タスクセットは 3 つのタスクで構成されています。(アプリケーションには任意の数のタスクを含めることができます。) 2 番目のターゲットグループが置き換えタスクセットに関連付けられました。

  3. で指定されたすべての Lambda 関数を実行します。AfterInstallAppSpec ファイルをフックします。

  4. AllowTestTraffic イベントが呼び出されます。このライフサイクルイベントの間、テストリスナーは、更新されたコンテナ化アプリケーションにトラフィックをルーティングします。

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

    検証テストが完了したら、次のいずれかが発生します。

    • 検証が失敗し、ロールバックが設定されている場合、デプロイステータスは Failed とマークされ、コンポーネントはデプロイが開始されたときの状態に戻ります。

    • 検証が失敗し、ロールバックが設定されていない場合、デプロイステータスは Failed とマークされ、コンポーネントは現在の状態のまま変わりません。

    • 検証が正常に完了すると、デプロイは引き続き BeforeAllowTraffic に進みます。

    詳細については、「CodeDeploy での CloudWatch アラームを使用したデプロイのモニタリング」、「自動ロールバック」、および「デプロイグループの詳細オプションの設定」を参照してください。

  6. で指定された Lambda 関数を実行します。BeforeAllowTrafficAppSpec ファイルをフックします。

  7. AllowTraffic イベントが呼び出されます。本稼働トラフィックは、元のタスクセットから置き換えタスクセットに再ルーティングされます。次の図は、本稼働トラフィックを受信して​​いる代替タスクセットを示しています。

  8. で指定された Lambda 関数を実行します。AfterAllowTrafficAppSpec ファイルをフックします。

  9. すべてのイベントが正常に完了したら、デプロイステータスは Succeeded になり、元のタスクセットは削除されます。

アプリケーションリビジョンをアップロードする

AppSpec ファイルを Amazon S3 に配置するか、コンソールまたはに直接入力します。AWS CLI。詳細については、「Application Specification Files」を参照してください。

アプリケーションおよびデプロイグループの作成

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

アプリケーションリビジョンのデプロイ

これで、デプロイグループで指定された Amazon ECS 更新された Amazon ECS サービスをデプロイする準備が整いました。CodeDeploy コンソールデプロイの作成コマンド。デプロイを制御するために指定できるパラメータ (リビジョン、デプロイグループなど) があります。

アプリケーションの更新

アプリケーションを更新し、CodeDeploy コンソールを使用するか、デプロイの作成コマンドでリビジョンをプッシュします。

停止、失敗したデプロイ

CodeDeploy コンソールデプロイの停止コマンドを実行してデプロイを停止します。デプロイを停止しようとする場合、次の 3 つのうち 1 つのことが発生します。

  • デプロイは停止し、オペレーションは成功というステータスを返す。この場合、停止したデプロイに対してそれ以上デプロイライフサイクルイベントは実行されません。

  • デプロイは即時に停止せず、オペレーションは保留中というステータスを返す。この場合、一部のデプロイライフサイクルイベントは、デプロイグループでまだ実行中である可能性があります。保留中のオペレーションが完了すると、デプロイを停止するためのそれ以降の呼び出しは、成功というステータスを返します。

  • デプロイは停止できず、オペレーションはエラーを返す。詳細については、「」を参照してください。エラー情報そして一般的なエラーのAWS CodeDeployAPI リファレンス。

デプロイと再デプロイのロールバック

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

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

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

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

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

詳細については、「CodeDeploy を使用してデプロイを再デプロイしてロールバックする」を参照してください。

Amazon ECS ブルー/グリーンデプロイAWS CloudFormation

次を使用できます。AWS CloudFormationをクリックして、CodeDeploy による Amazon ECS ブルー/グリーンデプロイを管理します。詳細については、「を使用して Amazon ECS ブルー/グリーンデプロイを作成するAWS CloudFormation」を参照してください。

注記

による Amazon ECS ブルー/グリーンデプロイの管理AWS CloudFormationがアジアパシフィック (大阪) リージョンでは利用できません。