Actualización de los parámetros de servicio de Amazon ECS - Amazon Elastic Container Service

Actualización de los parámetros de servicio de Amazon ECS

Después de crear un servicio, hay ocasiones en las que puede que necesite actualizar sus parámetros, por ejemplo, el número de tareas.

Cuando el programador de servicios lanza nuevas tareas, determina la ubicación de ellas en el clúster con la siguiente lógica.

  • Determine cuál de las instancias de contenedor de su clúster puede admitir la definición de tarea de su servicio. Por ejemplo, si tienen la CPU, la memoria, los puertos y los atributos de instancia de contenedor requeridos.

  • De forma predeterminada, el programador de servicios intenta equilibrar las tareas entre las zonas de disponibilidad de esta manera, aunque puede elegir una estrategia de ubicación diferente.

    • Ordene las instancias de contenedor válidas por el número menor de tareas en ejecución para este servicio en la misma zona de disponibilidad que la instancia. Por ejemplo, si la zona A tiene una tarea de servicio en ejecución y las zonas B y C tienen cero cada una, las instancias de contenedor válidas en la zona B o C se consideran óptimas para colocación.

    • Coloque la nueva tarea de servicio en una instancia de contenedor válida en una zona de disponibilidad óptima (basada en los pasos anteriores), favoreciendo las instancias de contenedor con el número más bajo de tareas en ejecución para este servicio.

Cuando el programador de servicios detiene las tareas en ejecución, intenta mantener un balance entre las zonas de disponibilidad del clúster usando la siguiente lógica:

  • Ordene las instancias de contenedor por el número mayor de tareas en ejecución para este servicio en la misma zona de disponibilidad que la instancia. Por ejemplo, si la zona A tiene una tarea de servicio en ejecución y las zonas B y C tienen dos cada una, las instancias de contenedor en la zona B o C se consideran óptimas para terminación.

  • Pare la tarea en una instancia de contenedor en una zona de disponibilidad óptima (basada en los pasos anteriores), favoreciendo las instancias de contenedor con el número mayor de tareas en ejecución para este servicio.

Use la lista para determinar si puede cambiar el parámetro de servicio.

Reequilibrio de zona de disponibilidad

Indica si se debe utilizar el reequilibrio de zonas de disponibilidad para el servicio.

Puede cambiar este parámetro para las implementaciones continuas.

Estrategia de proveedores de capacidad

Los detalles de una estrategia de proveedor de capacidad. Puede establecer un proveedor de capacidad cuando crea un clúster, ejecuta una tarea o actualiza un servicio.

Cuando usa Fargate, los proveedores de capacidad son FARGATE o FARGATE_SPOT.

Cuando utiliza Amazon EC2, los proveedores de capacidad son grupos de escalado automático.

Puede cambiar los proveedores de capacidad para implementaciones continuas e implementaciones azul/verde.

En la siguiente lista, se indican las transiciones válidas:

  • Actualización del tipo de lanzamiento de Fargate a un proveedor de capacidad de grupos de escalado automático.

  • Actualización del tipo de lanzamiento de Amazon EC2 a un proveedor de capacidad de Fargate.

  • Actualización del proveedor de capacidad de Fargate a un proveedor de capacidad de grupo de escalado automático.

  • Actualización del proveedor de capacidad de Amazon EC2 a un proveedor de capacidad de Fargate.

  • Actualización del grupo de escalado automático o el proveedor de capacidad de Fargate de vuelta al tipo de lanzamiento. Cuando usa la CLI o la API, pasa una lista vacía en el parámetro capacityProviderStrategy.

Clúster

No puede modificar el nombre del clúster.

Configuración de implementación

La configuración de implementación incluye las alarmas de CloudWatch y el disyuntor utilizados para detectar fallos, así como la configuración requerida.

El disyuntor de implementación determina si una implementación de servicio fallará cuando el servicio no pueda alcanzar un estado estable. Si usa el disyuntor de implementación, una implementación de servicio pasará a un estado fallido y dejará de iniciar nuevas tareas. Si usa la opción de restauración, cuando se produce un error en la implementación de un servicio, este se restaura a la última implementación que se haya completado de forma correcta.

Cuando actualiza un servicio que utiliza un interruptor de Amazon ECS, Amazon ECS crea una implementación y una revisión de servicios. Estos recursos le permiten ver información detallada sobre el historial del servicio. Para obtener más información, consulte Visualización del historial de servicios mediante las implementaciones de servicios de Amazon ECS.

