

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 暫停 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`和事件名稱 的 EventBridge 事件`HOOK_AWAITING_ACTION`。

1. 部署會保持暫停，直到您`ContinueServiceDeployment`使用 呼叫 `hookId` 和 `CONTINUE`或 的動作`ROLLBACK`，或直到達到設定的逾時為止。

您可以呼叫 `hookId`來擷取 `DescribeServiceDeployments`。回應包含具有勾點狀態的`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 | 否 | 

## Constraints
<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`)，請`ContinueServiceDeployment`呼叫 `hookId`和您要採取的動作。

若要繼續部署：

```
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` - Amazon ECS 會繼續部署至下一個生命週期階段。

檢查`DescribeServiceDeployments`回應`lifecycleHookDetails`陣列中的 `expiresAt` 欄位，以查看逾時何時過期。

## 使用線性和 Canary 部署暫停掛鉤
<a name="pause-hooks-linear-canary"></a>

對於線性和 Canary 部署，在每個流量轉移步驟`PRE_PRODUCTION_TRAFFIC_SHIFT`調用在 設定的暫停掛鉤。每個叫用都會產生唯一的 `hookId`，而且您必須`ContinueServiceDeployment`針對每個叫用呼叫 。

例如，具有 5 個流量轉移步驟和暫停掛鉤的線性部署會`PRE_PRODUCTION_TRAFFIC_SHIFT`暫停 5 次 - 在每個步驟之前一次。每次暫停都需要個別呼叫 `ContinueServiceDeployment` 與對應的 `hookId`。

## EventBridge 事件
<a name="pause-hooks-eventbridge"></a>

Amazon ECS 會隨著暫停掛鉤的生命週期進行`ECS Hook State Change`，以詳細資訊類型發出 EventBridge 事件。下表說明事件名稱：


| 事件名稱 | 說明 | 
| --- | --- | 
| HOOK\_AWAITING\_ACTION | 勾點正在等待您呼叫 ContinueServiceDeployment。 | 
| HOOK\_SUCCEEDED | 勾點已成功完成 （您使用 ContinueServiceDeployment 呼叫 CONTINUE)。 | 
| HOOK\_FAILED | 勾點失敗 （您使用 呼叫 ContinueServiceDeployment ROLLBACK)。 | 
| 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"
    }
}
```