Migre las implementaciones azul/verde de CodeDeploy a las implementaciones azul/verde de Amazon ECS
Las implementaciones azul/verde de CodeDeploy y las implementaciones azul/verde de Amazon ECS ofrecen una funcionalidad similar, pero difieren en su configuración y administración.
Descripción general de las implementaciones azul/verde de CodeDeploy
Al crear un servicio de Amazon ECS mediante CodeDeploy, debe:
-
Crear un equilibrador de carga con un oyente de producción y (opcionalmente) un oyente de prueba. Cada oyente está configurado con una única regla (predeterminada) que enruta todo el tráfico a un único grupo de destino (el grupo de destino principal).
-
Crear un servicio de Amazon ECS, configurado para usar el oyente y el grupo de destino, con el tipo
deploymentController
establecido enCODE_DEPLOY
. La creación del servicio da como resultado la creación de un conjunto de tareas (azul) registrado en el grupo de destino especificado. -
Cree un grupo de implementación de CodeDeploy (como parte de una aplicación CodeDeploy) y configúrelo con detalles del clúster de Amazon ECS, el nombre del servicio, los oyentes del equilibrador de carga, dos grupos de destino (el grupo de destino principal utilizado en la regla de oyente de producción y un grupo de destino secundario que se utilizará para tareas de sustitución), un rol de servicio (para conceder permisos a CodeDeploy a fin de que pueda manipular los recursos de Amazon ECS y de Elastic Load Balancing) y varios parámetros que controlan el comportamiento de la implementación.
Con CodeDeploy, las nuevas versiones de un servicio se implementan mediante CreateDeployment()
, especificando el nombre de la aplicación de CodeDeploy, el nombre del grupo de implementación y un archivo AppSpec que proporciona detalles de la nueva revisión y los enlaces de ciclo de vida opcionales. La implementación de CodeDeploy crea un conjunto de tareas de sustitución (verde) y registra sus tareas en el grupo de destino secundario. Cuando este recupere el buen estado, estará disponible para pruebas (opcional) y para producción. En ambos casos, el redireccionamiento se logra cambiando la regla de oyente correspondiente para que apunte al grupo de destino secundario asociado al conjunto de tareas verde. La reversión se logra haciendo que la regla de oyente de producción pase a ser la del grupo de destino principal.
Descripción general de las implementaciones azul/verde de Amazon ECS
En el caso de las implementaciones azul/verde de Amazon ECS, la configuración de implementación forma parte del propio servicio de Amazon ECS:
-
Debe preconfigurar el oyente de producción del equilibrador de carga con una regla que incluya dos grupos de destino con ponderaciones de 1 y 0.
-
Debe especificar los siguientes recursos o actualizar los recursos del servicio:
-
El ARN de esta regla de oyente
-
Los dos grupos de destino
-
Un rol de IAM para conceder a Amazon ECS permiso para llamar a las API de Elastic Load Balancing
-
Un rol de IAM opcional para ejecutar funciones de Lambda
-
Defina el tipo
deploymentController
enECS
ydeploymentConfiguration.strategy
enBLUE_GREEN
. Esto da como resultado la creación de una implementación de servicio (azul) cuyas tareas se registran en el grupo de destino principal.
-
Con las implementaciones azul/verde de Amazon ECS, se crea una nueva revisión de servicio llamando a UpdateService()
de Amazon ECS y pasando los detalles de la nueva revisión. La implementación del servicio crea nuevas tareas de revisión de servicio (verde) y las registra en el grupo de destino secundario. Amazon ECS administra las operaciones de redireccionamiento y reversión cambiando las ponderaciones de la regla de oyente.
Diferencias de implementación claves
Si bien ambos métodos dan como resultado la creación de un conjunto de tareas inicial, la implementación subyacente es diferente:
-
CodeDeploy utiliza un conjunto de tareas, mientras que Amazon ECS utiliza una revisión de servicio. Los conjuntos de tareas de Amazon ECS son un constructo antiguo que ha sido sustituido por las revisiones e implementaciones de servicios de Amazon ECS. Estas últimas ofrecen una mayor visibilidad del proceso de implementación, así como del historial de implementación y revisión de servicio.
-
Con CodeDeploy, los enlaces de ciclo de vida se especifican como parte del archivo AppSpec que se suministra a
CreateDeployment()
. Esto significa que los enlaces se pueden cambiar de una implementación a otra. Con las implementaciones azul/verde de Amazon ECS, los enlaces se especifican como parte de la configuración del servicio y cualquier actualización requerirá una llamada aUpdateService()
. -
Tanto las implementaciones azul/verde de CodeDeploy como las de Amazon ECS utilizan Lambda para la implementación de enlaces, pero las entradas y salidas esperadas son diferentes.
Con CodeDeploy, la función debe llamar a
PutLifecycleEventHookExecutionStatus()
para devolver el estado del enlace, que puede serSUCCEEDED
oFAILED
. Con Amazon ECS, la respuesta de Lambda se utiliza para indicar el estado del enlace. -
CodeDeploy invoca cada enlace como una llamada única y espera que se devuelva el estado de ejecución final en una hora. Los enlaces de Amazon ECS son más flexibles, ya que pueden devolver un indicador
IN_PROGRESS
, lo que significa que el enlace debe volver a invocarse repetidamente hasta que dé como resultadoSUCCEEDED
oFAILED
. Para obtener más información, consulte Enlaces de ciclo de vida para las implementaciones de servicios de Amazon ECS.
Enfoques de migración
Existen tres métodos principales para migrar de las implementaciones azul/verde de CodeDeploy a las implementaciones azul/verde de Amazon ECS. Cada método tiene características diferentes en términos de complejidad, riesgo, capacidad de reversión y posible tiempo de inactividad.
Reutilice los mismos recursos de Elastic Load Balancing utilizados para CodeDeploy
Debe actualizar el servicio de Amazon ECS existente para utilizar el controlador de implementación de Amazon ECS con una estrategia de implementación azul/verde en lugar del controlador de implementación de CodeDeploy. Tenga en cuenta lo siguiente cuando utilice este método:
-
El procedimiento de migración es más sencillo porque está actualizando el controlador de implementación del servicio de Amazon ECS y la estrategia de implementación existentes.
-
Si se configura y migra correctamente, no hay tiempo de inactividad.
-
Una reversión requiere que se revierta la revisión de servicio.
-
El riesgo es alto porque no hay una configuración azul/verde paralela.
Utiliza el mismo oyente y los mismos grupos de destino del equilibrador de carga que se utilizan para CodeDeploy. Si está usando AWS CloudFormation, consulta Migración de una plantilla de implementación azul/verde de CodeDeploy de AWS CloudFormation a una plantilla de AWS CloudFormation azul/verde de Amazon ECS.
-
Modifique la regla predeterminada de los oyentes de producción o de prueba para incluir el grupo de destino alternativo y establezca la ponderación del grupo de destino principal en 1 y del grupo de destino alternativo en 0.
En el caso de CodeDeploy, los oyentes del equilibrador de carga adjunto al servicio se configuran con una sola regla (predeterminada) que enruta todo el tráfico a un único grupo de destino. En el caso de Amazon ECS (azul/verde), los oyentes del equilibrador de carga deben estar preconfigurados con una regla que incluya los dos grupos de destino con ponderaciones.
-
Actualice el servicio de Amazon ECS existente llamando a la API
UpdateService
y configurando el parámetrodeploymentController
enECS
y el parámetrodeploymentStrategy
enBLUE_GREEN
. Especifique los ARN del grupo de destino, el grupo de destino alternativo, el oyente de producción y un oyente de prueba opcional. -
Compruebe que el servicio funciona según lo previsto.
-
Elimine la configuración de CodeDeploy para este servicio de Amazon ECS, ya que ahora utiliza implementaciones azul/verde de Amazon ECS.
Servicio nuevo con un equilibrador de carga existente
Este método utiliza la estrategia azul/verde para la migración.
Tenga en cuenta lo siguiente cuando utilice este método:
-
La interrupción es mínima. Solo se produce durante el intercambio de puertos de Elastic Load Balancing.
-
Una reversión requiere que restituya el intercambio de puertos de Elastic Load Balancing.
-
El riesgo es bajo porque hay configuraciones en paralelo. Por lo tanto, puede realizar la prueba antes de la transferencia de tráfico.
-
Deje intactos los oyentes, los grupos de destino y el servicio de Amazon ECS para la configuración de CodeDeploy a fin de que pueda revertirse fácilmente a esta configuración si es necesario.
-
Cree nuevos grupos de destino y nuevos oyentes (con puertos diferentes a los de los oyentes originales) en el equilibrador de carga existente. A continuación, cree un nuevo servicio de Amazon ECS que coincida con el servicio de Amazon ECS existente, excepto si utiliza
ECS
como controlador de implementación,BLUE_GREEN
como estrategia de implementación, y pase los ARN a los nuevos grupos de destino y las nuevas reglas de oyente. -
Verifique la nueva configuración enviando manualmente el tráfico HTTP al servicio. Si todo va bien, cambie los puertos de los oyentes originales por los de los nuevos para enrutar el tráfico a la nueva configuración.
-
Compruebe la nueva configuración y, si todo sigue funcionando según lo previsto, elimine la configuración de CodeDeploy.
Servicio nuevo con un nuevo equilibrador de carga
Al igual que el método anterior, este utiliza la estrategia azul/verde para la migración. La diferencia clave es que el cambio de la configuración de CodeDeploy a la configuración azul/verde de Amazon ECS se produce en una capa de proxy inversa por encima del equilibrador de carga. Algunos ejemplos de implementaciones para la capa de proxy inverso son Route 53 y CloudFront.
Este método es adecuado para los clientes que ya disponen de esta capa de proxy inverso y si toda la comunicación con el servicio se realiza a través de ella (por ejemplo, si no hay comunicación directa a nivel del equilibrador de carga).
Tenga en cuenta lo siguiente cuando utilice este método:
-
Esto requiere una capa de proxy inversa.
-
El procedimiento de migración es más complejo porque es necesario actualizar el controlador de implementación del servicio de Amazon ECS y la estrategia de implementación existentes.
-
La interrupción es mínima. Solo se produce durante el intercambio de puertos de Elastic Load Balancing.
-
Una reversión requiere que se reviertan los cambios en la configuración del proxy.
-
El riesgo es bajo porque hay configuraciones en paralelo. Por lo tanto, puede realizar la prueba antes de la transferencia de tráfico.
-
No modifique la configuración de CodeDeploy existente intacta (equilibrador de carga, oyentes, grupos de destino, servicio de Amazon ECS y grupo de implementación de CodeDeploy).
-
Cree un nuevo equilibrador de carga, grupos de destino y oyentes configurados para implementaciones azul/verde de Amazon ECS.
Configure los recursos adecuados.
-
Equilibrador de carga de aplicación: para más información, consulte Recursos de equilibrador de carga de aplicación para implementaciones azul/verde.
-
Equilibrador de carga de red: para más información, consulte Recursos del equilibrador de carga de red para las implementaciones azul/verde de Amazon ECS.
-
-
Cree un nuevo servicio con
ECS
como controlador de implementación yBLUE_GREEN
como estrategia de implementación, apuntando a los nuevos recursos del equilibrador de carga. -
Verifique la nueva configuración probándola con el nuevo equilibrador de carga.
-
Actualice la configuración del proxy inverso para enrutar el tráfico al nuevo equilibrador de carga.
-
Observe la nueva revisión de servicio y, si todo sigue funcionando según lo esperado, elimine la configuración de CodeDeploy.
Pasos a seguir a continuación
Después de migrar a las implementaciones azul/verde de Amazon ECS:
-
Actualice los scripts de implementación y las canalizaciones de CI/CD para usar la API
UpdateService
de Amazon ECS en lugar de la APICreateDeployment
de CodeDeploy. -
Actualice el monitoreo y las alertas para realizar un seguimiento de las implementaciones del servicio de Amazon ECS en lugar de las implementaciones de CodeDeploy.
-
Considere la posibilidad de implementar pruebas automatizadas de su nuevo proceso de implementación para asegurarse de que funciona según lo esperado.