El programador de servicio utiliza los parámetros de porcentaje máximo y porcentaje mínimo en buen estado (en la configuración de implementación del servicio) para determinar la estrategia de implementación.

Si un servicio utiliza el tipo de implementación de actualizaciones continuas (ECS), el porcentaje mínimo en buen estado representa un límite inferior en el número de las tareas en un servicio que deben permanecer en el estado RUNNING durante una implementación, como un porcentaje del número de tareas deseado (redondeado al entero superior más próximo). El parámetro también se aplica mientras haya instancias de contendedor en el estado DRAINING si el servicio contiene tareas que utilizan el tipo de lanzamiento de EC2. Utilice este parámetro para efectuar implementaciones sin utilizar capacidad de clúster adicional. Por ejemplo, si su servicio tiene un número deseado de cuatro tareas y un porcentaje mínimo de estado del 50 %, el programador puede detener dos tareas existentes para liberar la capacidad del clúster antes de iniciar dos nuevas tareas. El servicio considera que las tareas están en buen estado para servicios que no utilizan un equilibrador de carga si están en el estado RUNNING. El servicio considera que las tareas están en buen estado para servicios que no usan un equilibrador de carga si están en el estado RUNNING y el equilibrador de carga notifica que están en buen estado. El valor predeterminado del porcentaje mínimo de estado es el 100 %.

Si un servicio utiliza el tipo de implementación de actualizaciones continuas (ECS), el parámetro porcentaje máximo representa un límite superior en el número de las tareas en un servicio que pueden permanecer en el estado PENDING, RUNNING o STOPPING durante una implementación, como un porcentaje del número de tareas deseado (redondeado al entero inferior más próximo). El parámetro también se aplica mientras haya instancias de contendedor en el estado DRAINING si el servicio contiene tareas que utilizan el tipo de lanzamiento de EC2. Utilice este parámetro para definir el tamaño del lote de implementación. Por ejemplo, si su servicio tiene un número deseado de cuatro tareas y un valor porcentual máximo del 200 %, el programador puede iniciar cuatro nuevas tareas antes de detener las cuatro más antiguas. Esto es siempre que los recursos del clúster requeridos para hacer esto estén disponibles. El valor predeterminado para el porcentaje máximo es el 200 %.

Cuando el programador de servicio sustituye una tarea durante una actualización, el servicio elimina primero la tarea del balanceador de carga (si se usa) y espera a que las conexiones se vacíen. A continuación, se emite el equivalente de docker stop a los contenedores que ejecutan la tarea. Esto da lugar a una señal SIGTERM y a un tiempo de espera de 30 segundos, tras el cual se envía SIGKILL y los contenedores se paran por la fuerza. Si el contenedor gestiona la señal SIGTERM correctamente y sale antes de los 30 segundos de haberla recibido, no se envía la señal SIGKILL. El programador de servicio inicia y para tareas definidas por la configuración de porcentaje en buen estado mínimo y porcentaje máximo.

El programador de servicios también reemplaza las tareas que se determina que están en mal estado después de que se produzca un error en una comprobación de estado del contenedor o en una comprobación de estado del grupo objetivo del equilibrador de cargas. Este reemplazo depende de los parámetros de definición del servicio maximumPercent y desiredCount. Si una tarea está marcada como en mal estado, el programador de servicios iniciará primero una tarea de reemplazo. Luego, ocurrirá lo siguiente.

  • Si la tarea de reemplazo tiene un estado de HEALTHY, el programador de servicios detiene la tarea en mal estado.

  • Si la tarea de reemplazo tiene un estado de UNHEALTHY, el programador detendrá la tarea de reemplazo en mal estado o la tarea existente en mal estado para igualar el recuento total de tareas en desiredCount.

Si el parámetro maximumPercent impide que el programador inicie primero una tarea de reemplazo, detendrá las tareas en mal estado de forma aleatoria de una en una para liberar capacidad y, a continuación, iniciará una tarea de reemplazo. El proceso de inicio y parada continúa hasta que todas las tareas en mal estado se sustituyan por tareas en buen estado. Una vez que se hayan reemplazado todas las tareas en mal estado y solo se estén ejecutando las tareas en buen estado, si el recuento total de tareas supera el límite de desiredCount, las tareas en buen estado se detienen aleatoriamente hasta que el recuento total de tareas sea igual a desiredCount. Para obtener más información sobre maximumPercent y desiredCount, consulte Parámetros de definición de servicios.

Recuento deseado de tareas

El número de instancias de la tarea para ubicar y seguir ejecutando en el servicio.

