翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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サービスのデプロイの主なステップを示しています。
ステップには以下が含まれます。
-
デプロイする内容を一意に表す名前を指定して、 AWS CodeDeploy アプリケーションを作成します。Amazon ECSアプリケーションをデプロイするには、 AWS CodeDeploy アプリケーションで Amazon ECSコンピューティングプラットフォームを選択します。 は、デプロイ中にアプリケーション CodeDeploy を使用して、デプロイグループ、ターゲットグループ、リスナー、トラフィックルート変更動作、アプリケーションリビジョンなどの正しいデプロイコンポーネントを参照します。詳細については、「でアプリケーションを作成する CodeDeploy」を参照してください。
-
デプロイグループをセットアップするには、以下を指定します。
-
デプロイグループ名。
-
Amazon ECSクラスターとサービス名。Amazon ECSサービスのデプロイコントローラーは に設定する必要があります CodeDeploy。
-
本稼働リスナー、オプションのテストリスナー、およびターゲットグループは、デプロイ中に使用されます。
-
Amazon ECSサービスの代替 Amazon ECSタスクセットに本番トラフィックを再ルーティングするタイミングや、Amazon ECSサービスの元の Amazon ECSタスクセットを終了するタイミングなどのデプロイ設定。
-
トリガー、アラーム、ロールバック動作などのオプション設定。
-
-
アプリケーション仕様ファイル (AppSpec ファイル) を指定します。Amazon S3 にアップロードしたり、 YAML または JSON形式でコンソールに入力したり、 AWS CLI または で指定したりできますSDK。この AppSpec ファイルは、デプロイの Amazon ECSタスク定義、トラフィックのルーティングに使用されるコンテナ名とポートマッピング、デプロイライフサイクルフックの後に実行される Lambda 関数を指定します。コンテナ名は Amazon ECSタスク定義のコンテナである必要があります。詳細については、「のアプリケーションリビジョンの使用 CodeDeploy」を参照してください。
-
アプリケーションの revision. AWS CodeDeploy rerouts トラフィックを Amazon ECSサービス内のタスクセットの元のバージョンから新しい代替タスクセットにデプロイします。デプロイグループで指定されたターゲットグループは、元のタスクセットと置き換えタスクセットにトラフィックを提供するために使用されます。デプロイが完了すると、元のタスクセットは削除されます。トラフィックが再ルーティングされる前に、テストトラフィックを置き換えバージョンに提供するためのオプションのテストリスナーを指定できます。詳細については、「を使用してデプロイを作成する CodeDeploy」を参照してください。
-
デプロイの結果を確認します。詳細については、「でのデプロイのモニタリング 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 関数はオプションです。
-
AppSpec ファイルの
BeforeInstall
フックで指定された Lambda 関数を実行します。 -
Install
ライフサイクルイベント中:-
代替タスクセットが Amazon ECSサービスに作成されます。
-
更新後のコンテナ化されたアプリケーションは、置き換えタスクセットにインストールされます。
-
2 番目のターゲットグループは置き換えタスクセットに関連付けられています。
この図は、新しい置き換えタスクセットを含むデプロイコンポーネントを示しています。コンテナ化されたアプリケーションはこのタスクセット内にあります。タスクセットは 3 つのタスクで構成されています。(アプリケーションには任意の数のタスクを含めることができます。) 2 番目のターゲットグループが置き換えタスクセットに関連付けられました。
-
-
AppSpec ファイルの
AfterInstall
フックで指定された Lambda 関数を実行します。 -
AllowTestTraffic
イベントが呼び出されます。このライフサイクルイベントの間、テストリスナーは、更新されたコンテナ化アプリケーションにトラフィックをルーティングします。 -
AppSpec ファイルの
AfterAllowTestTraffic
フックで指定された Lambda 関数を実行します。Lambda 関数は、テストトラフィックを使用してデプロイを検証します。たとえば、Lambda 関数はテストリスナーにトラフィックを送信し、置き換えタスクセットのメトリクスを追跡できます。ロールバックが設定されている場合は、Lambda 関数の検証テストが失敗したときにロールバックをトリガーする CloudWatch アラームを設定できます。検証テストが完了したら、次のいずれかが発生します。
-
検証が失敗し、ロールバックが設定されている場合、デプロイステータスは
Failed
とマークされ、コンポーネントはデプロイが開始されたときの状態に戻ります。 -
検証が失敗し、ロールバックが設定されていない場合、デプロイステータスは
Failed
とマークされ、コンポーネントは現在の状態のまま変わりません。 -
検証が正常に完了すると、デプロイは引き続き
BeforeAllowTraffic
に進みます。
詳細については、での CloudWatch アラームによるデプロイのモニタリング CodeDeploy、自動ロールバック、およびデプロイグループの詳細オプションの設定を参照してください。
-
-
AppSpec ファイルの
BeforeAllowTraffic
フックで指定された Lambda 関数を実行します。 -
AllowTraffic
イベントが呼び出されます。本稼働トラフィックは、元のタスクセットから置き換えタスクセットに再ルーティングされます。次の図は、本稼働トラフィックを受信している代替タスクセットを示しています。 -
AppSpec ファイルの
AfterAllowTraffic
フックで指定された Lambda 関数を実行します。 -
すべてのイベントが正常に完了したら、デプロイステータスは
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 は、アジアパシフィック (大阪) リージョンでは利用できません。