Amazon Elastic Container Service (ECS) でアプリケーションを更新するときに、実行中のサービスにダウンタイムや中断を発生させずに新しいタスクをデプロイしたいです。
解決策
ダウンタイムを発生させずに新しいタスクを開始するには、次の手順を実行します。
ローリングアップデートのデプロイタイプを使用するようにデプロイパラメータを設定する
Amazon ECS でダウンタイムが発生しないデプロイを実現するためのベストプラクティスは、最小正常率を 100% に設定し、最大率を 200% に設定することです。最小正常率パラメータおよび最大率パラメータの詳細については、「デプロイの設定」を参照してください。
デプロイパラメータを設定するには、次の手順を実行します。
- Amazon ECS コンソールを開きます。
- [クラスター] を選択します。
- [クラスターの詳細] ページの [サービス] で、更新するサービスを選択します。次に、[更新] を選択します。
- [デプロイ設定] で [最小実行タスク数 (%)] と [最大実行タスク数 (%)] の値を設定します。
- [サービスを更新] を選択します。
重要: Amazon ECS はコンテナのデプロイプロセスを管理しますが、トラフィックルーティングは処理しません。ロードバランサーを使用する場合は、Amazon ECS タスクにトラフィックをルーティングするようにロードバランサーを設定します。AWS CodeDeploy でブルー/グリーンデプロイを使用する場合は、トラフィック管理設定を確認してください。
タスク定義でコンテナインスタンスの stopTimeout パラメータを設定します。
stopTimeout パラメータを設定し、アプリケーションがデプロイ中にタスクリクエストを完了するのに十分なバッファー時間を確保します。Amazon ECS タスク定義を更新した後、[新しいタスク定義リビジョンの作成] の [コンテナタイムアウト - オプション] で [停止タイムアウト] 値を設定します。
ELB ターゲットグループを設定する
Elastic Load Balancing (ELB) ターゲットグループの設定を構成するには、次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- [ターゲットグループ] を選択し、Amazon ECS サービスに関連付けられているターゲットグループを選択します。
- [グループの詳細] タブを選択します。次に、ヘルスチェックのパス、ヘルスチェックのプロトコル、ヘルスチェックのポート、正常しきい値、異常しきい値を適切な値で構成します。
- [属性] タブを選択し、アプリケーションのニーズに応じて [登録解除の遅延] 値を設定します。
注: [登録解除の遅延] 属性は、アプリケーションの応答時間の約 2 倍に設定することがベストプラクティスです。
- (オプション) 進行中のアプリケーションリクエストセッションを既存のタスクで完了させるために、ロードバランサーにスティッキーセッションを設定します。
CodeDeploy を使用して高度なデプロイ戦略を実施する
CodeDeploy を使用して、デプロイ前の Amazon ECS サービスの状態を検証します。
注: ブルー/グリーンデプロイメントの一括トラフィックシフトにより、サービスが中断する可能性があります。
スポットインスタンスの自動ドレインを設定する
コンテナインスタンスでスポットインスタンスのドレインを有効化すると、インスタンスが自動的にドレインされます。