Si desea detener temporalmente el servicio, establezca este valor en 0. A continuación, cuando lo tenga todo listo para iniciar el servicio, actualícelo con el valor original.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Habilitación de las etiquetas administradas

Determina si se activan las etiquetas administradas por Amazon ECS para las tareas del servicio.

Solo reflejarán la actualización las tareas iniciadas después de que se realice. Para actualizar las etiquetas de todas las tareas, use la opción de implementación forzada.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Habilitación de ECS Exec

Determina si se utiliza Amazon ECS Exec.

Si no desea anular el valor que se estableció cuando se creó el servicio, puede establecerlo en “null” al realizar esta acción.

Puede cambiar este parámetro para las implementaciones continuas.

Periodo de gracia de la comprobación de estado

El periodo de tiempo, en segundos, que el programador de servicio de Amazon ECS ignora las comprobaciones de estado en mal estado de Elastic Load Balancing, VPC Lattice y del contenedor después de que se haya iniciado una tarea por primera vez. Si no se especifica ningún valor para el periodo de gracia de comprobación de estado, se utiliza el valor predeterminado 0. Si no se utiliza ninguna de las comprobaciones de estado, entonces healthCheckGracePeriodSeconds no se utilizará.

Si las tareas del servicio tardan mucho en iniciarse y en responder a las comprobaciones de estado, se puede especificar un periodo de gracia de hasta 2 147 483 647 segundos (aproximadamente 69 años). Durante este periodo, el programador de servicio de Amazon ECS hará caso omiso del resultado de las comprobaciones de estado. Este periodo de gracia puede evitar que el programador de servicio interprete que las tareas están en mal estado y las detenga antes de que tengan tiempo de iniciarse.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Equilibradores de carga

Debe utilizar un rol vinculado a un servicio al actualizar un equilibrador de carga.

Una lista de objetos de equilibrador de carga de Elastic Load Balancing. Contiene el nombre del equilibrador de carga, el nombre del contenedor y el puerto del contenedor para acceder desde el equilibrador de carga. El nombre del contenedor es el que aparece en una definición de contenedor.

Amazon ECS no actualiza automáticamente los grupos de seguridad asociados a los balanceadores de carga de Elastic Load Balancing ni a las instancias de contenedor de Amazon ECS.

Cuando agrega, actualiza o elimina una configuración de equilibrador de carga, Amazon ECS inicia nuevas tareas con la configuración actualizada de Elastic Load Balancing y detiene las tareas antiguas cuando se ejecutan las nuevas.

Para los servicios que utilizan actualizaciones continuas, puede agregar, actualizar o eliminar grupos de destino de Elastic Load Balancing. Puede actualizar de un único grupo de destino a varios grupos de destino y de varios grupos de destino a un único grupo de destino.

Para los servicios que utilizan implementaciones azul/verde, puede actualizar los grupos de destino de Elastic Load Balancing mediante CreateDeployment a través de CodeDeploy. Tenga en cuenta que no se admiten varios grupos de destino en las implementaciones azul/verde. Para obtener más información, consulte Registrar varios grupos de destino con un servicio.

Para los servicios que utilizan el controlador de implementación externo, puede agregar, actualizar o eliminar equilibradores de carga mediante CreateTaskSet. Tenga en cuenta que no se admiten varios grupos de destino en las implementaciones externas. Para obtener más información, consulte Registrar varios grupos de destino con un servicio.

Pase una lista vacía para eliminar los equilibradores de carga.

Puede cambiar este parámetro para las implementaciones continuas.

Configuración de red

La configuración de red del servicio.

Puede cambiar este parámetro para las implementaciones continuas.

Restricciones para la ubicación

Una matriz de objetos de restricción de ubicación de la tarea para actualizar el servicio que se usará. Si no se especifica ningún valor, las restricciones de ubicación existentes para el servicio permanecerán sin cambios. Si se especifica este valor, anulará cualquier restricción de ubicación existente definida para el servicio. Para eliminar todas las restricciones de ubicación existentes, especifique una matriz vacía.

Puede especificar 10 restricciones como máximo para cada tarea. Este límite incluye las restricciones en la definición de tareas y las especificadas en el tiempo de puesta en marcha.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Estrategias de ubicación

Los objetos de la estrategia de colocación de tareas para actualizar el servicio que se usará. Si no se especifica ningún valor, la estrategia de ubicación existente para el servicio permanecerá sin cambios. Si se especifica este valor, anulará la estrategia de ubicación existente definida para el servicio. Para eliminar una estrategia de ubicación existente, especifique un objeto vacío.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Versión de la plataforma

