Je veux obtenir l'ID et l'adresse IP d'une instance Amazon Elastic Compute Cloud (Amazon EC2) pour une tâche AWS Batch. Comment trouver ces informations ?
Brève description
Pour obtenir des informations sur l'instance Amazon EC2 d'une tâche AWS Batch, commencez par obtenir l'ID d'instance de conteneur Amazon Elastic Container Service (Amazon ECS) de la tâche. Ensuite, utilisez l'ID d'instance de conteneur pour obtenir le nom de cluster Amazon ECS et l'ID d'instance Amazon EC2 associés. Vous pouvez utiliser l'ID d'instance Amazon EC2 pour obtenir l'adresse IP de l'instance.
Remarque : les ressources Amazon ECS créées après le 1er avril 2021 utilisent un nouveau format long Amazon Resource Name (ARN) qui inclut désormais le nom du cluster ECS. Cet article fournit des instructions pour utiliser soit le nouveau, soit l'ancien format ARN. Pour plus d'informations, consultez ARN et ID dans le guide du développeur Amazon ECS.
Solution
Remarque : si vous recevez des erreurs lors de l'exécution des commandes AWS Command Line Interface (AWS CLI), assurez-vous que vous utilisez la version la plus récente d'AWS CLI.
Obtenir l'ID d'instance de conteneur Amazon ECS, le nom du cluster et l'ID d'instance Amazon EC2 de la tâche AWS Batch
Pour le nouveau format ARN
Obtenez l'ID d'instance de conteneur Amazon ECS, le nom du cluster et l'ID d'instance Amazon EC2 de votre tâche AWS Batch en exécutant le script bash suivant :
Important : remplacez <your_job_ID> par l'ID de tâche de votre tâche AWS Batch.
#!/bin/bash
JOB_ID=<your_job_ID>
CONTAINER_INSTANCE_ARN=$(aws batch describe-jobs --jobs "$JOB_ID" --query 'jobs[0].container.containerInstanceArn' --output text);
TMP=${CONTAINER_INSTANCE_ARN#*/}
CLUSTER_NAME=${TMP%/*}
EC2_ID=$(aws ecs describe-container-instances --container-instances "$CONTAINER_INSTANCE_ARN" --cluster "$CLUSTER_NAME" --query "containerInstances[0].ec2InstanceId" --output text)
echo ${EC2_ID}
Pour l'ancien format ARN
1. Obtenez l'ID d'instance de conteneur Amazon ECS de votre tâche AWS Batch en exécutant la commande describe-jobs suivante :
$ aws batch describe-jobs --jobs <your_job_ID> --query 'jobs[0].container.containerInstanceArn' --output text
La sortie renvoie une valeur ARN d'instance de conteneur qui inclut l'ID d'instance de conteneur.
2. Trouvez le cluster Amazon ECS qui correspond à votre environnement de calcul AWS Batch en procédant comme suit :
Ouvrez la console Amazon ECS.
Choisissez Clusters.
Choisissez l'onglet Services.
Ensuite, recherchez le nom du cluster qui apparaît dans le format suivant : ComputeEnvironmentName_Batch_RandomStringOfCharacteres
3. Obtenez l'ID d'instance Amazon EC2 associée au cluster en exécutant la commande describe-container-instances suivante :
Important : remplacez <Your_Cluster_Name> par le nom de votre cluster Amazon ECS. Remplacez <Your_Container_Instance_ID> par l'ID d'instance de conteneur Amazon ECS de votre tâche AWS Batch.
$ aws ecs describe-container-instances --cluster <Your_Cluster_Name> --container-instances <Your_Container_Instance_ID> --query "containerInstances[0].ec2InstanceId"
La sortie renvoie l'ID d'instance Amazon EC2 associée à la tâche.
Utiliser l'ID d'instance Amazon EC2 pour obtenir l'adresse IP de l'instance
Vous pouvez utiliser la console Amazon EC2 ou l'AWS CLI pour obtenir l'adresse IP d'une instance Amazon EC2.
Console Amazon EC2
1. Ouvrez la console Amazon EC2.
2. Choisissez « Running instances » (Instances en cours d'exécution).
3. Dans la colonne Instance ID (ID d'instance), trouvez l'ID d'instance de votre instance Amazon EC2.
4. Dans la même ligne que votre ID d'instance, regardez la colonne IPv4 Public IP address (Adresse IP publique IPv4). La valeur indiquée est l'adresse IP de l'instance Amazon EC2.
AWS CLI
Exécutez la commande describe-instances suivante :
Important : remplacez <EC2_ID> par votre ID d'instance Amazon EC2.
aws ec2 describe-instances --instance-ids <EC2_ID> --query 'Reservations[0].Instances[0].{"PrivateIP":PrivateIpAddress,"PublicIP":PublicIpAddress}'
Pour obtenir des informations sur l'instance pour les tâches AWS Batch à plusieurs nœuds
1. Obtenez l'ID d'instance de conteneur pour une tâche enfant en exécutant la commande describe-jobs suivante sur une tâche enfant individuelle :
Important : remplacez Your_Job_ID par votre ID de tâche AWS Batch.
$ aws batch describe-jobs --jobs Your_Job_ID#1 --query 'jobs[0].container.containerInstanceArn' --output text
Important : comme chaque tâche enfant se trouve sur un nœud unique, la tâche parente ne dispose pas d'informations sur l'instance de conteneur. Pour les tâches enfants, utilisez la notation de nœud pour ajouter l'index de la tâche enfant à l'ID de tâche. Dans cet exemple, la commande describe-jobs, #1 accède au premier nœud de la tâche. L'ajout du numéro #2 accède au deuxième nœud, et ainsi de suite. Pour plus d'informations, consultez Tâches parallèles à plusieurs nœuds.
2. Obtenez l'ID d'instance Amazon EC2 associée en exécutant la commande describe-container-instances suivante :
Important : remplacez Your_Cluster_Name par le nom de votre cluster Amazon ECS. Remplacez Your_Container_Instance_ID par l'ID d'instance de conteneur Amazon ECS de votre tâche AWS Batch.
$ aws ecs describe-container-instances --cluster Your_Cluster_Name --container-instances Your_Container_Instance_ID --query "containerInstances[0].ec2InstanceId"