Detección de errores por el interruptor de circuito de implementación de Amazon ECS - Amazon Elastic Container Service

Detección de errores por el interruptor de circuito de implementación de Amazon ECS

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. 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 Creación de una regla de EventBridge 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.

  • 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 y create-service 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

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.

  2. 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

    • Servicio de AWS Cloud Map

    • 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 Threshold

1

3 <= 0.5 * 1 => 200
3 (el valor calculado es inferior al mínimo)

25

3 <= 0.5 * 25 => 200
13 (el valor se redondea hacia arriba)

400

3 <= 0.5 * 400 => 200
200

800

3 <= 0.5 * 800 => 200
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.