

# Enlaces de pausa para implementaciones de servicios de Amazon ECS
<a name="pause-lifecycle-hooks"></a>

Los enlaces de pausa pausan una implementación de servicio de Amazon ECS en una etapa específica del ciclo de vida y esperan a que se llame a `ContinueServiceDeployment` antes de que avance la implementación. Use enlaces de pausa cuando se requiera aprobación manual o validación externa antes de que continúe una implementación.

## Cómo funcionan los enlaces de pausa
<a name="pause-hooks-how-they-work"></a>

Cuando una implementación llega a una etapa del ciclo de vida que tiene configurado un enlace de pausa, ocurre lo siguiente:

1. Amazon ECS genera un `hookId` único para el enlace de pausa.

1. Amazon ECS emite un evento de EventBridge con el tipo de detalle `ECS Hook State Change` y el nombre de evento `HOOK_AWAITING_ACTION`.

1. La implementación permanece en pausa hasta que se llama a `ContinueServiceDeployment` con el `hookId` y una acción de`CONTINUE` o `ROLLBACK`, o hasta que se alcance el tiempo máximo de espera configurado.

El `hookId` se puede obtener mediante una llamada a `DescribeServiceDeployments`. La respuesta incluye una matriz `lifecycleHookDetails` con el estado del enlace.

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

## Configuración de enlaces de pausa
<a name="pause-hooks-configuring"></a>

En el siguiente ejemplo, se muestra una configuración de enlace de pausa en una definición de servicio que pausa la implementación después de que se completa el cambio de tráfico de prueba:

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

### Campos de configuración
<a name="pause-hooks-configuration-fields"></a>


| Campo | Descripción | Valores válidos | Obligatorio | 
| --- | --- | --- | --- | 
| targetType | Tipo de enlace. Debe ser PAUSE para los enlaces de pausa. | PAUSE | Sí | 
| lifecycleStages | Las etapas del ciclo de vida en las que se pausa la implementación. | RECONCILE\_SERVICE, PRE\_SCALE\_UP, POST\_SCALE\_UP, POST\_TEST\_TRAFFIC\_SHIFT, PRE\_PRODUCTION\_TRAFFIC\_SHIFT, POST\_PRODUCTION\_TRAFFIC\_SHIFT | Sí | 
| timeoutConfiguration.timeoutInMinutes | Tiempo máximo de espera antes de ejecutar la acción configurada. Valor predeterminado: 1440 minutos (24 horas). | De 1 a 20 160 (14 días) | No | 
| timeoutConfiguration.action | Acción que se realizará si vence el tiempo máximo de espera. | ROLLBACK (predeterminado), CONTINUE | No | 

## Restricciones
<a name="pause-hooks-constraints"></a>
+ Se puede configurar un máximo de 10 enlaces de pausa y 10 enlaces de Lambda por servicio.
+ Los enlaces de pausa no usan `hookTargetArn` ni `roleArn`. Estos campos son exclusivos de los enlaces de Lambda.
+ Los enlaces de pausa no se pueden configurar en las etapas `TEST_TRAFFIC_SHIFT` ni `PRODUCTION_TRAFFIC_SHIFT`.

## Continuación de una implementación en pausa
<a name="pause-hooks-continuing"></a>

Cuando una implementación está en pausa, es decir, cuando el estado del enlace de pausa es `AWAITING_ACTION`, se debe llamar a `ContinueServiceDeployment` con `hookId` y la acción que se desea realizar.

Para continuar la implementación:

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

Para revertir la implementación:

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

Para obtener más información, consulte [Continuación de implementaciones de servicios](continue-service-deployment.md).

## Varios enlaces en la misma etapa
<a name="pause-hooks-multiple-at-same-stage"></a>

Cuando se configuran varios enlaces en la misma etapa del ciclo de vida, la implementación permanece en pausa hasta que se aplique la acción de continuar a todos los enlaces de esa etapa. Si algún enlace activa una reversión, se revierte toda la implementación, independientemente del estado de los demás enlaces en esa etapa.

Este comportamiento se aplica cuando los enlaces de Lambda y los enlaces de pausa se configuran en la misma etapa del ciclo de vida. La implementación solo avanza cuando todos los enlaces de esa etapa se han completado correctamente o se les ha aplicado la acción de continuar.

Todos los enlaces configurados en la misma etapa del ciclo de vida se ejecutan en paralelo.

## Comportamiento de los tiempos de espera
<a name="pause-hooks-timeout"></a>

Si no se llama a `ContinueServiceDeployment` antes de que venza el tiempo máximo de espera, Amazon ECS ejecuta la acción de tiempo de espera configurada:
+ `ROLLBACK` (predeterminado): Amazon ECS revierte la implementación a la revisión de servicio anterior.
+ `CONTINUE`: Amazon ECS continúa la implementación hasta la siguiente etapa del ciclo de vida.

Consulte el campo `expiresAt` de la matriz `lifecycleHookDetails` en la respuesta de `DescribeServiceDeployments` para ver cuándo vence el tiempo máximo de espera.

## Enlaces de pausa con implementaciones lineales y canario
<a name="pause-hooks-linear-canary"></a>

En las implementaciones lineales y canario, los enlaces de pausa configurados en `PRE_PRODUCTION_TRAFFIC_SHIFT` se invocan en cada paso de cambio de tráfico. Cada invocación genera un `hookId` único y se debe llamar a `ContinueServiceDeployment` para cada una.

Por ejemplo, una implementación lineal con 5 pasos de cambio de tráfico y un enlace de pausa en `PRE_PRODUCTION_TRAFFIC_SHIFT` se pausa 5 veces, una vez antes de cada paso. Cada pausa requiere una llamada independiente a `ContinueServiceDeployment` con el `hookId` correspondiente.

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

Amazon ECS emite eventos de EventBridge con el tipo de detalle `ECS Hook State Change` a medida que los enlaces de pausa avanzan por su ciclo de vida. En la siguiente tabla, se describen los nombres de los eventos:


| Nombre de evento | Descripción | 
| --- | --- | 
| HOOK\_AWAITING\_ACTION | El enlace está a la espera de que se llame a ContinueServiceDeployment. | 
| HOOK\_SUCCEEDED | El enlace se completó correctamente, es decir, se llamó a ContinueServiceDeployment con CONTINUE. | 
| HOOK\_FAILED | El enlace falló, es decir, se llamó a ContinueServiceDeployment con ROLLBACK. | 
| HOOK\_TIMED\_OUT | El enlace alcanzó el tiempo máximo de espera antes de que se llamara a ContinueServiceDeployment. | 

En el siguiente ejemplo, se muestra un evento de EventBridge emitido cuando un enlace de pausa está a la espera de acción:

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