Exécution d'un script lorsque vous lancez une instance de conteneur Amazon ECS Linux - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exécution d'un script lorsque vous lancez une instance de conteneur Amazon ECS Linux

Vous devrez peut-être exécuter un conteneur spécifique sur chaque instance de conteneur pour gérer les opérations ou les problèmes de sécurité tels que la surveillance, la sécurité, les métriques, la découverte de services ou la journalisation.

Pour ce faire, vous pouvez configurer vos instances de conteneur de façon à ce qu'elles appellent la commande docker run avec le script de données utilisateur au moment du lancement ou dans un système d'initialisation comme Upstart ou systemd. Bien que cette méthode fonctionne, elle présente certains inconvénients car Amazon n'ECSa aucune connaissance du conteneur et ne peut pas surveiller la mémoireCPU, les ports ou toute autre ressource utilisée. Pour qu'Amazon ECS puisse correctement comptabiliser toutes les ressources de tâches, créez une définition de tâche pour le conteneur à exécuter sur vos instances de conteneur. Utilisez ensuite Amazon ECS pour placer la tâche au moment du lancement avec les données EC2 utilisateur Amazon.

Le script de données EC2 utilisateur Amazon décrit dans la procédure suivante utilise l'ECSintrospection Amazon API pour identifier l'instance de conteneur. Ensuite, il utilise la start-task commande AWS CLI et pour exécuter une tâche spécifiée sur lui-même au démarrage.

Pour démarrer une tâche au moment du lancement d'une instance de conteneur
  1. Modifiez votre ecsInstanceRole IAM rôle pour ajouter des autorisations pour l'StartTaskAPIopération. Pour plus d'informations, consultez Modification d'un rôle dans le Guide de l'utilisateur AWS Identity and Access Management .

  2. Lancez une ou plusieurs instances de conteneur à l'aide d'Amazon Linux 2 ECS AMI optimisé pour Amazon. Lancez de nouvelles instances de conteneur et utilisez l'exemple de script suivant dans les données EC2 utilisateur. Remplacez your_cluster_name avec le cluster dans lequel l'instance de conteneur doit s'enregistrer et my_task_def avec la définition de tâche à exécuter sur l'instance au lancement.

    Pour de plus amples informations, veuillez consulter Lancement d'une instance de conteneur Amazon ECS Linux.

    Note

    Le contenu en MIME plusieurs parties ci-dessous utilise un script shell pour définir les valeurs de configuration et installer les packages. Il utilise également une tâche systemd pour démarrer la tâche une fois que le ecs service est en cours d'exécution et que l'introspection API 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==--
  3. Vérifiez que vos instances de conteneur sont lancées dans le cluster approprié et que vos tâches ont démarré.

    1. Ouvrez la console à la https://console.aws.amazon.com/ecs/version 2.

    2. Dans la barre de navigation, sélectionnez la région dans laquelle se trouve votre cluster.

    3. Dans le panneau de navigation, choisissez Clusters, puis sélectionnez le cluster qui héberge vos instances de conteneur.

    4. Sur la page Cluster, choisissez Tâches, puis choisissez vos tâches.

      Chaque instance de conteneur que vous avez lancée doit comporter votre tâche en cours d'exécution.

      Si vous ne voyez pas vos tâches, vous pouvez vous connecter à vos instances de conteneur SSH et consulter le /var/log/ecs/ecs-start-task.log fichier pour obtenir des informations de débogage.