Validación del estado de un servicio de Amazon ECS antes de la implementación - Amazon Elastic Container Service

Validación del estado de un servicio de Amazon ECS antes de la implementación

El tipo de implementación blue/green utiliza el modelo de implementación blue/green controlado por CodeDeploy. Este tipo de implementación permite verificar una nueva implementación de un servicio antes de enviar el tráfico de producción a este. Para obtener más información, consulte What Is CodeDeploy en la Guía del usuario de AWS CodeDeploy. Valide el estado de un servicio de Amazon ECS antes de la implementación.

Hay tres formas de desviar el tráfico en una implementación azul/verde:

  • canario: el tráfico se desvía en dos incrementos. Puede elegir opciones de valor controlado predefinidas que especifiquen el porcentaje de tráfico desviado al conjunto de tareas actualizado en el primer incremento y el intervalo, en minutos, antes de que el tráfico restante se desvíe en el segundo incremento.

  • Lineal: el tráfico se desvía en incrementos iguales con el mismo número de minutos entre incrementos. Puede elegir opciones lineales predefinidas que especifiquen el porcentaje de tráfico desviado en cada incremento y el número de minutos entre cada incremento.

  • Todo a la vez: todo el tráfico se desvía del conjunto de tareas original al conjunto de tareas actualizado a la vez.

A continuación, se indican los componentes de CodeDeploy que emplea Amazon ECS cuando un servicio utiliza el tipo de implementación blue/green:

Aplicación CodeDeploy

Colección de recursos de CodeDeploy. Se compone de uno o varios grupos de implementación.

Grupo de implementaciones de CodeDeploy

Configuración de la implementación. Consta de los elementos siguientes:

  • Servicio y clúster de Amazon ECS

  • Información del grupo de destino del balanceador de carga y del agente de escucha

  • Estrategia de reversión de implementación

  • Configuración de redireccionamiento del tráfico

  • Configuración de terminación de revisión original

  • Configuración de implementación

  • Configuración de alarmas de CloudWatch que se pueden configurar para detener las implementaciones

  • Configuración de SNS o CloudWatch Events para notificaciones

Para obtener más información, consulte Utilización de grupos de implementación en la Guía del usuario de AWS CodeDeploy.

Configuración de implementación de CodeDeploy

Especifica de qué manera dirige CodeDeploy el tráfico de producción al conjunto de tareas de sustitución durante la implementación. La siguiente configuración de implementación lineal y de valor controlado predefinida está disponible. También puede crear implementaciones lineales y de valor controlado definidas personalizadas. Para obtener más información, consulte Utilización de configuraciones de implementación en la Guía del usuario de AWS CodeDeploy.

  • CodeDeployDefault.ECSAllAtOnce: desplaza todo el tráfico al contenedor de Amazon ECS actualizado de una vez.

  • CodeDeployDefault.ecsLinear10PercentEvery1Minutes: desplaza el 10 % del tráfico cada minuto hasta que se haya desplazado todo el tráfico.

  • CodeDeployDefault.ecsLinear10PercentEvery3Minutes: desplaza el 10 % del tráfico cada tres minutos hasta que se haya desplazado todo el tráfico.

  • CodeDeployDefault.ECSCanary10Percent5Minutes: desplaza el 10 % del tráfico en el primer incremento. El 90 por ciento restante se implementa cinco minutos más tarde.

  • CodeDeployDefault.ECSCanary10Percent15Minutes: desplaza el 10 % del tráfico en el primer incremento. El 90 por ciento restante se implementa 15 minutos más tarde.

Revisión

Una revisión es el archivo de especificación de la aplicación CodeDeploy (archivo AppSpec). En el archivo AppSpec, debe especificar el ARN completo de la definición de la tarea, el contenedor y el puerto del conjunto de tareas de sustitución hacia donde debe dirigirse el tráfico cuando se crea una implementación nueva. El nombre del contenedor debe ser uno de los nombres de contenedor al que se hace referencia en la definición de tarea. Si la configuración de red o versión de la plataforma se ha actualizado en la definición del servicio, también debe especificar esos detalles en el archivo AppSpec. También puede especificar las funciones de Lambda que se deben ejecutar durante los eventos del ciclo de vida de la implementación. Las funciones de Lambda le permiten ejecutar pruebas y obtener métricas durante la implementación. Para obtener más información, consulte Referencia del archivo AppSpec en la Guía del usuario de AWS CodeDeploy.

Consideraciones

