

# Ganchos de pausa para implantações de serviços do Amazon ECS
<a name="pause-lifecycle-hooks"></a>

Os ganchos de pausa pausam a implantação de um serviço do Amazon ECS em um estágio específico do ciclo de vida e aguardam que você chame `ContinueServiceDeployment` antes que a implantação continue. Use ganchos de pausa quando precisar de aprovação manual ou validação externa antes que a implantação continue.

## Como os ganchos de pausa funcionam
<a name="pause-hooks-how-they-work"></a>

Quando uma implantação atinge um estágio do ciclo de vida com um gancho de pausa configurado, o seguinte acontece:

1. O Amazon ECS gera um `hookId` exclusivo para o gancho de pausa.

1. O Amazon ECS emite um evento do EventBridge com o tipo de detalhe `ECS Hook State Change` e o nome de evento `HOOK_AWAITING_ACTION`.

1. A implantação permanece pausada até que você chame `ContinueServiceDeployment` com o `hookId` e uma ação de `CONTINUE` ou `ROLLBACK`, ou até que o tempo limite configurado seja atingido.

Você pode recuperar o `hookId` chamando `DescribeServiceDeployments`. A resposta inclui uma matriz `lifecycleHookDetails` com o status do gancho:

```
{
    "serviceDeployments": [
        {
            "lifecycleHookDetails": [
                {
                    "hookId": "ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw",
                    "targetType": "PAUSE",
                    "status": "AWAITING_ACTION",
                    "expiresAt": "2024-01-15T12:00:00Z",
                    "timeoutAction": "ROLLBACK"
                }
            ]
        }
    ]
}
```

## Como configurar ganchos de pausa
<a name="pause-hooks-configuring"></a>

O exemplo a seguir mostra uma configuração de gancho de pausa em uma definição de serviço que pausa a implantação após a conclusão da mudança de tráfego de teste:

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

### Campos de configuração
<a name="pause-hooks-configuration-fields"></a>


| Campo | Descrição | Valores válidos | Obrigatório | 
| --- | --- | --- | --- | 
| targetType | O tipo de gancho. Precisa ser PAUSE para ganchos de pausa. | PAUSE | Sim | 
| lifecycleStages | Os estágios do ciclo de vida nos quais a implantação é pausada. | RECONCILE\_SERVICE, PRE\_SCALE\_UP, POST\_SCALE\_UP, POST\_TEST\_TRAFFIC\_SHIFT, PRE\_PRODUCTION\_TRAFFIC\_SHIFT, POST\_PRODUCTION\_TRAFFIC\_SHIFT | Sim | 
| timeoutConfiguration.timeoutInMinutes | Quanto tempo esperar antes de executar a ação de tempo limite. Padrão: 1.440 minutos (24 horas). | 1 a 20.160 (14 dias) | Não | 
| timeoutConfiguration.action | A ação a ser executada se o tempo limite expirar. | ROLLBACK (padrão), CONTINUE | Não | 

## Restrições
<a name="pause-hooks-constraints"></a>
+ É possível configurar no máximo 10 ganchos de pausa e 10 ganchos do Lambda por serviço.
+ Os ganchos de pausa não usam `hookTargetArn` ou `roleArn`. Esses campos são somente para ganchos do Lambda.
+ Não é possível configurar os ganchos de pausa nos estágios `TEST_TRAFFIC_SHIFT` ou `PRODUCTION_TRAFFIC_SHIFT`.

## Continuando uma implantação pausada
<a name="pause-hooks-continuing"></a>

Quando uma implantação estiver pausada (o status do gancho de pausa for `AWAITING_ACTION`), chame `ContinueServiceDeployment` com `hookId` e a ação que deseja executar.

Para continuar a implantação:

```
aws ecs continue-service-deployment \
    --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \
    --action CONTINUE
```

Para reverter a implantação:

```
aws ecs continue-service-deployment \
    --hook-id ecs-pause-e7tK9G_WRJqNF_EOMjztDXfKenlJuEUVjsNStf4WLKw \
    --action ROLLBACK
```

Para obter mais informações, consulte [Implantações de serviços contínuos](continue-service-deployment.md).

## Vários ganchos no mesmo estágio
<a name="pause-hooks-multiple-at-same-stage"></a>

Quando vários ganchos são configurados no mesmo estágio do ciclo de vida, a implantação permanece pausada até que todos os ganchos desse estágio continuem. Se algum gancho acionar uma reversão, a implantação inteira será revertida, independentemente do status dos outros ganchos nesse estágio.

Esse comportamento se aplica quando os ganchos do Lambda e os ganchos de pausa são configurados no mesmo estágio do ciclo de vida. A implantação só prossegue quando todos os ganchos nesse estágio tiverem sido concluídos com êxito ou continuados.

Todos os ganchos configurados no mesmo estágio do ciclo de vida funcionam paralelamente.

## Comportamento do tempo limite
<a name="pause-hooks-timeout"></a>

Se você não chamar `ContinueServiceDeployment` antes do tempo limite expirar, o Amazon ECS executará a ação de tempo limite configurada:
+ `ROLLBACK` (padrão): o Amazon ECS reverte a implantação para a revisão de serviço anterior.
+ `CONTINUE`: o Amazon ECS continua a implantação até o próximo estágio do ciclo de vida.

Verifique o campo `expiresAt` na matriz `lifecycleHookDetails` da resposta `DescribeServiceDeployments` para ver quando o tempo limite expira.

## Ganchos de pausa com implantações lineares e de canário
<a name="pause-hooks-linear-canary"></a>

Para implantações lineares e de canário, os ganchos de pausa configurados em `PRE_PRODUCTION_TRAFFIC_SHIFT` são invocados em cada etapa de mudança de tráfego. Cada invocação gera um `hookId` exclusivo e você precisa chamar `ContinueServiceDeployment` para cada um.

Por exemplo, uma implantação linear com 5 etapas de mudança de tráfego e um gancho de pausa em `PRE_PRODUCTION_TRAFFIC_SHIFT` realiza 5 pausas, uma antes de cada etapa. Cada pausa requer uma chamada separada para `ContinueServiceDeployment` com o `hookId` correspondente.

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

O Amazon ECS emite eventos do EventBridge com o tipo de detalhe `ECS Hook State Change` conforme os ganchos de pausa avançam em seu ciclo de vida. A tabela a seguir descreve os nomes de evento:


| Nome do evento | Descrição | 
| --- | --- | 
| HOOK\_AWAITING\_ACTION | O gancho está esperando você chamar ContinueServiceDeployment. | 
| HOOK\_SUCCEEDED | O gancho foi concluído com sucesso (você chamou ContinueServiceDeployment com CONTINUE). | 
| HOOK\_FAILED | O gancho falhou (você chamou ContinueServiceDeployment com ROLLBACK). | 
| HOOK\_TIMED\_OUT | O gancho atingiu o tempo limite antes de ContinueServiceDeployment ser chamado. | 

O exemplo a seguir mostra um evento do EventBridge emitido quando um gancho de pausa está aguardando ação:

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