Creación de una implementación azul/verde de Amazon ECS - Amazon Elastic Container Service

Creación de una implementación azul/verde de Amazon ECS

Con las implementaciones azul/verde de Amazon ECS, puede realizar y comprobar cambios en el servicio antes de implementarlos en un entorno de producción.

Requisitos previos

Realice las siguientes operaciones antes de iniciar una implementación azul/verde.

  1. Configure los permisos adecuados.

  2. Las implementaciones azul/verde de Amazon ECS requieren que su servicio utilice una de las siguientes características: configure los recursos adecuados.

  3. Cree una regla para enrutar el tráfico a la revisión de su servicio verde. Para más información, consulte Reglas de oyente en la Guía del usuario de equilibradores de carga de red.

  4. Cree un grupo de destino para la revisión de servicio verde. Cuando utilice el modo de red awsvpc para sus tareas, el tipo de destino debe ser ip. Para más información, consulte Grupos de destino en la Guía del usuario de equilibradores de carga de red.

  5. Decida si quiere ejecutar las funciones de Lambda para los eventos del ciclo de vida.

    • Antes de escalar verticalmente

    • Después de escalar verticalmente

    • Transferencia de tráfico de prueba

    • Después de la transferencia de tráfico de prueba

    • Transferencia de tráfico de producción

    • Después de la transferencia de tráfico de producción

    Cree funciones de Lambda para cada evento del ciclo de vida. Para más información, consulte Cree una función de Lambda con la consola en la Guía para desarrolladores de AWS Lambda.

Procedimiento

Puede utilizar la consola o la AWS CLI para crear un servicio azul/verde de Amazon ECS.

