Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

サービスの更新

実行中のサービスを更新することで、サービスが維持するタスク数の変更、タスクがどのタスク定義を使用するか、また、タスクで Fargate 起動タイプを使用している場合には、サービスが使用するプラットフォームバージョンの変更ができます。さらに容量が必要なアプリケーションがある場合には、サービスのスケール調整ができます。スケールダウンする未使用のキャパシティーがある場合は、サービスのタスクの必要数を減らし、リソースを解放できます。

アプリケーションの Docker イメージを更新した場合は、そのイメージを使用する新しいタスク定義を作成し、サービスにデプロイできます。

注記

更新した Docker イメージがサービスに既存するタスク定義と同じタグを使用する場合 (my_image:latest など)、タスク定義の新しいリビジョンを作成する必要はありません。サービスの更新には、以下の手順を使用してサービスの現在の設定を維持し、[新しいデプロイの強制] を選択します。デプロイによって起動される新しいタスクは、リポジトリの開始時にリポジトリから現在のイメージあるいはタグを取得します。[Force new deployment (新しいデプロイの強制)] オプションは、LATEST を指定する場合により最近のプラットフォームバージョンを使用するように Fargate タスクを更新するためにも使用できます。たとえば、LATEST を指定し、実行中のタスクが 1.0.0 プラットフォームバージョンを使用している場合に、より最新のプラットフォームバージョンを使用するために再起動したいときなどです。

サービススケジューラは、最小ヘルス率と最大ヘルス率のパラメータ (サービスのデプロイ設定) を使用して、デプロイ戦略を判断します。

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、最小ヘルス率は、デプロイ時に RUNNING 状態に保つ必要のあるサービスのタスクの下限数をサービスのタスクの必要数のパーセント値 (最も近い整数に切り上げ) で表します。サービスに EC2 起動タイプを使用するタスクが含まれている場合、DRAINING 状態のコンテナインスタンスがある間は、パラメータも適用されます。このパラメータにより、追加のクラスターキャパシティーを使用せずにデプロイできます。たとえば、サービスで必要数が 4 タスク、最小ヘルス率が 50% とすると、スケジューラは 2 つの新しいタスクを開始する前に、2 つの既存のタスクを停止してクラスターのキャパシティーを解放できます。ロードバランサーを使用しないサービスのタスクは、RUNNING 状態にある場合正常な状態と見なされます。ロードバランサーを使用するサービスのタスクは、RUNNING 状態にあり、ロードバランサーによって正常と報告された場合に、正常であると見なされます。最小ヘルス率のデフォルト値は 100% です。

サービスでローリング更新 (ECS) のデプロイタイプが使用されている場合、最大ヘルス率パラメータは、デプロイ時に RUNNING または PENDING 状態で使用できるサービスのタスクの上限数をサービスのタスクの必要数のパーセント値 (最も近い整数に切り下げ) で表します。サービスに EC2 起動タイプを使用するタスクが含まれている場合、DRAINING 状態のコンテナインスタンスがある間は、パラメータも適用されます。このパラメータを使用すると、デプロイのバッチサイズを定義できます。たとえば、サービスで必要数が 4 タスク、最大ヘルス率の値が 200% とすると、スケジューラは 4 つの古いタスクを停止する前に、4 つの新しいタスクを開始できます。そのために必要なクラスターリソースを使用できることが前提です。最大ヘルス率のデフォルト値は 200% です。

サービスで EC2 起動タイプを使用する Blue/Green (CODE_DEPLOY) デプロイタイプとタスクが使用されている場合、最小ヘルス率 および 最大ヘルス率の値はデフォルト値に設定されます。コンテナインスタンスが DRAINING 状態にある間、RUNNING 状態を保つサービスのタスク数の下限と上限を定義する目的でのみ使用されます。サービスのタスクで Fargate 起動タイプを使用する場合、最小ヘルス率と最大ヘルス率の値は使用されません。現在、サービスについて説明するときに、これらは表示されます。

更新中にサービススケジューラがタスクを置き換えるとき、サービスはまずロードバランサーからタスクを削除し (使用されている場合)、接続のドレインが完了するのを待ちます。その後、タスクで実行されているコンテナに docker stop と同等のコマンドが発行されます。この結果、SIGTERM 信号と 30 秒のタイムアウトが発生し、その後に SIGKILL が送信され、コンテナが強制的に停止されます。コンテナが SIGTERM 信号を正常に処理し、その受信時から 30 秒以内に終了する場合、SIGKILL 信号は送信されません。サービススケジューラは、最小ヘルス率と最大ヘルス率の設定で定義されているとおりに、タスクを開始および停止します。

