pricing instalar imagenes hub fargate aws amazon-ecs

amazon ecs - instalar - Servicio de ECS: automatización del despliegue con una nueva imagen de Docker



imagenes de docker (2)

La respuesta proporcionada por Matt Callanan no me funcionó: recibí un error en esta parte:

--container-definitions "''$(echo $NEW_CONTAINER_DEFS)''"

Resultó en: Error al analizar el parámetro ''--container-definition'': Se esperaba: ''='', se recibió: '''' ''para la entrada:

''{entorno: [{etc etc ....

Lo que hice para resolverlo fue:

TASK_FAMILY=<task familiy name> DOCKER_IMAGE=<new_image_name> LATEST_TASK_DEFINITION=$(aws ecs describe-task-definition --task-definition ${TASK_FAMILY}) echo $LATEST_TASK_DEFINITION / | jq ''{containerDefinitions: .taskDefinition.containerDefinitions, volumes: .taskDefinition.volumes}'' / | jq ''.containerDefinitions[0].image=''/"${DOCKER_IMAGE}/" / > /tmp/tmp.json aws ecs register-task-definition --family ${TASK_FAMILY} --cli-input-json file:///tmp/tmp.json

Tomo los elementos containerDefinitions y volume del documento json original, porque mi containerDefinition usa estos volúmenes (por lo que no es necesario si no usas volúmenes).

Quiero automatizar la implementación de mi aplicación haciendo que mi servicio ECS se inicie con la última imagen de Docker. Por lo que he leído, la forma de implementar una nueva versión de la imagen es la siguiente:

  1. Cree una nueva revisión de tareas (después de actualizar la imagen en su repositorio de Docker).
  2. Actualice el servicio y especifique la nueva revisión.

Esto parece funcionar, pero quiero hacerlo todo a través de CLI para poder ejecutarlo. El # 2 parece bastante fácil de hacer a través de la CLI de AWS con update-service , pero no veo una manera de hacer el # 1 sin especificar todo el JSON de tareas de nuevo como con register-task-definition (mi JSON incluirá credenciales en las variables de entorno, así que quiero tener eso en el menor número de lugares posible).

¿Es así como debería automatizar la implementación de mis actualizaciones del Servicio de ECS? Y si es así, ¿hay una manera "buena" de que la Definición de tarea inicie una nueva revisión (es decir, sin duplicar todo)?


Sí, ese es el enfoque correcto.

Y no, con la API actual, no puede registrar una nueva revisión de una definición de tarea existente sin duplicarla.

Si no usó la CLI para generar la definición de la tarea original (o no quiere reutilizar los comandos originales que la generaron), puede intentar algo como lo siguiente a través de la CLI:

OLD_TASK_DEF=$(aws ecs describe-task-definition --task-definition <task_family_name>) NEW_CONTAINER_DEFS=$(echo $OLD_TASK_DEF | jq ''.taskDefinition.containerDefinitions'' | jq ''.[0].image="<new_image_name>"'') aws ecs register-task-definition --family <task_family_name> --container-definitions "''$(echo $NEW_CONTAINER_DEFS)''"

No es 100% seguro ya que el argumento --container-defintions del último comando (que incluye entradas de "environment" ) aún será visible a través de procesos como ps . Uno de los SDK de AWS le daría mayor tranquilidad.