AWS ECS: Servicio + escalado automático frente a tarea de lanzamiento de datos de usuario

AWS ECS: Servicio + escalado automático frente a tarea de lanzamiento de datos de usuario

Intento entender ECS usando el lanzamiento de EC2 (no Fargate, al menos por ahora).

Supongamos una única tarea de larga duración que quiero iniciar con cada instancia de contenedor. El mecanismo previsto para esto parece ser un Servicio, que lanzará tantas instancias de tareas como configuro; en este caso, comienzo con la misma cantidad de tareas que instancias de contenedor.

El escalado automático parece existir aquí en dos capas: el clúster puede escalar automáticamente sus instancias y el Servicio puede escalar automáticamente la cantidad de Tareas. No parece haber ninguna forma de sincronizar estas dos capas sin Fargate.

Un enfoque que se me ocurrió para sortear esta limitación es activar el escalamiento horizontal mediante una alarma de CloudWatch en elgrupoy luego use un enlace de ciclo de vida en la creación de la instancia para activar la ampliación horizontal del Servicio. Todavía no he descubierto cómo funcionaría esto para la ampliación horizontal: ¿hay algún evento generado automáticamente para la ampliación horizontal del Servicio?

entonces

Yo viuna guía de AWS para iniciar una tarea al lanzar un contenedor. El quid de la cuestión parece ser estos datos de usuario MIME:

Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0

--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"

#!/bin/bash
# Specify the cluster that the container instance should register into cluster=your_cluster_name

# Write the cluster configuration variable to the ecs.config file
# (add any other configuration variables here also)
echo ECS_CLUSTER=$cluster >> /etc/ecs/ecs.config

# Install the AWS CLI and the jq JSON parser
yum install -y aws-cli jq

--==BOUNDARY==
Content-Type: text/upstart-job; charset="us-ascii"

#upstart-job
description "Amazon EC2 Container Service (start task on instance boot)"
author "Amazon Web Services"
start on started ecs

script
    exec 2>>/var/log/ecs/ecs-start-task.log
    set -x
    until curl -s http://localhost:51678/v1/metadata
    do
        sleep 1
    done

    # Grab the container instance ARN and AWS region from instance metadata
    instance_arn=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | 
.ContainerInstanceArn' | awk -F/ '{print $NF}' )
    cluster=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .Cluster' | awk -F/ '{print $NF}' )
    region=$(curl -s http://localhost:51678/v1/metadata | jq -r '. | .ContainerInstanceArn' | awk -F: '{print $4}')

    # Specify the task definition to run at launch
    task_definition=my_task_def

    # Run the AWS CLI start-task command to start your task on this container instance
    aws ecs start-task --cluster $cluster --task-definition $task_definition --container-instances $instance_arn --started-by $instance_arn --region $region
end script
--==BOUNDARY==--

Si bien hay un descargo de responsabilidad al comienzo del artículo, entendí que significaba que este método de uso awsclipara ejecutar una tarea mitigaría todas las preocupaciones.

¿Me he perdido algo? ¿Es esta una alternativa viable a un Servicio con escalado automático?

Respuesta1

Después de discutir esto con un técnico de soporte de AWS, parece una solución bastante buena para mi problema.

Para configurar esto, necesitaba crear un grupo de escalado automático utilizando una configuración de lanzamiento que tuviera como base una AMI optimizada para Amazon ECS y asignarle un rol que tuviera permisos de ECS. Luego pude incluir los datos del usuario como se muestra. Cuando todo estaba configurado correctamente (y las instancias tenían acceso público a Internet), las instancias se registraban en mi clúster ECS al iniciarse y ejecutaban mi tarea.

Esta NO sería una buena solución para tener un contenedor que funcione independientemente de las tareas que desea ejecutar, o para una tarea que pueda reiniciarse cuando falla sin reiniciar todo el contenedor.

información relacionada