

# Amazon ECS サービスデプロイの一時停止フック
<a name="pause-lifecycle-hooks"></a>

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

## 一時停止フックの仕組み
<a name="pause-hooks-how-they-work"></a>

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

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

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

1. デプロイは、`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"
                }
            ]
        }
    ]
}
```

## 一時停止フックの設定
<a name="pause-hooks-configuring"></a>

次の例は、テストトラフィックシフトの完了後にデプロイを一時停止するサービス定義の一時停止フック設定を示しています。

```
{
    "deploymentConfiguration": {
        "strategy": "BLUE_GREEN",
        "lifecycleHooks": [
            {
                "targetType": "PAUSE",
                "lifecycleStages": [
                    "POST_TEST_TRAFFIC_SHIFT"
                ],
                "timeoutConfiguration": {
                    "timeoutInMinutes": 10,
                    "action": "ROLLBACK"
                }
            }
        ]
    }
}
```

### 設定フィールド
<a name="pause-hooks-configuration-fields"></a>


| フィールド | 説明 | 有効値 | 必須 | 
| --- | --- | --- | --- | 
| 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 | いいえ | 

## 制約
<a name="pause-hooks-constraints"></a>
+ サービスごとに最大 10 個の一時停止フックと 10 個の Lambda フックを設定できます。
+ 一時停止フックは `hookTargetArn` または `roleArn` を使用しません。これらのフィールドは Lambda フック専用です。
+ 一時停止フックは、`TEST_TRAFFIC_SHIFT` または `PRODUCTION_TRAFFIC_SHIFT` ステージでは設定できません。

## 一時停止したデプロイの続行
<a name="pause-hooks-continuing"></a>

デプロイが一時停止されたとき (一時停止フックのステータスは `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
```

詳細については、「[サービスデプロイの継続](continue-service-deployment.md)」を参照してください。

## 同じステージの複数のフック
<a name="pause-hooks-multiple-at-same-stage"></a>

同じライフサイクルステージで複数のフックを設定すると、そのステージのすべてのフックが続行されるまで、デプロイは一時停止したままになります。いずれかのフックがロールバックをトリガーする場合、そのステージのその他のフックのステータスに関係なく、デプロイ全体がロールバックされます。

この動作は、Lambda フックと一時停止フックの両方が同じライフサイクルステージで設定されている場合に適用されます。デプロイは、そのステージのすべてのフックが正常に完了したか、続行された場合にのみ続行します。

同じライフサイクルステージで設定されたすべてのフックは並行して実行されます。

## タイムアウト動作
<a name="pause-hooks-timeout"></a>

タイムアウトの有効期限が切れる前に `ContinueServiceDeployment` を呼び出さない場合、Amazon ECS は設定されたタイムアウトアクションを実行します。
+ `ROLLBACK` (デフォルト) - Amazon ECS はデプロイを以前のサービスリビジョンにロールバックします。
+ `CONTINUE` – Amaon ECS はデプロイは次のライフサイクルステージへと進めます。

`DescribeServiceDeployments` レスポンスの `lifecycleHookDetails` 配列の `expiresAt` フィールドを確認して、タイムアウトの有効期限をチェックします。

## 線形デプロイとカナリアデプロイでフックを一時停止する
<a name="pause-hooks-linear-canary"></a>

線形デプロイとカナリアデプロイの場合、`PRE_PRODUCTION_TRAFFIC_SHIFT` で設定された一時停止フックは、トラフィックシフトの各ステップで呼び出されます。呼び出しごとに一意の `hookId` が生成され、それぞれに対して `ContinueServiceDeployment` を呼び出す必要があります。

例えば、5 つのトラフィックシフトステップと `PRE_PRODUCTION_TRAFFIC_SHIFT` の一時停止フックを持つ線形デプロイは、5 回 (各ステップの前に 1 回) 一時停止します。一時停止するたびに、対応する `hookId` を使用して `ContinueServiceDeployment` を個別に呼び出す必要があります。

## EventBridge イベント
<a name="pause-hooks-eventbridge"></a>

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"
    }
}
```