Estrategias de despliegue de AWS CodeDeploy - Despliegue blue/green en EC2 / ECS / Lambda
Gestione de forma unificada las estrategias de despliegue para las tres plataformas EC2 / ECS / Lambda. Presentamos el despliegue blue/green en ECS y el rollback automático vinculado a las alarmas de CloudWatch.
Plataformas compatibles y tipos de despliegue de CodeDeploy
CodeDeploy es un servicio de despliegue compatible con tres plataformas: EC2/on-premises, ECS y Lambda. En EC2/on-premises puede elegir entre el despliegue in-place (actualización secuencial de las instancias existentes) y el despliegue blue/green (creación de un nuevo grupo de instancias y cambio a él). En ECS solo se admite el despliegue blue/green, que lanza un nuevo conjunto de tareas y cambia el grupo de destino. En Lambda se ofrece un despliegue gradual mediante el desplazamiento del tráfico. Al desplegar en EC2, Lambda y ECS con CodeDeploy no se aplica ningún cargo adicional, mientras que en los despliegues en instancias on-premises se cobra por cada actualización de instancia.
Diseño del despliegue blue/green en ECS
En el despliegue blue/green de ECS, se configuran dos grupos de destino (uno para producción y otro para pruebas) en el ALB. Al iniciar el despliegue, se lanza un nuevo conjunto de tareas (Green) y se registra en el grupo de destino de prueba. Se comprueba el funcionamiento del entorno Green a través del puerto del listener de prueba y, si no hay problemas, se cambia el tráfico del listener de producción a Green. Incluso después del cambio, el antiguo conjunto de tareas (Blue) se conserva durante el tiempo de espera especificado (1 hora por defecto), por lo que, si surge un problema, se puede volver al conjunto de tareas original. Puede montar una configuración que ejecute pruebas automatizadas en el hook AfterAllowTestTraffic del archivo AppSpec y haga un rollback automático cuando una prueba falle.
Rollback automático e integración con alarmas
El rollback automático de CodeDeploy funciona con dos disparadores: el fallo del despliegue y la activación de una alarma de CloudWatch. En la integración con las alarmas de CloudWatch, se supervisan la tasa de errores después del despliegue (el porcentaje de respuestas 5xx), la latencia (tiempo de respuesta p99) y las métricas de negocio (como la tasa de éxito de los pedidos). Cuando se supera un umbral, se hace un rollback automático a la versión anterior. En el desplazamiento del tráfico de Lambda, un despliegue Canary envía primero el 10% del tráfico a la nueva versión y, si no se activa ninguna alarma durante el tiempo especificado (por ejemplo, 10 minutos), cambia el 90% restante. Un despliegue Linear desplaza el tráfico de forma gradual en incrementos del 10% y supervisa las alarmas en cada paso.
Precios de CodeDeploy
Al desplegar en EC2, Lambda y ECS con CodeDeploy no se aplica ningún cargo adicional, y lo que se cobra son las actualizaciones de las instancias on-premises. Durante el período en que se ejecuta temporalmente el doble de recursos en un despliegue blue/green sí se cobra la computación, pero no hay cargos adicionales por el propio CodeDeploy. En el despliegue blue/green de ECS, desde el lanzamiento del conjunto de tareas Green hasta el cambio del tráfico se ejecutan tanto las tareas Blue como las Green, por lo que se añaden los cargos de Fargate o EC2 correspondientes a ese período. Puede reducir los costes configurando un tiempo de conservación corto para el conjunto de tareas Blue después del cambio.
Configuración del despliegue y desplazamiento del tráfico
En CodeDeploy, puede elegir mediante la configuración cómo se traslada el tráfico al cambiar a una nueva versión. El método que lo cambia todo de una vez es rápido, pero si hay un problema afecta a todos los usuarios. Con el método canary, que empieza por una parte muy pequeña y la aumenta poco a poco, o con el método lineal, que traslada el tráfico de forma escalonada en porcentajes fijos, se pueden detectar las anomalías pronto y limitar los daños. En Lambda, se usa un alias para ajustar el porcentaje del tráfico entre versiones y cambiar de forma fluida. Al elegir el método de cambio según su tolerancia al riesgo, puede publicar nuevas versiones limitando el tiempo de inactividad y el impacto de los fallos.
Métodos de despliegue en EC2
En los despliegues en EC2 o en servidores on-premises, puede elegir entre el método in-place, que actualiza de forma secuencial las instancias en ejecución, y el método blue/green, que crea un nuevo grupo de instancias y luego cambia a él. El blue/green facilita volver al entorno original si hay un problema, pero requiere temporalmente el doble de recursos. Los destinos del despliegue se definen como un grupo de despliegue mediante etiquetas u otros medios. Como se puede insertar cualquier procesamiento en cada etapa del despliegue, se pueden incorporar preparativos y verificaciones antes y después del arranque. Se elige el método adecuado según las características de la aplicación y la tolerancia al tiempo de inactividad.
Integración en el pipeline de CI/CD
CodeDeploy se puede incorporar como parte de un pipeline de CI/CD. Se puede construir un flujo que despliegue automáticamente, en la última etapa del pipeline, los artefactos que han pasado la compilación y las pruebas. Los pasos del despliegue y los procesos de verificación que se ejecutan en cada etapa se describen de forma declarativa en un archivo de definición. De este modo, el contenido del despliegue se gestiona como código y se mantiene la reproducibilidad. Al automatizar todo, desde el commit hasta el despliegue, sin intervención manual, puede aumentar la frecuencia de las publicaciones y a la vez reducir los errores humanos. Un despliegue incorporado en un pipeline pasa a formar parte de la entrega continua.
Prácticas recomendadas para publicaciones seguras
La clave de un despliegue seguro es disponer de un mecanismo que detecte los problemas pronto y pueda revertirlos automáticamente. Durante el despliegue se ejecutan procesos de verificación para comprobar si la nueva versión funciona correctamente. Si supervisa las métricas después de la publicación y configura un rollback automático al detectar una anomalía como el aumento de la tasa de errores, resulta más fácil limitar los daños. Combinado con un método que traslade el tráfico de forma gradual, puede darse cuenta de los problemas antes del cambio completo. Incorporar en los mecanismos el principio de no desplegar de golpe a todos los usuarios, sino probar a pequeña escala y ampliar mientras se comprueba, conduce a una operación de publicaciones fiable.
Resumen
CodeDeploy es un servicio que gestiona de forma unificada los despliegues seguros en EC2, ECS y Lambda. El despliegue blue/green y el desplazamiento del tráfico limitan el riesgo en los entornos de producción y, con la integración con las alarmas de CloudWatch, se puede hacer un rollback automático cuando surge un problema. Con los hooks del ciclo de vida de AppSpec, se pueden incorporar pruebas en el proceso de despliegue y ejecutarlas dentro de la automatización del despliegue.
Referencias (recursos oficiales de AWS)
Las fuentes primarias de esta página son el sitio web y la documentación oficiales de AWS. Consulta las páginas oficiales siguientes para conocer las especificaciones y los precios más recientes.
- AWS CodeDeploy (página oficial)
- Amazon ECS (página oficial)
- AWS Lambda (página oficial)
- Documentación de AWS (oficial)
Si esta página y la documentación oficial difieren, prevalece la documentación oficial.