Esecuzione di uno script all'avvio di un'istanza di container Amazon ECS Linux - Amazon Elastic Container Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di uno script all'avvio di un'istanza di container Amazon ECS Linux

Potrebbe essere necessario eseguire un contenitore specifico su ogni istanza del contenitore per gestire problemi operativi o di sicurezza come il monitoraggio, la sicurezza, le metriche, l'individuazione dei servizi o la registrazione.

Per eseguire questa operazione, puoi configurare le istanze di container per chiamare il comando docker run con lo script di dati utente all'avvio o in un sistema di inizializzazione come Upstart o systemd. Anche se questo metodo funziona, presenta di alcuni svantaggi perché Amazon ECS non conosce i container e non può monitorare CPU, memoria, porte o le altre risorse utilizzate. Per garantire che Amazon ECS tenga correttamente conto di tutte le risorse delle attività, crea una definizione di attività per il container per l'esecuzione nelle istanze di container. Quindi, usa Amazon ECS per inserire l'attività al momento del lancio con i dati EC2 utente di Amazon.

Lo script dei dati EC2 utente di Amazon nella procedura seguente utilizza l'API di introspezione di Amazon ECS per identificare l'istanza del contenitore. Quindi, utilizza il AWS CLI start-task comando and per eseguire un'attività specifica su se stessa durante l'avvio.

Per avviare un'attività al momento dell'avvio di un'istanza di container
  1. Modifica il ruolo IAM ecsInstanceRole per aggiungere le autorizzazioni per l'operazione API StartTask. Per ulteriori informazioni, consulta Aggiornare le autorizzazioni per un ruolo nella Guida per l'AWS Identity and Access Management utente.

  2. Avvia una o più istanze di container utilizzando l'AMI Amazon Linux 2 ottimizzata per Amazon ECS. Avvia nuove istanze di container e usa il seguente script di esempio nei dati utente. EC2 Sostituisci your_cluster_name con il cluster l'istanza del contenitore in cui registrarsi e my_task_def con la definizione dell'attività da eseguire sull'istanza all'avvio.

    Per ulteriori informazioni, consulta Avvio di un'istanza di container Linux di Amazon ECS.

    Nota

    Il contenuto MIME in più parti mostrato di seguito usa uno script di shell per impostare i valori di configurazione e installare pacchetti. Utilizza anche un processo systemd per avviare l'attività una volta che il servizio ecs è in esecuzione e l'API di introspezione è disponibile.

    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==--
  3. Verifica che le istanze di container vengano avviate nel cluster corretto e che le attività siano state avviate.

    1. Apri la console nella https://console.aws.amazon.com/ecs/versione 2.

    2. Dalla barra di navigazione, scegli la regione in cui si trova il cluster.

    3. Nel pannello di navigazione, scegli Clusters (Cluster) e seleziona il cluster che ospita le istanze di container.

    4. Nella pagina Cluster, seleziona Attività e quindi le tue attività.

      Su ogni istanza di container che hai avviato dovrebbe essere in esecuzione la tua attività.

      Se non visualizzi le attività, puoi accedere alle istanze di container con SSH e controllare le informazioni di debug nel file /var/log/ecs/ecs-start-task.log.