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 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 Service ユーザーガイド」の「Amazon ECS のクラスター」を参照してください。

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 デプロイ用のロードバランサー、ターゲットグループ、リスナーを設定する と「ロードバランサーの作成」を参照してください。

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 つのターゲットグループを関連付けてから、もう一方のターゲットグループを置き換えタスクセットに関連付けます。別のデプロイを行う場合、現在のデプロイの元のタスクセットに関連付けられているターゲットグループは、次のデプロイの置き換えタスクセットに関連付けられています。詳細については、「Elastic Load Balancingのユーザーガイド」の「Application Load Balancer のターゲットグループ」を参照してください。

Amazon ECS タスク定義

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

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

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

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

  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 reroutes トラフィックを 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」を参照してください。

AWS CloudFormationを通じた Amazon ECS blue/green デプロイのデプロイ

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

注記

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