如何获取 AWS Batch 任务的 Amazon EC2 实例的 ID 和 IP 地址?

上次更新日期:2022 年 4 月 12 日

我想获取 AWS Batch 任务的 Amazon Elastic Compute Cloud (Amazon EC2) 实例的 ID 和 IP 地址。我如何找到这些信息?

简短描述

要获取有关 AWS Batch 任务的 Amazon EC2 实例的信息,请首先获取该任务的 Amazon Elastic Container Service (Amazon ECS) 容器实例 ID。然后,使用容器实例 ID 获取关联的 Amazon ECS 集群名称和 Amazon EC2 实例 ID。您可以使用 Amazon EC2 实例 ID 获取实例的 IP 地址。

注意:2021 年 4 月 1 日之后创建的 Amazon ECS 资源使用了新的长 Amazon Resource Name (ARN) 格式,该格式现在包含了 ECS 集群名称。本文提供了有关使用新旧 ARN 格式的说明。有关更多信息,请参阅《Amazon ECS 开发人员指南》中的 ARN 和 ID

解决方法

请注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

获取 AWS Batch 任务的 Amazon ECS 容器实例 ID、集群名称和 Amazon EC2 实例 ID

对于新的 ARN 格式

通过运行以下 bash 脚本获取 AWS Batch 任务的 Amazon ECS 容器实例 ID集群名称和 Amazon EC2 实例 ID

重要提示:<your_job_ID> 替换为 AWS Batch 任务的任务 ID

#!/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}

对于旧的 ARN 格式

1.    通过运行以下 describe-jobs 命令,获取您的 AWS Batch 任务的 Amazon ECS 容器实例 ID

$ aws batch describe-jobs --jobs <your_job_ID> --query 'jobs[0].container.containerInstanceArn' --output text

输出将返回容器实例 ARN 值,其中包含容器实例 ID

2.    通过执行以下操作,找到与 AWS Batch 计算环境对应的 Amazon ECS 集群:
打开 Amazon ECS 控制台
选择集群
选择 Services(服务)选项卡。
然后,搜索用以下格式显示的集群名称:ComputeEnvironmentName_Batch_RandomStringOfCharacters

3.    通过运行以下 describe-container-instances 命令,获取集群关联的 Amazon EC2 实例 ID

重要提示:<Your_Cluster_Name> 替换为您的 Amazon ECS 集群名称。将 <Your_Container_Instance_ID> 替换为您的 AWS Batch 任务的 Amazon ECS 容器实例 ID

$ aws ecs describe-container-instances --cluster <Your_Cluster_Name> --container-instances <Your_Container_Instance_ID> --query "containerInstances[0].ec2InstanceId"

输出将返回任务关联的 Amazon EC2 实例 ID

使用 Amazon EC2 实例 ID 获取实例的 IP 地址

您可以使用 Amazon EC2 控制台或 AWS CLI 获取 Amazon EC2 实例的 IP 地址。

Amazon EC2 控制台

1.    打开 Amazon EC2 控制台

2.    选择正在运行的实例

3.    在实例 ID 列中,找到 Amazon EC2 实例的实例 ID

4.    在实例 ID 所在的行中,查看 IPv4 公有 IP 地址列。列出的值就是 Amazon EC2 实例的 IP 地址。

AWS CLI

运行以下 describe-instances 命令:

重要提示:<EC2_ID> 替换为您的 Amazon EC2 实例 ID

aws ec2 describe-instances --instance-ids <EC2_ID> --query 'Reservations[0].Instances[0].{"PrivateIP":PrivateIpAddress,"PublicIP":PublicIpAddress}'

获取多节点 AWS Batch 任务的实例信息

1.    通过对单个子任务运行以下 describe-jobs 命令,获取子任务的容器实例 ID

重要提示:Your_Job_ID 替换为 AWS Batch 任务 ID

$ aws batch describe-jobs --jobs Your_Job_ID#1 --query 'jobs[0].container.containerInstanceArn' --output text

重要提示:因为每个子任务都在唯一的节点上,所以父任务没有有关容器实例的信息。对于子任务,请使用节点表示法将子任务的索引附加到任务 ID。在此示例中,describe-jobs 命令中,#1 将访问任务的第一个节点。添加数字 #2 将访问第二个节点,依此类推。有关更多信息,请参阅多节点并行任务

2.    通过运行以下 describe-container-instances 命令,获取关联的 Amazon EC2 实例 ID

重要提示:Your_Cluster_Name 替换为您的 Amazon ECS 集群名称。将 Your_Container_Instance_ID 替换为您的 AWS Batch 任务的 Amazon ECS 容器实例 ID

$ aws ecs describe-container-instances --cluster Your_Cluster_Name --container-instances Your_Container_Instance_ID --query "containerInstances[0].ec2InstanceId"

这篇文章对您有帮助吗?


您是否需要账单或技术支持?