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. Sebbene questo metodo funzioni, presenta alcuni svantaggi perché Amazon ECS non conosce il contenitore e non può monitorare la memoriaCPU, le porte o qualsiasi altra risorsa utilizzata. Per garantire che Amazon ECS possa tenere conto correttamente di tutte le risorse delle attività, crea una definizione di attività per il contenitore da eseguire sulle istanze del contenitore. 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'ECSintrospezione di Amazon API per identificare l'istanza del contenitore. Quindi, utilizza il AWS CLI start-task comando and per eseguire un'attività specificata su se stessa durante l'avvio.

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

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

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

    Nota

    Il contenuto in MIME più parti riportato di seguito utilizza uno script di shell per impostare i valori di configurazione e installare i pacchetti. Utilizza anche un job systemd per avviare l'attività dopo che il ecs servizio è in esecuzione e l'introspezione API è 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 alla v2. https://console.aws.amazon.com/ecs/

    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 vedi le tue attività, puoi accedere alle istanze del contenitore con SSH e controllare il /var/log/ecs/ecs-start-task.log file per le informazioni di debug.