重要

タスク定義でコンテナが使用するポートを変更する場合は、変更後のポートを使用するようにコンテナインスタンスのセキュリティグループを更新する必要があります。

サービスでロードバランサーを使用する場合、サービスの作成時に定義したロードバランサー設定は変更できません。サービスのタスク定義を更新する場合、サービスの作成時に指定したコンテナ名とコンテナポートは、タスク定義のままにしておく必要があります。

ロードバランサー名、コンテナ名、またはサービスロードバランサー設定に関連付けられたコンテナポートを変更するには、新しいサービスを作成する必要があります。

Amazon ECS は、Elastic Load Balancing ロードバランサーまたは Amazon ECS コンテナインスタンスに関連付けられたセキュリティグループを自動的には更新しません。

実行中のサービスを更新するには

  1. https://console.aws.amazon.com/ecs/ にある Amazon ECS コンソールを開きます。

  2. ナビゲーションバーで、クラスターのあるリージョンを選択します。

  3. ナビゲーションペインで [Clusters] を選択します。

  4. [クラスター] ページで、サービスが存在するクラスターの名前を選択します。

  5. [Cluster: name] ページで、[Services] を選択します。

  6. 更新するサービスの左側にあるチェックボックスをオンにし、[Update] を選択します。

  7. [サービスの設定] ページで、サービスの情報はあらかじめ入力されています。タスク定義、プラットフォームバージョン、デプロイ設定、タスクの必要数のいずれか (またはこれらの組み合わせ) を変更し、[次のステップ] を選択します。

    注記

    サービスで既存のタスク定義にあるものと同じタグ (my_image:latest など) で最新に更新された Docker イメージを使用するには、あるいはサービスの現在の設定を維持するには、[Force new deployment (新しいデプロイの強制)] を選択します。デプロイによって起動される新しいタスクは、リポジトリの開始時にリポジトリから現在のイメージあるいはタグを取得します。[Force new deployment (新しいデプロイの強制)] オプションは、LATEST を指定する場合により最近のプラットフォームバージョンを使用するように Fargate タスクを更新するためにも使用できます。たとえば、LATEST を指定し、実行中のタスクが 1.0.0 プラットフォームバージョンを使用している場合に、より最新のプラットフォームバージョンを使用するために再起動したいときなどです。

  8. [Configure deployments (デプロイの設定)] ページでは、サービスで Blue/Green デプロイタイプを使用している場合、サービスのデプロイメントのコンポーネントはあらかじめ入力されています。以下の設定を確認します。

    1. [アプリケーション名] では、サービスが含まれる CodeDeploy アプリケーションを選択します。

    2. [デプロイグループ名] では、サービスが含まれる CodeDeploy デプロイグループを選択します。

    3. サービスのデプロイメントの新しいリビジョンの一部として実行するデプロイライフサイクルイベントフックと関連する Lambda 関数を選択します。使用できるライフサイクルフックは次のとおりです。

      • BeforeInstall – 置き換えタスクセットが作成される前に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果では、ロールバックはトリガーされません。

      • AfterInstall – 置き換えタスクセットが作成された後に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

      • BeforeAllowTraffic – 本稼働トラフィックが置き換えタスクセットに再ルーティングされる前に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

      • AfterAllowTraffic – 本稼働トラフィックが置き換えタスクセットに再ルーティングされた後に、このデプロイライフサイクルイベントフックを使用して Lambda 関数を呼び出します。このライフサイクルイベントでの Lambda 関数の結果により、ロールバックをトリガーできます。

      ライフサイクルフックの詳細については、AWS CodeDeploy User Guide の「AppSpec の「hooks」セクション」を参照してください。

  9. [Next step] を選択します。

  10. [ネットワークの設定] ページで、ネットワークの情報はあらかじめ入力されています。[ロードバランシング] セクションでは、サービスで Blue/Green デプロイタイプを使用している場合、ターゲットグループと関連付けるリスナーを選択します。ヘルスチェックの猶予期間を変更します (必要な場合)。[次のステップ] をクリックします。

  11. (オプション) サービスの Auto Scaling を使用すると、CloudWatch アラームに応じてサービスが自動的にスケールアップ/ダウンされるようにできます。

    1. [Optional configurations (オプションの設定)] で、[サービスの Auto Scaling の設定] を選択します。

    2. ステップ 5: (オプション) サービスの Auto Scaling を使用するようにサービスを設定する に進みます。

    3. そのセクションの手順を完了し、戻ります。

  12. [Update Service] を選択して終了し、サービスを更新します。