Inicio de una tarea en el momento de lanzamiento de una instancia de contenedor - Amazon Elastic Container Service

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Inicio de una tarea en el momento de lanzamiento de una instancia de contenedor

En función del diseño de la arquitectura de aplicación, es posible que tenga que ejecutar un contenedor específico en cada instancia de contenedor para tratar problemas de seguridad o de operaciones tales como la monitorización, seguridad, métricas, detección de servicios o registro.

Para ello, puede configurar sus instancias de contenedor para llamar al comando docker run con el script de datos de usuario durante el lanzamiento o en algún sistema de inicio como Upstart o systemd. Aunque este método funciona, tiene algunas desventajas ya que Amazon ECS no conoce el contenedor y no puede monitorear la CPU, la memoria, los puertos ni ningún otro recurso utilizado. A fin de garantizar que Amazon ECS pueda contabilizar correctamente todos los recursos de tareas, cree una definición de tareas para que el contenedor las ejecute en las instancias de contenedor. A continuación, utilice Amazon ECS para ubicar la tarea en el momento del lanzamiento con los datos de usuario de Amazon EC2.

En el siguiente procedimiento, el script de datos de usuario de Amazon EC2 utiliza la API de introspección de Amazon ECS para identificar la instancia de contenedor. A continuación, utiliza el start-task comando AWS CLI and para ejecutar una tarea específica sobre sí mismo durante el inicio.

Para iniciar una tarea en el momento del lanzamiento de una instancia de contenedor
  1. Si aún no lo ha hecho, cree una definición de tarea con el contenedor en el que desea ejecutar en su instancia de contenedor en el momento del lanzamiento siguiendo los procedimientos que se indican en Creación de una definición de tareas con la consola.

  2. Modifique el rol de IAM ecsInstanceRole para añadir permisos para la operación StartTask de la API. Para obtener más información, consulte Rol de IAM de instancia de contenedor de Amazon ECS.

    1. Abra la consola de IAM en https://console.aws.amazon.com/iam/.

    2. Seleccione Roles en el panel de navegación.

    3. Elija el icono ecsInstanceRole. Si el rol no existe, utilice el procedimiento que se indica en Rol de IAM de instancia de contenedor de Amazon ECS para crear el rol y volver a este procedimiento. Si el rol existe, selecciónelo para ver sus políticas asociadas.

    4. En la pestaña Permissions (Permisos), elija Add inline policy (Añadir política insertada).

    5. En Service (Servicio), seleccione Choose a service (Elegir un servicio) y, después, Elastic Container Service.

    6. En Acciones, escriba StartTasken el campo de búsqueda y, a continuación, seleccione StartTask.

    7. En Resources (Recursos), seleccione All resources (Todos los recursos) y después Review policy (Revisar política).

    8. En la página Review policy (Revisar política), introduzca un nombre para su política, como ecs-start-task, y seleccione Create policy (Crear política).

  3. Para lanzar una o varias instancias de contenedor mediante la AMI de Amazon Linux 2 optimizada para Amazon ECS, siga el procedimiento que de describe en Lanzamiento de una instancia de contenedor de Linux de Amazon ECS, pero en Paso 7, copie y pegue el script de datos de usuario multiparte de MIME a continuación en el campo User data (Datos de usuario). Cambie su_nombre_de_clúster por el clúster de la instancia de contenedor en el que desea registrarse y mi_definición_de_tarea por la definición de tarea que desea ejecutar en la instancia en el momento del lanzamiento.

    nota

    El contenido multiparte de MIME a continuación utiliza un script de shell para establecer valores de configuración e instalar paquetes. También utiliza un trabajo systemd para iniciar la tarea después de la ejecución del servicio ecs y una vez que la API de introspección está disponible.

    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 START_TASK_SCRIPT_FILE="/etc/ecs/ecs-start-task.sh" cat <<- 'EOF' > ${START_TASK_SCRIPT_FILE} exec 2>>/var/log/ecs/ecs-start-task.log set -x # Install prerequisite tools yum install -y jq aws-cli # Wait for the ECS service to be responsive 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 EOF # Write systemd unit file UNIT="ecs-start-task.service" cat <<- EOF > /etc/systemd/system/${UNIT} [Unit] Description=ECS Start Task Requires=ecs.service After=ecs.service [Service] Restart=on-failure RestartSec=30 ExecStart=/usr/bin/bash ${START_TASK_SCRIPT_FILE} [Install] WantedBy=default.target EOF # Enable our ecs.service dependent service with `--no-block` to prevent systemd deadlock # See https://github.com/aws/amazon-ecs-agent/issues/1707 systemctl enable --now --no-block "${UNIT}" --==BOUNDARY==--
  4. Compruebe que sus instancias de contenedor se lancen en el clúster correcto y que sus tareas se hayan iniciado.

    1. Abra la consola en https://console.aws.amazon.com/ecs/v2.

    2. En la barra de navegación, seleccione la región en la que se encuentra el clúster.

    3. En el panel de navegación, seleccione Clusters y seleccione el clúster que aloja sus instancias de contenedor.

    4. En la página Clúster, elija Tareas y, a continuación, elija las tareas.

      Cada instancia de contenedor que lanzó debe tener la tarea ejecutándose en ella.

      Si no ve las tareas, puede iniciar sesión en sus instancias de contenedor con SSH y comprobar la información de depuración del archivo /var/log/ecs/ecs-start-task.log.