Sé que ya hay innumerables preguntas en esta dirección, pero desafortunadamente aún no pude encontrar la respuesta correcta. Si ya existe una publicación, simplemente comparta el enlace aquí.
Tengo varias canalizaciones de gitlab CI/CD. La primera canalización usa Terraform para construir la infraestructura completa para un clúster de ECS basado en Fargate. La segunda/tercera canalización crea compilaciones nocturnas del frontend y el backend y envía la imagen de Docker con la etiqueta "más reciente" al ECR de la cuenta de AWS (puesta en escena).
Lo que ahora quiero lograr es que las tareas de ECS correspondientes se vuelvan a distribuir para que se utilicen las últimas imágenes de Docker. De hecho, pensé que había una manera de hacer esto a través de CloudWatch Events o lo que sea, pero no encuentro un buen punto de partida aquí. Una solución alternativa sería instalar la CLI de AWS en la canalización de CI/CD y luego realizar una actualización del servicio con "forzar una nueva implementación". Pero eso no me parece muy elegante. ¿Hay alguna manera mejor aquí?
Condiciones:
¡Muchas gracias!
Ok, para todos los que estén interesados en una respuesta. Lo resolví de esa manera: ejecuto el siguiente comando AWS CLI en la tubería CICD
aws ecs update-service --cluster <<cluster-name>> --service <<service-name>> --force-new-deployment --region <<region>>No es la solución que estaba buscando, pero funciona.
Como comentario general, no se recomienda insertar siempre la misma etiqueta de contenedor porque luego volver a una versión anterior en caso de falla se vuelve realmente difícil.
Una opción adecuada sería usar etiquetas git. Supongamos que está implementando la versión v0.0.1 . Puede crear un archivo app-version.tf que contendrá la variable backend-version = v0.0.1 a la que puede hacer referencia en la definición de tareas del servicio ecs. Se puede hacer lo mismo para la creación del contenedor usando git describe .
Por lo tanto, obtiene una nueva definición de tarea para cada etiqueta de git y la posibilidad de retroceder simplemente cambiando un valor en la configuración de terraform.
Es beneficioso referirse a las imágenes utilizando resúmenes o etiquetas inmutables únicas. Después de que la canalización envíe la imagen, podría:
Como menciona sgramo93, el gran beneficio es que se puede revertir su aplicación implementando una revisión anterior de la definición de la tarea.