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

サービスの更新

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

アプリケーションの Docker イメージを更新した場合は、そのイメージを使用する新しいタスク定義を作成し、サービスにデプロイできます。サービススケジューラは、最小ヘルス率と最大ヘルス率のパラメーター (サービスのデプロイ設定) を使用して、デプロイ戦略を判断します。

注記

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

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

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

更新中にサービススケジューラがタスクを置き換えるとき、ロードバランサーがサービスによって使用されている場合、サービスはまずロードバランサーからタスクを削除し、接続のドレインが完了するのを待ちます。その後、タスクで実行されているコンテナに 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 イメージを使用する場合、あるいはサービスの現在の設定を維持して、[新しいデプロイの強制] を選択する場合。デプロイによって起動される新しいタスクは、リポジトリの開始時にリポジトリから現在のイメージあるいはタグを取得します。[新しいデプロイの強制] オプションは、LATEST を指定する場合により最近のプラットフォームバージョンを使用するように Fargate タスクを更新するためにも使用できます。たとえば、LATEST を指定し、実行中のタスクが 1.0.0 プラットフォームバージョンを使用している場合に、より最新のプラットフォームバージョンを使用するために再起動したいときなどです。

  8. [ネットワークの設定] ページで、ネットワークの情報はあらかじめ入力されています。ヘルスチェックの猶予期間を変更します (必要な場合)。[次のステップ] をクリックします。

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

    1. [Optional configurations] で、[Configure サービスの Auto Scaling] を選択します。

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

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

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