Amazon ECS サービスデプロイの一時停止フック
一時停止フックは、特定のライフサイクル段階で Amazon ECS サービスのデプロイを一時停止し、デプロイが進む前に ContinueServiceDeployment を呼び出すのを待ちます。デプロイを続行する前に手動承認または外部検証が必要な場合は、一時停止フックを使用します。
一時停止フックの仕組み
一時停止フックが設定されたライフサイクルステージにデプロイが達すると、次が発生します。
-
Amazon ECS は、一時停止フックに一意の
hookIdを生成します。 -
Amazon ECS は、detail-type
ECS Hook State Changeとイベント名HOOK_AWAITING_ACTIONを使用して EventBridge イベントを出力します。 -
デプロイは、
hookIdおよびCONTINUEまたはROLLBACKのアクションを使用してContinueServiceDeploymentを呼び出すか、設定されたタイムアウトに達するまで、一時停止されたままになります。
DescribeServiceDeployments を呼び出して hookId を取得できます。レスポンスには、フックステータスの lifecycleHookDetails 配列が含まれます。
{ "serviceDeployments": [ { "lifecycleHookDetails": [ { "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "targetType": "PAUSE", "status": "AWAITING_ACTION", "expiresAt": "2024-01-15T12:00:00Z", "timeoutAction": "ROLLBACK" } ] } ] }
一時停止フックの設定
次の例は、テストトラフィックシフトの完了後にデプロイを一時停止するサービス定義の一時停止フック設定を示しています。
{ "deploymentConfiguration": { "strategy": "BLUE_GREEN", "lifecycleHooks": [ { "targetType": "PAUSE", "lifecycleStages": [ "POST_TEST_TRAFFIC_SHIFT" ], "timeoutConfiguration": { "timeoutInMinutes": 10, "action": "ROLLBACK" } } ] } }
設定フィールド
| フィールド | 説明 | 有効値 | 必須 |
|---|---|---|---|
targetType |
フックのタイプ。一時停止フックの場合は PAUSE である必要があります。 |
PAUSE |
はい |
lifecycleStages |
デプロイが一時停止するライフサイクルステージ。 | RECONCILE_SERVICE, PRE_SCALE_UP,
POST_SCALE_UP,
POST_TEST_TRAFFIC_SHIFT,
PRE_PRODUCTION_TRAFFIC_SHIFT,
POST_PRODUCTION_TRAFFIC_SHIFT |
はい |
timeoutConfiguration.timeoutInMinutes |
タイムアウトアクションを実行するまでの待機時間。デフォルト: 1,440 分 (24 時間)。 | 1~20,160 (14 日間) | いいえ |
timeoutConfiguration.action |
タイムアウトが期限切れになった場合に実行するアクション。 | ROLLBACK (デフォルト)CONTINUE |
いいえ |
制約
-
サービスごとに最大 10 個の一時停止フックと 10 個の Lambda フックを設定できます。
-
一時停止フックは
hookTargetArnまたはroleArnを使用しません。これらのフィールドは Lambda フック専用です。 -
一時停止フックは、
TEST_TRAFFIC_SHIFTまたはPRODUCTION_TRAFFIC_SHIFTステージでは設定できません。
一時停止したデプロイの続行
デプロイが一時停止されたとき (一時停止フックのステータスは AWAITING_ACTION)、hookId と実行するアクションを使用して ContinueServiceDeployment を呼び出します。
デプロイを続行するには:
aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action CONTINUE
デプロイをロールバックするには:
aws ecs continue-service-deployment \ --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \ --action ROLLBACK
詳細については、「サービスデプロイの継続」を参照してください。
同じステージの複数のフック
同じライフサイクルステージで複数のフックを設定すると、そのステージのすべてのフックが続行されるまで、デプロイは一時停止したままになります。いずれかのフックがロールバックをトリガーする場合、そのステージのその他のフックのステータスに関係なく、デプロイ全体がロールバックされます。
この動作は、Lambda フックと一時停止フックの両方が同じライフサイクルステージで設定されている場合に適用されます。デプロイは、そのステージのすべてのフックが正常に完了したか、続行された場合にのみ続行します。
同じライフサイクルステージで設定されたすべてのフックは並行して実行されます。
タイムアウト動作
タイムアウトの有効期限が切れる前に ContinueServiceDeployment を呼び出さない場合、Amazon ECS は設定されたタイムアウトアクションを実行します。
-
ROLLBACK(デフォルト) - Amazon ECS はデプロイを以前のサービスリビジョンにロールバックします。 -
CONTINUE– Amaon ECS はデプロイは次のライフサイクルステージへと進めます。
DescribeServiceDeployments レスポンスの lifecycleHookDetails 配列の expiresAt フィールドを確認して、タイムアウトの有効期限をチェックします。
線形デプロイとカナリアデプロイでフックを一時停止する
線形デプロイとカナリアデプロイの場合、PRE_PRODUCTION_TRAFFIC_SHIFT で設定された一時停止フックは、トラフィックシフトの各ステップで呼び出されます。呼び出しごとに一意の hookId が生成され、それぞれに対して ContinueServiceDeployment を呼び出す必要があります。
例えば、5 つのトラフィックシフトステップと PRE_PRODUCTION_TRAFFIC_SHIFT の一時停止フックを持つ線形デプロイは、5 回 (各ステップの前に 1 回) 一時停止します。一時停止するたびに、対応する hookId を使用して ContinueServiceDeployment を個別に呼び出す必要があります。
EventBridge イベント
Amazon ECS は、ECS Hook State Change 一時停止フックがライフサイクルを通じて進行するにつれて、Detail-type で EventBridge イベントを出力します。次の表は、イベント名について説明しています。
| イベント名 | 説明 |
|---|---|
HOOK_AWAITING_ACTION |
フックは ContinueServiceDeployment を呼び出すのを待っています。 |
HOOK_SUCCEEDED |
フックが正常に完了しました (CONTINUE で ContinueServiceDeployment を呼び出しました)。 |
HOOK_FAILED |
フックが失敗しました (ROLLBACK で ContinueServiceDeployment を呼び出しました)。 |
HOOK_TIMED_OUT |
ContinueServiceDeployment が呼び出される前にフックがタイムアウトしました。 |
次の例は、一時停止フックがアクションを待機しているときに出力される EventBridge イベントを示しています。
{ "version": "0", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "detail-type": "ECS Hook State Change", "source": "aws.ecs", "account": "123456789012", "time": "2024-01-15T10:00:00Z", "region": "us-west-2", "detail": { "eventType": "INFO", "eventName": "HOOK_AWAITING_ACTION", "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw", "hookType": "PAUSE", "expiresAt": "2024-01-15T12:00:00Z", "lifecycleStage": "POST_TEST_TRAFFIC_SHIFT", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/my-cluster", "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/my-cluster/my-service", "serviceDeploymentArn": "arn:aws:ecs:us-west-2:123456789012:service-deployment/my-cluster/my-service/EZe5RNVLH6PPzHXINuP28", "updatedAt": "2024-01-15T10:00:00Z" } }