Amazon ECS Compute Platform でのデプロイ - AWS CodeDeploy

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

Amazon ECS Compute Platform でのデプロイ

このトピックでは、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 Elastic Container Service ユーザーガイド」の「Amazon ECSクラスター」を参照してください。

Amazon ECSサービス

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

Application Load Balancer および Network Load Balancer

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

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

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

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

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

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

Amazon ECSタスク定義

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

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

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

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

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

Amazon ECSコンピューティングプラットフォームでのデプロイワークフロー (高レベル)

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

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

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

Amazon ECSデプロイ中に発生すること

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

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

Amazon ECSデプロイを開始する準備が整ったときのロードバランサー、リスナー、ターゲットグループ、タスクセット間の関係。

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

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

注記

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

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

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

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

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

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

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

    新しい代替タスクセットを含むデプロイコンポーネント。コンテナ化されたアプリケーションはこのタスクセット内にあります。タスクセットは 3 つのタスクで構成されています。2 番目のターゲットグループが置き換えタスクセットに関連付けられました。
  3. AppSpec ファイルのAfterInstallフックで指定された Lambda 関数を実行します。

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

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

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

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

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

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

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

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

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

    代替タスクセットは本番トラフィックを受信します。
  8. AppSpec ファイルのAfterAllowTrafficフックで指定された Lambda 関数を実行します。

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

    すべてのイベントが成功しました。

アプリケーションリビジョンのアップロード

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

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

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

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

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

アプリケーションの更新

アプリケーションを更新し、 CodeDeploy コンソールを使用するか、create-deployment コマンドを呼び出してリビジョンをプッシュできます。

停止、失敗したデプロイ

CodeDeploy コンソールまたは stop-deployment コマンドを使用してデプロイを停止できます。デプロイを停止しようとする場合、次の 3 つのうち 1 つのことが発生します。

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

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

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

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

CodeDeploy は、代替タスクセットから元のタスクセットにトラフィックを再ルーティングすることで、ロールバックを実装します。

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

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

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

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

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

を使用した Amazon ECS ブルー/グリーンデプロイ AWS CloudFormation

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

注記

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