Console
  1. Abra la consola en https://console.aws.amazon.com/ecs/v2.

  2. Determine el recurso desde el que lanza el servicio.

    Para iniciar un servicio desde Pasos

    Clústeres

    1. En la página Clusters (Clústeres), seleccione el clúster que va a crear el servicio.

      Aparecerá la página de detalles del clúster.

    2. En la pestaña Services (Servicios), elija Create (Crear).

    Definición de tarea
    1. En la página Definiciones de tareas, seleccione la definición de tarea.

    2. En el menú Implementar, elija Crear servicio.

    Aparecerá la página Crear servicio.

  3. En Detalles del servicio, haga lo siguiente:

    1. En Familia de definiciones de tareas, elija la definición de tarea que se va a utilizar. A continuación, en Revisión de la definición de tareas, introduzca la revisión que desee utilizar.

    2. En Service name (Nombre del servicio), ingrese un nombre para el servicio.

  4. Para ejecutar el servicio en un clúster existente, en Clúster existente, elija el clúster. Para ejecutar el servicio en un clúster nuevo, seleccione Crear clúster

  5. Elija cómo distribuir las tareas en la infraestructura de clúster. En Configuración de computación, elija su opción.

    Opción de computación Pasos

    Estrategia de proveedores de capacidad

    1. En Opciones de computación, elija Estrategia del proveedor de capacidad.

    2. Elija una estrategia:

      • Para utilizar la estrategia de proveedores de capacidad predeterminada del clúster, elija Use cluster default (Usar clúster predeterminado).

      • Si el clúster no tiene ninguna estrategia de proveedores de capacidad predeterminada o si desea utilizar una estrategia personalizada, elija Utilizar predeterminada, Agregar estrategia de proveedores de capacidad y, luego, defina la estrategia de proveedores de capacidad personalizada especificando una Base, Proveedor de capacidad y Peso.

    nota

    Para utilizar un proveedor de capacidad en una estrategia, el proveedor de capacidad debe estar asociado con el clúster.

    Tipo de lanzamiento
    1. En la sección Compute options (Opciones de computación), seleccione Lauch type (Tipo de lanzamiento).

    2. En Launch type (Tipo de lanzamiento), elija un tipo de lanzamiento.

    3. (Opcional) Cuando se especifica el tipo de lanzamiento de Fargate, en Platform version (Versión de la plataforma) especifique la versión de la plataforma que se va a utilizar. Si no se especifica una versión de la plataforma, se utilizará la versión LATEST.

  6. En Configuración de implementación, haga lo siguiente:

    1. En Tipo de servicio, seleccione Réplica.

    2. En Desired tasks (Tareas deseadas), ingrese el número de tareas que se lanzarán y mantendrán en el servicio.

    3. Para que Amazon ECS monitoree la distribución de las tareas entre las zonas de disponibilidad y las redistribuya cuando haya un desequilibrio, en Reequilibrio del servicio de zonas de disponibilidad, seleccione Reequilibrio del servicio de zonas de disponibilidad.

    4. En Periodo de gracia de la comprobación de estado, introduzca la cantidad de tiempo (en segundos) durante la cual el programador de servicios ignora las comprobaciones de estado de Elastic Load Balancing, VPC Lattice y contenedores en mal estado después de que se haya iniciado una tarea por primera vez. Si no se especifica ningún valor para el período de gracia de comprobación de estado, se utiliza el valor predeterminado: 0.

    1. En Tiempo de incorporación, introduzca el número de minutos que las revisiones de servicio azul y verde durarán simultáneamente antes de que finalice la revisión azul. Esto permite disponer de tiempo para la verificación y la comprobación.

    2. (Opcional) Ejecute las funciones de Lambda que se van a ejecutar en etapas específicas de la implementación. En Enlaces de ciclo de vida de la implementación, seleccione las etapas para ejecutar los enlaces de ciclo de vida.

      Para agregar un enlace de ciclo de vida:

      1. Elija Agregar.

      2. En Función de Lambda, introduzca el nombre o el ARN de la función.

      3. En Rol, selecione el rol de IAM que tiene permiso para invocar la función de Lambda.

      4. En Etapas del ciclo de vida, seleccione las etapas en las que debe ejecutarse la función de Lambda.

  7. Para configurar el modo en que Amazon ECS detecta y gestiona los errores de implementación, expanda Deployment failure detection (Detección de errores de implementación) y, a continuación, elija sus opciones.

    1. Para detener una implementación cuando las tareas no puedan iniciarse, seleccione Use the Amazon ECS deployment circuit breaker (Utilizar el interruptor de circuito de implementación de Amazon ECS).

      Para que el software restaure automáticamente la implementación a su último estado completado cuando el disyuntor de implementación establezca un estado con error, seleccione Restauración en caso de error.

    2. Para detener una implementación en función de las métricas de la aplicación, seleccione Use CloudWatch alarms. A continuación, elija las alarmas en Nombre de la alarma de CloudWatch. Para crear una alarma nueva, vaya a la consola de CloudWatch.

      Para que el software restaure automáticamente la implementación a su último estado de implementación completada cuando una alarma de CloudWatch establezca un estado con error, seleccione Restauración en caso de error.

  8. (Opcional) Para interconectar su servicio con Service Connect, expanda Service Connect y, a continuación, especifique lo siguiente:

    1. Seleccione Activar Service Connect.

    2. En Service Connect configuration (Configuración de Service Connect), especifique el modo cliente.

      • Si su servicio ejecuta una aplicación cliente de red que solo necesita conectarse a otros servicios del espacio de nombres, elija Solo en el lado del cliente.

      • Si su servicio ejecuta una aplicación de servicio web o red y necesita proporcionar puntos de conexión para este servicio y se conecta a otros servicios del espacio de nombres, elija Client and server (Cliente y servidor).

    3. Para usar un espacio de nombres que no sea el espacio de nombres predeterminado del clúster, en Namespace (Espacio de nombres), elija el espacio de nombres del servicio.

    4. (Opcional) Configure las reglas de encabezado de tráfico de prueba para las implementaciones azul/verde. En Enrutamiento de tráfico de prueba, especifique lo siguiente:

      1. Seleccione Habilitar las reglas de encabezado de tráfico de prueba para enrutar solicitudes específicas a la revisión de servicio verde durante las pruebas.

      2. En Reglas de coincidencia de encabezados, configure los criterios para enrutar el tráfico de prueba:

        • Nombre del encabezado: introduzca el nombre del encabezado HTTP que desee que coincida (por ejemplo, X-Test-Version o User-Agent).

        • Tipo de coincidencia: elija los criterios de coincidencia:

          • Coincidencia exacta: se enrutan las solicitudes en las que el valor del encabezado coincida exactamente con el valor especificado.

          • Encabezado presente: se enrutan las solicitudes que contienen el encabezado especificado, independientemente del valor.

          • Coincidencia de patrones: se enrutan las solicitudes en las que el valor del encabezado coincide con un patrón especificado.

        • Valor del encabezado (si se utiliza una coincidencia exacta o una coincidencia de patrón): introduzca el valor o patrón con el que desea que haya coincidencia.

        Puede agregar varias reglas de coincidencia de encabezados para crear una lógica de enrutamiento compleja. Las solicitudes que coincidan con alguna de las reglas configuradas se enrutarán a la revisión de servicio verde para su comprobación.

      3. Elija Agregar regla de encabezado para configurar condiciones de coincidencia de encabezados adicionales.

      nota

      Las reglas de encabezado de tráfico de prueba le permiten validar la nueva funcionalidad con tráfico controlado antes de finalizar la implementación completa. Esto le permite comprobar la revisión de servicio verde con solicitudes específicas (como las de las herramientas de pruebas internas o de los usuarios de la versión beta) y, al mismo tiempo, mantener un flujo de tráfico normal hacia la revisión de servicio azul.

    5. (Opcional) Especifique una configuración de registro. Seleccione Utilizar colección de registros. La opción predeterminada envía registros de contenedor a los Registros de CloudWatch. Las demás opciones del controlador de registro se configuran mediante AWS FireLens. Para obtener más información, consulte Envío de registros de Amazon ECS a un servicio de AWS o AWS Partner.

      A continuación, se describe con más detalle cada uno de los destinos de registro de contenedor.

      • Amazon CloudWatch: configure la tarea para enviar registros de contenedor a CloudWatch Logs. Se proporcionan las opciones de controlador de registro predeterminadas que crean un grupo de registros de CloudWatch en su nombre. Para especificar otro nombre de grupo de registros, cambie los valores de las opciones del controlador.

      • Amazon Data Firehose: configure la tarea para enviar registros de contenedor a Firehose. Se proporcionan las opciones de controlador de registro predeterminadas que envían registros a un flujo de entrega de Firehose. Para especificar un nombre de flujo de entrega distinto, cambie los valores de las opciones del controlador.

      • Amazon Kinesis Data Streams: configure la tarea para enviar registros de contenedores a Kinesis Data Streams. Se proporcionan las opciones de controlador de registro predeterminadas que envían registros a un flujo de Kinesis Data Streams. Para especificar otro nombre de transmisión, cambie los valores de las opciones del controlador.

      • Amazon OpenSearch Service: configure la tarea para enviar registros de contenedor a un dominio de OpenSearch Service. Se deben proporcionar las opciones del controlador de registros.

      • Amazon S3: configure la tarea para enviar registros de contenedor a un bucket de Amazon S3. Se proporcionan las opciones de controlador de registro predeterminadas, pero debe especificar un nombre de bucket de Amazon S3 válido.

  9. (Opcional) Configure el equilibrio de carga para una implementación azul/verde.

    Tipo de Elastic Load Balancing Pasos

    Equilibrador de carga de aplicación

    1. En Tipo de equilibrador de carga, elija Equilibrador de carga de aplicación.

    2. Elija Create a new load balancer (Crear un nuevo balanceador de carga) para crear un nuevo Application Load Balancer o Use an existing load balancer (Utilizar un balanceador de carga existente) para seleccionar un Application Load Balancer existente.

    3. En Contenedor, elija el contenedor que aloja el servicio.

    4. En Load balancer name (Nombre del equilibrador de carga), ingrese un nombre único.

    5. En Listener (Agente de escucha), ingrese un puerto y un protocolo que el equilibrador de carga de aplicación pueda utilizar para escuchar las solicitudes de conexión. De forma predeterminada, el balanceador de carga se configurará para utilizar el puerto 80 y HTTP.

      • En Regla de producción, introduzca el orden de evaluación y el patrón de ruta de la regla.

        Esta regla es para el tráfico de revisión de servicio (azul) de producción.

      • En Regla de prueba, introduzca el orden de evaluación y el patrón de ruta de la regla.

        Esta regla es para el tráfico de revisión del servicio (verde) de prueba.

    6. En Grupo de destino, configure lo siguiente:

      • En Target group name (Nombre del grupo de destino), ingrese un nombre y un protocolo para el grupo de destino al que el equilibrador de carga de aplicación dirige las solicitudes.

      • En Protocolo, elija el protocolo para el grupo de destino hacia el que el equilibrador de carga de aplicación enruta las solicitudes. De forma predeterminada, el grupo de destino dirige las solicitudes al primer contenedor definido en la definición de la tarea.

      • En Retardo de anulación del registro, ingrese el número de segundos al que el equilibrador de carga debe cambiar el estado de destino a UNUSED. El valor predeterminado es de 300 segundos.

      • En Health check path (Ruta de comprobación de estado), ingrese una ruta existente dentro de su contenedor donde el equilibrador de carga de aplicación envíe periódicamente solicitudes para verificar el estado de la conexión entre el equilibrador de carga de aplicación y el contenedor. El valor predeterminado es el directorio raíz (/).

      • En Nombre de grupo alternativo, introduzca el nombre del grupo de destino para la revisión de servicio (verde) de prueba.

    Equilibrador de carga de red
    1. En Load balancer type (Tipo de equilibrador de carga), elija Network Load Balancer (Equilibrador de carga de red).

    2. En Load Balancer (Equilibrador de carga), elija un equilibrador de carga de red existente.

    3. En Choose container to load balance (Seleccionar contenedor para equilibrar la carga), elija el contenedor que aloja el servicio.

    4. En Oyente de producción, elija el puerto de oyente de producción y el protocolo de oyente de producción.

      Este es el oyente del tráfico de revisión de su servicio (azul) de producción.

    5. En Oyente de prueba, elija el puerto de oyente de prueba y el protocolo del oyente de prueba.

      Este es el oyente del tráfico de revisión del servicio (verde) de prueba.

    6. En Grupo de destino, configure lo siguiente:

      • En Target group name (Nombre del grupo de destino), ingrese un nombre y un protocolo para el grupo de destino al que el equilibrador de carga de red dirige las solicitudes.

      • En Protocolo, elija el protocolo para el grupo de destino al que el equilibrador de carga de red enruta las solicitudes. De forma predeterminada, el grupo de destino dirige las solicitudes al primer contenedor definido en la definición de la tarea.

      • En Retardo de anulación del registro, ingrese el número de segundos al que el equilibrador de carga debe cambiar el estado de destino a UNUSED. El valor predeterminado es de 300 segundos.

      • En Health check path (Ruta de comprobación de estado), ingrese una ruta existente dentro de su contenedor donde el equilibrador de carga de aplicación envíe periódicamente solicitudes para verificar el estado de la conexión entre el equilibrador de carga de aplicación y el contenedor. El valor predeterminado es el directorio raíz (/).

      • En Nombre de grupo alternativo, introduzca el nombre del grupo de destino para la revisión de servicio (verde) de prueba.

  10. (Opcional) Para ayudar a identificar el servicio y las tareas, expanda la sección Tags (Etiquetas) y, a continuación, configure sus etiquetas.

    Para que Amazon ECS etiquete automáticamente todas las tareas recién lanzadas con el nombre del clúster y las etiquetas de definición de tareas, seleccione Activar las etiquetas administradas de Amazon ECS y, a continuación, en Propagar etiquetas de, seleccione Definiciones de tareas.

    Para que Amazon ECS etiquete automáticamente todas las tareas recién lanzadas con el nombre del clúster y las etiquetas de servicio, seleccione Activar las etiquetas administradas de Amazon ECS y, a continuación, en Propagar etiquetas de, seleccione Servicio.

    Añada o elimine una etiqueta.

    • [Agregar una etiqueta] Seleccione Add tag (Agregar etiqueta), y, a continuación, haga lo siguiente:

      • En Clave, escriba el nombre de la clave.

      • En Valor, escriba el valor de la clave.

    • [Eliminar una etiqueta] Junto a la etiqueta, elija Remove tag (Quitar etiqueta).

  11. Seleccione Crear.

