View a markdown version of this page

Amazon ECS サービスデプロイの一時停止フック - Amazon Elastic Container Service

Amazon ECS サービスデプロイの一時停止フック

一時停止フックは、特定のライフサイクル段階で Amazon ECS サービスのデプロイを一時停止し、デプロイが進む前に ContinueServiceDeployment を呼び出すのを待ちます。デプロイを続行する前に手動承認または外部検証が必要な場合は、一時停止フックを使用します。

一時停止フックの仕組み

一時停止フックが設定されたライフサイクルステージにデプロイが達すると、次が発生します。

  1. Amazon ECS は、一時停止フックに一意の hookId を生成します。

  2. Amazon ECS は、detail-type ECS Hook State Change とイベント名 HOOK_AWAITING_ACTION を使用して EventBridge イベントを出力します。

  3. デプロイは、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 フックが正常に完了しました (CONTINUEContinueServiceDeployment を呼び出しました)。
HOOK_FAILED フックが失敗しました (ROLLBACKContinueServiceDeployment を呼び出しました)。
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" } }