La versión de la plataforma Fargate en la que se ejecuta su servicio.

Un servicio que utiliza una versión de la plataforma Linux no se puede actualizar para utilizar una versión de la plataforma Windows y viceversa.

Puede cambiar este parámetro para las implementaciones continuas.

Propagación de etiquetas

Determina si se deben propagar las etiquetas de la definición de tareas o el servicio para la tarea. Si no se especifica ningún valor, las etiquetas no se propagan.

Solo reflejarán la actualización las tareas iniciadas después de que se realice. Para actualizar las etiquetas de todas las tareas, configure forceNewDeployment en true, de modo que Amazon ECS inicie nuevas tareas con las etiquetas actualizadas.

Puede cambiar este parámetro para las implementaciones continuas y las implementaciones azul/verde.

Configuración de Service Connect

La configuración de Amazon ECS Service Connect. Este parámetro determina cómo se conecta el servicio a otros servicios de la aplicación.

Puede cambiar este parámetro para las implementaciones continuas.

Registros de servicios

Debe utilizar un rol vinculado a un servicio al actualizar los registros de servicios.

Los detalles de los registros de detección de servicios que se deben asignar a este servicio. Para obtener más información, consulte Detección de servicios.

Cuando agrega, actualiza o elimina la configuración de los registros de servicio, Amazon ECS inicia nuevas tareas con la configuración actualizada de los registros de servicio y detiene las tareas antiguas cuando se ejecutan las nuevas.

Pase una lista vacía para eliminar los registros de servicios.

Puede cambiar este parámetro para las implementaciones continuas.

Definición de tarea

La definición y la revisión de la tarea que se va a utilizar en el servicio.

Si cambia los puertos utilizados por los contenedores en una definición de tarea, es posible que tenga que actualizar los grupos de seguridad de las instancias del contenedor para que funcionen con los puertos actualizados.

Si actualiza la definición de la tarea del servicio, el nombre y el puerto del contenedor que se especificaron en la configuración del equilibrador de carga deben permanecer en la definición de la tarea.

El comportamiento de extracción de imágenes del contenedor varía según el tipo de lanzamiento. Para obtener más información, consulte una de las siguientes:

Puede cambiar este parámetro para las implementaciones continuas.

Configuraciones de volúmenes

Los detalles del volumen que era configuredAtLaunch. Cuando se establece como verdadero, este parámetro configura la asociación de tareas de Amazon EBS durante la implementación. Puede configurar el tamaño, el volumeType, el IOPS, el rendimiento, las instantáneas y el cifrado en ServiceManagedEBSVolumeConfiguration. El name del volumen debe coincidir con el name de la definición de la tarea. Si se establece como nulo, no se activa ninguna nueva implementación. De lo contrario, si esta configuración difiere de la existente, se activa una nueva implementación.

Puede cambiar este parámetro para las implementaciones continuas.

Configuración de VPC Lattice

La configuración de VPC Lattice para su servicio. Esto define la forma en que su servicio se integra con VPC Lattice para la comunicación de servicio a servicio.

Puede cambiar este parámetro para las implementaciones continuas.

Consideraciones sobre AWS CDK

El AWS CDK no rastrea los estados de los recursos. No sabe si está creando o actualizando un servicio. Los clientes deben usar la escotilla de escape para acceder directamente al constructo ecs Service L1.

Para obtener información sobre las escotillas de escape, consulte Personalice los constructos desde la Biblioteca de constructos de AWS en la Guía para desarrolladores de AWS Cloud Development Kit (AWS CDK) v2.

Para migrar su servicio existente al constructo ecs.Service, haga lo siguiente:

  1. Use la escotilla de escape para acceder al constructo Service L1.

  2. Establezca manualmente las siguientes propiedades en el constructo Service L1.

    Si su servicio utiliza capacidad de Amazon EC2:

    • daemon?

    • placementConstraints?

    • placementStrategies?

    • Si utiliza el modo de red awsvpc, debe configurar los constructos vpcSubnets? y securityGroups?.

    Si su servicio usa Fargate:

    • FargatePlatformVersion

    • Los constructos vpcSubnets? y securityGroups?.

  3. Configure el launchType como se indica a continuación:

    const cfnEcsService = service.node.findChild('Service') as ecs.CfnService; cfnEcsService.launchType = "FARGATE";

Para migrar de un tipo de lanzamiento a un proveedor de capacidad, haga lo siguiente:

  1. Use la escotilla de escape para acceder al constructo Service L1.

  2. Agregue el constructo capacityProviderStrategies?.

  3. Implemente el servicio.