AWS CLI
  1. Cree un archivo llamado service-definition.json con el siguiente contenido.

    Sustituya las entradas del usuario por sus valores.

    { "serviceName": "myBlueGreenService", "cluster": "arn:aws:ecs:us-west-2:123456789012:cluster/sample-fargate-cluster", "taskDefinition": "sample-fargate:1", "desiredCount": 5, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "subnets": [ "subnet-09ce6e74c116a2299", "subnet-00bb3bd7a73526788", "subnet-0048a611aaec65477" ], "securityGroups": [ "sg-09d45005497daa123" ], "assignPublicIp": "ENABLED" } }, "deploymentController": { "type": "ECS" }, "deploymentConfiguration": { "strategy": "BLUE_GREEN", "maximumPercent": 200, "minimumHealthyPercent": 100, "bakeTimeInMinutes": 2, "alarms": { "alarmNames": [ "myAlarm" ], "rollback": true, "enable": true }, "lifecycleHooks": [ { "hookTargetArn": "arn:aws:lambda:us-west-2:7123456789012:function:checkExample", "roleArn": "arn:aws:iam::123456789012:role/ECSLifecycleHookInvoke", "lifecycleStages": [ "PRE_SCALE_UP" ] } ] }, "loadBalancers": [ { "targetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/blue-target-group/54402ff563af1197", "containerName": "fargate-app", "containerPort": 80, "advancedConfiguration": { "alternateTargetGroupArn": "arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/green-target-group/cad10a56f5843199", "productionListenerRule": "arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/my-blue-green-demo/32e0e4f946c3c05b/9cfa8c482e204f7d/831dbaf72edb911", "roleArn": "arn:aws:iam::123456789012:role/LoadBalancerManagementforECS" } } ] }
  2. Ejecute create-service.

    Sustituya las entradas del usuario por sus valores.

    aws ecs create-service --cli-input-json file://service-definition.json

    Como alternativa, puede usar el siguiente ejemplo, que crea un servicio de implementación azul/verde con una configuración de equilibrador de carga:

    aws ecs create-service \ --cluster "arn:aws:ecs:us-west-2:123456789012:cluster/MyCluster" \ --service-name "blue-green-example-service" \ --task-definition "nginxServer:1" \ --launch-type "FARGATE" \ --network-configuration "awsvpcConfiguration={subnets=[subnet-12345,subnet-67890,subnet-abcdef,subnet-fedcba],securityGroups=[sg-12345],assignPublicIp=ENABLED}" \ --desired-count 3 \ --deployment-controller "type=ECS" \ --deployment-configuration "strategy=BLUE_GREEN,maximumPercent=200,minimumHealthyPercent=100,bakeTimeInMinutes=0" \ --load-balancers "targetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg1/abcdef1234567890,containerName=nginx,containerPort=80,advancedConfiguration={alternateTargetGroupArn=arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/MyBGtg2/0987654321fedcba,productionListenerRule=arn:aws:elasticloadbalancing:us-west-2:123456789012:listener-rule/app/MyLB/1234567890abcdef/1234567890abcdef,roleArn=arn:aws:iam::123456789012:role/ELBManagementRole}"

Pasos a seguir a continuación

  • Actualice el servicio para iniciar la implementación. Para obtener más información, consulte Actualización de un servicio de Amazon ECS.

  • Monitoree el proceso de implementación para asegurarse de que sigue el patrón azul/verde:

    • Se crea y escala verticalmente la revisión de servicio verde

    • El tráfico de prueba se enruta a la revisión verde (si está configurada)

    • El tráfico de producción se transfiere a la revisión verde

    • Transcurrido el tiempo de incorporación, la revisión azul finaliza