Tenga en cuenta lo siguiente al utilizar el tipo de implementación blue/green:

  • Cuando un servicio de Amazon ECS que utiliza el tipo de implementación blue/green se crea inicialmente, se crea un conjunto de tareas de Amazon ECS.

  • Debe configurar el servicio para que utilice un Application Load Balancer o un Network Load Balancer. A continuación se indican los requisitos del balanceador de carga:

    • Debe añadir un agente de escucha de producción al balanceador de carga, que se utiliza para dirigir el tráfico de producción.

    • Es posible añadir un agente de escucha de pruebe opcional al balanceador de carga, que se utiliza para dirigir el tráfico de prueba. Si especifica un agente de escucha de prueba, CodeDeploy dirige el tráfico de prueba al conjunto de tareas de sustitución durante una implementación.

    • Tanto los agentes de escucha de prueba como de producción deben pertenecer al mismo balanceador de carga.

    • Debe definir un grupo de destino para el balanceador de carga. El grupo de destino dirige el tráfico al conjunto de tareas original en un servicio a través del agente de escucha de producción.

    • Cuando se utiliza un Network Load Balancer, solo se admite la configuración de implementación CodeDeployDefault.ECSAllAtOnce.

  • Para los servicios configurados para que utilicen el escalado automático del servicio y el tipo de implementación “green/blue”, el escalado automático no se bloquea durante una implementación, pero la implementación puede fallar en algunas circunstancias. A continuación, se describe este comportamiento con más detalle.

    • Si un servicio está escalando y se inicia una implementación, se crea el conjunto de tareas “green” (verdes) y CodeDeploy esperará hasta una hora para que el conjunto de tareas verdes alcance el estado constante, y no cambiará el tráfico hasta que lo haga.

    • Si un servicio está en proceso de implementación “blue/green” y se produce un evento de escalado, el tráfico continuará cambiando durante 5 minutos. Si el servicio no alcanza el estado estable en 5 minutos, CodeDeploy detendrá la implementación y la marcará como fallida.

    • Si un servicio está en proceso de implementación azul/verde y se produce un evento de escalado, el recuento de tareas deseado se puede establecer en un valor inesperado. Esto se debe al escalado automático teniendo en cuenta el recuento de tareas en ejecución como capacidad actual, que es el doble del número adecuado de tareas que se utilizan en el cálculo del recuento de tareas deseado.

  • Las tareas que utilizan el tipo de lanzamiento de Fargate o los tipos de controlador de implementación CODE_DEPLOY no son compatibles con la estrategia de programación DAEMON.

  • Cuando crea inicialmente una aplicación y un grupo de implementaciones de CodeDeploy, debe especificar lo siguiente:

    • Debe definir dos grupos de destino para el balanceador de carga. Un grupo de destino debe ser el grupo de destino inicial que se definió para el balanceador de carga al crear el servicio de Amazon ECS. El único requisito del segundo grupo de destino es que no puede asociarse con un balanceador de carga diferente al utilizado por el servicio.

  • Cuando crea una implementación de CodeDeploy para un servicio de Amazon ECS, CodeDeploy crea un conjunto de tareas de sustitución (o un conjunto de tareas “green” [verdes]) en la implementación. Si ha agregado un agente de escucha de prueba al balanceador de carga, CodeDeploy dirige el tráfico de prueba al conjunto de tareas de sustitución. Esto es cuando puede ejecutar cualquier prueba de validación. A continuación, CodeDeploy redirige el tráfico de producción del conjunto de tareas original al conjunto de tareas de sustitución de acuerdo con la configuración de redireccionamiento del tráfico para el grupo de implementaciones.

Permisos de IAM necesarios

Las implementaciones azul/verde son posibles gracias a la combinación de las API de Amazon ECS y CodeDeploy. Los usuarios deben tener los permisos adecuados para estos servicios antes de que puedan utilizar las implementaciones azul/verde de Amazon ECS desde la AWS Management Console o los SDK de AWS CLI.

Además de los permisos estándar de IAM para crear y actualizar servicios, Amazon ECS requiere los siguientes permisos. Estos permisos se han añadido a la política de IAM AmazonECS_FullAccess. Para obtener más información, consulte AmazonECS_FullAccess.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateApplication", "codedeploy:CreateDeployment", "codedeploy:CreateDeploymentGroup", "codedeploy:GetApplication", "codedeploy:GetDeployment", "codedeploy:GetDeploymentGroup", "codedeploy:ListApplications", "codedeploy:ListDeploymentGroups", "codedeploy:ListDeployments", "codedeploy:StopDeployment", "codedeploy:GetDeploymentTarget", "codedeploy:ListDeploymentTargets", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision", "codedeploy:BatchGetApplicationRevisions", "codedeploy:BatchGetDeploymentGroups", "codedeploy:BatchGetDeployments", "codedeploy:BatchGetApplications", "codedeploy:ListApplicationRevisions", "codedeploy:ListDeploymentConfigs", "codedeploy:ContinueDeployment", "sns:ListTopics", "cloudwatch:DescribeAlarms", "lambda:ListFunctions" ], "Resource": ["*"] } ] }
nota

Además de los permisos estándar de Amazon ECS requeridos para ejecutar tareas y servicios, los usuarios también requieren permisos iam:PassRole para utilizar roles de IAM para las tareas.

CodeDeploy necesita permisos para llamar a las API de Amazon ECS, modificar Elastic Load Balancing, invocar funciones de Lambda y describir alarmas de CloudWatch, y permisos para modificar el recuento deseado del servicio en su nombre. Antes de crear un servicio de Amazon ECS que utilice el tipo de implementación “blue/green”, debe crear un rol de IAM (ecsCodeDeployRole). Para obtener más información, consulte Rol de IAM de CodeDeploy de Amazon ECS.

En los ejemplos de política de IAM Ejemplo de creación de servicios de Amazon ECS y Ejemplo de actualización de servicios de Amazon ECS, se muestran los permisos que necesitan los usuarios para utilizar las implementaciones azul/verde de Amazon ECS en la AWS Management Console.