

# Detección de errores por el interruptor de circuito de implementación de Amazon ECS
<a name="deployment-circuit-breaker"></a>

El disyuntor de implementación es el mecanismo de actualización continua que determina si las tareas alcanzan un estado estable. El interruptor de implementación tiene una opción que revertirá automáticamente una implementación con errores a la implementación con el estado `COMPLETED`.

Cuando una implementación de servicio cambia de estado, Amazon ECS envía un evento de cambio de estado de implementación del servicio a EventBridge. Esto proporciona una forma programática de monitorear el estado de las implementaciones de servicios. Para obtener más información, consulte [Eventos de cambio de estado de implementación de servicios de Amazon ECS](ecs_service_deployment_events.md). Recomendamos que cree y supervise una regla de EventBridge con un `eventName` de `SERVICE_DEPLOYMENT_FAILED` para que pueda tomar medidas manuales para iniciar la implementación. Para obtener más información, consulte [Introducción a EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-get-started.html) en la *Guía del usuario de Amazon EventBridge*.

Cuando el disyuntor de implementación determina que una implementación tiene errores, este busca la implementación más reciente que se encuentre en un estado `COMPLETED`. Esta es la implementación que utiliza como implementación restaurada. Cuando se inicia la reversión, la implementación cambia de `COMPLETED` a `IN_PROGRESS`. Esto significa que la implementación no es apta para otra reversión hasta que alcance el estado `COMPLETED`. Cuando el disyuntor de implementación no encuentra ninguna implementación que esté en estado `COMPLETED`, no inicia nuevas tareas y la implementación se detiene. 

Al crear un servicio, el programador hace un seguimiento de las tareas que no se pudieron iniciar en dos etapas.
+ Fase 1: el programador supervisa las tareas para comprobar si pasan al estado EN EJECUCIÓN.
  + Éxito: la implementación tiene posibilidades de pasar al estado COMPLETADO porque hay más de una tarea que ha pasado al estado EN EJECUCIÓN. Se omite el criterio de fallo y el disyuntor pasa a la fase 2.
  + Error: Hay tareas consecutivas que no pasaron al estado EN EJECUCIÓN y es posible que la implementación pase al estado ERROR. 
+ Fase 2: la implementación entra en esta etapa cuando hay al menos una tarea en ejecución. El disyuntor comprueba las comprobaciones de estado de las tareas de la implementación actual que se están evaluando. Las comprobaciones de estado validadas son Elastic Load Balancing, las comprobaciones de estado del servicio AWS Cloud Map y las comprobaciones de estado de los contenedores. 
  + Correcto: hay al menos una tarea en ejecución cuyas comprobaciones de estado se han superado.
  + Error: Las tareas que se reemplazan debido a errores en las comprobaciones de estado han alcanzado el umbral de error.

