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

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

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

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

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

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

要件 指定される場所
Amazon ECS クラスター デプロイグループ
Amazon ECS サービス デプロイグループ
Application Load Balancer および Network Load Balancer デプロイグループ
本稼働リスナー デプロイグループ
テストリスナー (オプション) デプロイグループ
2 つのターゲットグループ デプロイグループ
Amazon ECS タスク定義 AppSpec file
コンテナ名 AppSpec file
コンテナポート AppSpec file
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 アプリケーションのデプロイグループを作成するときに、ターゲットグループを指定します。

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

Amazon ECS タスク定義

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

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

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

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

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

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ファイル) を指定します。YAML または JSON フォーマットでコンソールに入力するか、AWS CLI または SDK で指定して、Amazon S3 にアップロードすることができます。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 デプロイの「フック」セクション」を参照してください。

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

注記

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Amazon ECSCodeDeploy コンピューティングプラットフォーム上のデプロイグループは、更新された 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 Blue/Green デプロイを管理できますCodeDeploy。詳細については、「AWS CloudFormation を通じた Amazon ECS Blue/Green デプロイの作成」を参照してください。

注記

AWS CloudFormation と、Amazon ECS Blue/Green を管理するには、アジアパシフィック (大阪) リージョンではご利用いただけません。