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 回のみ呼び出されます。
PRE_SCALE_UP
POST_SCALE_UP
POST_TEST_TRAFFIC_SHIFT
POST_PRODUCTION_TRAFFIC_SHIFT
-
定期的な呼び出しステージ – ロールバックオペレーションが発生したときなどに、これらのステージはサービスのデプロイ中に複数回呼び出される場合があります。
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 |