Esecuzione di uno script quando si avvia un'istanza di container Linux di Amazon ECS - Amazon Elastic Container Service

Esecuzione di uno script quando si avvia un'istanza di container Linux di Amazon ECS

Potresti dover eseguire un container specifico per ogni istanza di container per gestire operazioni o problemi di sicurezza, ad esempio il monitoraggio, la sicurezza, i parametri, il rilevamento servizi o la creazione di log.

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, utilizza Amazon ECS per posizionare il processo al momento dell'avvio con i dati utente di Amazon EC2.

Lo script di dati utente di Amazon EC2 nella procedura seguente utilizza l'API di introspezione di Amazon ECS per identificare l'istanza di container. Quindi, utilizza la AWS CLI e il comando start-task per eseguire al suo interno un'attività specificata 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 autorizzazioni per un ruolo nella AWS Identity and Access ManagementGuida per l'utente .

  2. Avvia una o più istanze di container usando l'AMI Amazon Linux 2 ottimizzata per Amazon ECS. Avvia nuove istanze di container e utilizza il seguente script di esempio nei dati utente EC2. Sostituisci your_cluster_name con il cluster per l'istanza di container in cui effettuare la registrazione e my_task_def con la definizione di attività da eseguire nell'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 all'indirizzo https://console.aws.amazon.com/ecs/v2.

    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.