Tenga en cuenta lo siguiente cuando utilice el método del interruptor de implementación en un servicio. EventBridge genera la regla.
+ La respuesta de `DescribeServices` proporciona información sobre el estado de una implementación, el `rolloutState` y el `rolloutStateReason`. Cuando se inicia una nueva implementación, el estado de despliegue comienza en el estado `IN_PROGRESS`. Cuando el servicio alcanza un estado estable, el estado de implementación pasa a `COMPLETED`. Si el servicio no alcanza un estado estable y el interruptor está activado, la implementación pasará al estado `FAILED`. Una implementación en estado `FAILED` no lanzará ninguna tarea nueva.
+ Además de los eventos de cambio de estado de implementación del servicio que Amazon ECS envía para implementaciones que se han iniciado y completado, Amazon ECS también envía un evento cuando falla una implementación con interruptor activado. Estos eventos proporcionan detalles acerca de por qué falló una implementación o si se inició debido a una restauración. Para obtener más información, consulte [Eventos de cambio de estado de implementación de servicios de Amazon ECS](ecs_service_deployment_events.md).
+ Si se inicia una nueva implementación porque se produjo un error en una implementación anterior y causó una restauración, el campo `reason` del evento de cambio de estado de implementación del servicio indica que la implementación se inició debido a una restauración.
+ El interruptor de implementación solo es compatible con los servicios de Amazon ECS que utilizan el controlador de implementación de actualización continua (`ECS`).
+ Debe utilizar la consola de Amazon ECS o la AWS CLI cuando utilice el interruptor de implementación con la opción CloudWatch. Para obtener más información, consulte [Creación de un servicio a partir de los parámetros definidos](create-service-console-v2.md#create-custom-service) y [create-service](https://docs.aws.amazon.com/cli/latest/reference/ecs/create-service.html) en la *Referencia de la AWS Command Line Interface*.

En los siguientes ejemplos de la AWS CLI de `create-service`, se muestra cómo crear un servicio de Linux cuando se usa el interruptor de implementación con la opción de restauración.

```
aws ecs create-service \
     --service-name MyService \
     --deployment-controller type=ECS \
     --desired-count 3 \
     --deployment-configuration "deploymentCircuitBreaker={enable=true,rollback=true}" \
     --task-definition sample-fargate:1 \
     --launch-type FARGATE \
     --platform-family LINUX \
     --platform-version 1.4.0 \
     --network-configuration "awsvpcConfiguration={subnets=[subnet-12344321],securityGroups=[sg-12344321],assignPublicIp=ENABLED}"
```

Ejemplo:

La implementación 1 está en estado `COMPLETED`.

La implementación 2 no puede iniciarse, por lo que el disyuntor vuelve a la implementación 1. La implementación 1 pasa al estado `IN_PROGRESS`.

La implementación 3 se inicia y no hay ninguna implementación en estado `COMPLETED`, por lo que la implementación 3 no puede revertir ni iniciar tareas. 

## Failure threshold
<a name="failure-threshold"></a>

El disyuntor de despliegue calcula el valor umbral y, a continuación, lo utiliza para determinar cuándo mover la implementación a un estado `FAILED`.

El disyuntor de implementación tiene un umbral mínimo de 3 y un umbral máximo de 200, y utiliza los valores de la siguiente fórmula para determinar el error de implementación.

```
Minimum threshold <= 0.5 * desired task count => maximum threshold
```

Cuando el resultado del cálculo es superior al mínimo de 3, pero inferior al máximo de 200, el umbral de error se establece en el umbral calculado (redondeado al alza).

**nota**  
No se puede cambiar ninguno de los valores de umbral.

Hay dos etapas para la comprobación del estado de la implementación.

1. El disyuntor de despliegue supervisa las tareas que forman parte de la implementación y comprueba las tareas que se encuentran en el estado `RUNNING`. El programador ignora los criterios de error cuando una tarea de la implementación actual se encuentra en el estado `RUNNING` y pasa a la siguiente etapa. Cuando las tareas no alcanzan en el estado `RUNNING`, el disyuntor de implementación aumenta el recuento de error en uno. Cuando el recuento de errores es igual al umbral, la implementación se marca como `FAILED`.

1. Se entra en esta etapa cuando hay una o más tareas en el estado `RUNNING`. El disyuntor de implementación realiza comprobaciones de estado de los siguientes recursos para las tareas de la implementación actual:
   + Balanceadores de carga de Elastic Load Balancing
   + AWS Cloud MapServicio de 
   + Comprobaciones de estado de los contenedores de Amazon ECS

   Cuando falla una comprobación de estado de la tarea, el disyuntor de implementación aumenta el recuento de errores en uno. Cuando el recuento de errores es igual al umbral, la implementación se marca como `FAILED`.

La siguiente tabla muestra algunos ejemplos.


| Recuento deseado de tareas | Cálculo | Umbral | 
| --- | --- | --- | 
|  1  |  <pre>3 <= 0.5 * 1 => 200</pre>  | 3 (el valor calculado es inferior al mínimo) | 
|  25  |  <pre>3 <= 0.5 * 25 => 200</pre>  | 13 (el valor se redondea hacia arriba) | 
|  400  |  <pre>3 <= 0.5 * 400 => 200</pre>  | 200 | 
|  800  |  <pre>3 <= 0.5 * 800 => 200</pre>  | 200 (el valor calculado es mayor que el máximo) | 

Por ejemplo, cuando el umbral es 3, el disyuntor comienza con el recuento de fallos establecido en 0. Cuando una tarea no alcanza el estado `RUNNING`, el disyuntor de implementación aumenta el recuento de error en uno. Cuando el recuento de errores es igual 3, la implementación se marca como `FAILED`.

Para obtener más ejemplos acerca de cómo usar la opción de restauración, consulte [Anuncio del interruptor de cirtcuito de implementación de Amazon ECS](https://aws.amazon.com/blogs/containers/announcing-amazon-ecs-deployment-circuit-breaker/).