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 Linux Amazon ECS
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 soit efficace, elle présente quelques inconvénients, étant donné qu'Amazon ECS n'a pas connaissance du conteneur et qu'il ne peut pas surveiller l'UC, la mémoire, les ports ni aucune autre ressource utilisée. Afin de veiller à ce qu'Amazon ECS prenne en compte correctement toutes les ressources de la tâche, vous devez créer une définition de tâche pour le conteneur que vous voulez exécuter sur vos instances de conteneur. Utilisez ensuite Amazon ECS pour placer la tâche avec les données EC2 utilisateur Amazon au moment du lancement.
Le script de données EC2 utilisateur Amazon décrit dans la procédure suivante utilise l'API d'introspection Amazon ECS 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
-
Modifiez votre rôle IAM
ecsInstanceRole
pour ajouter des autorisations pour l'opération d'APIStartTask
. Pour plus d'informations, consultez la section Mettre à jour les autorisations pour un rôle dans le Guide de AWS Identity and Access Management l'utilisateur. -
Lancez une ou plusieurs instances de conteneur à l'aide de l'AMI Amazon Linux 2 optimisée pour Amazon ECS. Lancez de nouvelles instances de conteneur et utilisez l'exemple de script suivant dans les données EC2 utilisateur.
your_cluster_name
Remplacez-le par le cluster dans lequel l'instance de conteneur doit être enregistrée etmy_task_def
par 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 du fichier MIME en 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 après le lancement du service ecs et une fois que l'API d'introspection 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==-- -
Vérifiez que vos instances de conteneur sont lancées dans le cluster approprié et que vos tâches ont démarré.
Ouvrez la console à la https://console.aws.amazon.com/ecs/version 2
. -
Dans la barre de navigation, sélectionnez la région dans laquelle se trouve votre cluster.
-
Dans le panneau de navigation, choisissez Clusters, puis sélectionnez le cluster qui héberge vos instances de conteneur.
-
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 avec le protocole SSH et vérifier le fichier
/var/log/ecs/ecs-start-task.log
pour consulter les informations de débogage.