Amazon ECS サービスデプロイのライフサイクルフック - Amazon Elastic Container Service

Amazon ECS サービスデプロイのライフサイクルフック

デプロイが開始されると、ライフサイクルステージが実行されます。これらのステージは「IN_PROGRESS」や「正常」などの状態の場合があります。指定されたライフサイクルステージで Amazon ECS がユーザーに代わって実行する Lambda 関数のライフサイクルフックを使用できます。関数は次のいずれかになります。

  • 15 分以内にヘルスチェックを検証する非同期 API。

  • ライフサイクルフックの完了を評価する別の非同期プロセスを開始するポーリング API。

関数の実行が完了したら、デプロイを続行するために hookStatus を返す必要があります。hookStatus が返されないか、関数が失敗した場合、デプロイはロールバックされます。以下は hookStatus の値です。

  • SUCCEEDED – デプロイは次のライフサイクルステージへと進みます。

  • FAILED – デプロイは最後に正常に処理されたデプロイにロールバックされます。

  • IN_PROGRESS – Amazon ECS により、短期間の後に関数が再度実行されます。デフォルトではこれは 30 秒間隔ですが、この値は callBackDelaySeconds とともに hookStatus を返すことでカスタマイズできます。

次の例では、カスタムコールバックの遅延を使用して hookStatus を返す方法が示されます。この例では、Amazon ECS によってこのフックはデフォルトの 30 秒ではなく、60 秒で再試行されます。

{ "hookStatus": "IN_PROGRESS", "callBackDelaySeconds": 60 }

ロールバックが発生すると、Amazon ECS によって次のライフサイクルステージのライフサイクルフックが実行されます。

  • PRODUCTION_TRAFFIC_SHIFT

  • TEST_TRAFFIC_SHIFT

ライフサイクルペイロード

ECS サービスデプロイにライフサイクルフックを設定すると、Amazon ECS によってデプロイプロセスの特定段階でこれらのフックが呼び出されます。各ライフサイクルステージでは、デプロイの現在の状態に関する情報を含む JSON ペイロードが提供されます。このドキュメントでは、各ライフサイクルステージのペイロード構造について説明します。

一般的なペイロード構造

すべてのライフサイクルステージのペイロードには、次の共通フィールドが含まれます。

  • serviceArn – サービスの Amazon リソースネーム (ARN)。

  • targetServiceRevisionArn – デプロイされるターゲットサービスリビジョンの ARN。

  • testTrafficWeights – サービスリビジョン ARN が対応するテストトラフィックの重みの割合を示すマップ。

  • productionTrafficWeights – サービスリビジョン ARN が対応する本番トラフィックの重みの割合を示すマップ。

ライフサイクルステージペイロード

RECONCILE_SERVICE

このステージは、サービスの調整中にデプロイプロセスの開始時に発生します。以下は、このライフサイクルステージのペイロードの一例を示しています。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 }, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 } }

この段階での想定:

  • プライマリタスクセットは 0% スケール

PRE_SCALE_UP

このステージは、新しいタスクがスケールアップされる前に発生します。以下は、このライフサイクルステージのペイロードの一例を示しています。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

この段階での想定:

  • グリーンサービスのリビジョンタスクは 0% スケール

POST_SCALE_UP

このステージは、新しいタスクがスケールアップされた後で正常であるときに発生します。以下は、このライフサイクルステージのペイロードの一例を示しています。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

この段階での想定:

  • グリーンサービスのリビジョンタスクは 100% スケール

  • グリーンサービスのリビジョンのタスクは正常

TEST_TRAFFIC_SHIFT

このステージは、テストトラフィックがグリーンサービスのリビジョンタスクに移行されるときに発生します。

以下は、このライフサイクルステージのペイロードの一例を示しています。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 }, "productionTrafficWeights": {} }

この段階での想定:

  • テストトラフィックは、グリーンサービスのリビジョンタスクに移行中。

POST_TEST_TRAFFIC_SHIFT

このステージは、テストトラフィックが新しいタスクに完全に移行された後に発生します。

以下は、このライフサイクルステージのペイロードの一例を示しています。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

この段階での想定:

  • テストトラフィックの 100% をグリーンサービスのリビジョンタスクに移行済み。

PRODUCTION_TRAFFIC_SHIFT

このステージは、本番トラフィックがグリーンサービスのリビジョンタスクに移行されるときに発生します。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": { "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892": 100, "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/78652123": 0 } }

この段階での想定:

  • 本番トラフィックは、グリーンサービスのリビジョンに移行中。

POST_PRODUCTION_TRAFFIC_SHIFT

このステージは、本番トラフィックがグリーンサービスのリビジョンタスクに完全に移行された後に発生します。

{ "serviceArn": "arn:aws:ecs:us-west-2:1234567890:service/myCluster/myService", "targetServiceRevisionArn": "arn:aws:ecs:us-west-2:1234567890:service-revision/myCluster/myService/01275892", "testTrafficWeights": {}, "productionTrafficWeights": {} }

この段階での想定:

  • 本番トラフィックの 100% をグリーンサービスのリビジョンタスクに移行済み。

ライフサイクルステージのカテゴリ

ライフサイクルステージは 2 つのカテゴリに分類されます。

  1. 1 回の呼び出しステージ – これらのステージは、サービスのデプロイ中に 1 回のみ呼び出されます。

    • PRE_SCALE_UP

    • POST_SCALE_UP

    • POST_TEST_TRAFFIC_SHIFT

    • POST_PRODUCTION_TRAFFIC_SHIFT

  2. 定期的な呼び出しステージ – ロールバックオペレーションが発生したときなどに、これらのステージはサービスのデプロイ中に複数回呼び出される場合があります。

    • TEST_TRAFFIC_SHIFT

    • PRODUCTION_TRAFFIC_SHIFT

ライフサイクルフック中のデプロイステータス

ライフサイクルフックの実行中に、デプロイステータスはすべてのライフサイクルステージで IN_PROGRESS になります。

Lifecycle Stage デプロイのステータス
RECONCILE_SERVICE IN_PROGRESS
PRE_SCALE_UP IN_PROGRESS
POST_SCALE_UP IN_PROGRESS
TEST_TRAFFIC_SHIFT IN_PROGRESS
POST_TEST_TRAFFIC_SHIFT IN_PROGRESS
PRODUCTION_TRAFFIC_SHIFT IN_PROGRESS
POST_PRODUCTION_TRAFFIC_SHIFT IN_PROGRESS