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 リソースネーム (ARN) の長い形式が使用され、ECS クラスター名が含まれるようになりました。この記事では、新しい ARN 形式または古い 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
出力は、コンテナインスタンス ID を含むコンテナインスタンス ARN 値を返します。
2. 次の手順を実行して、AWS Batch コンピューティング環境に対応する Amazon ECS クラスターを見つけます。
Amazon ECS コンソールを開きます。
クラスター を選択します。
サービスタブを選択します。
次に、次の形式で表示されるクラスター名を検索します: 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 インスタンスの IP アドレスを取得するには、Amazon EC2 コンソールまたは AWS CLI のいずれかを使用できます。
Amazon EC2 コンソール
1. Amazon EC2 コンソールを開きます。
2. [Running instances] を選択します。
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. 子ジョブの コンテナインスタンス ID を取得するには、個々の子ジョブで次の describe-jobs コマンドを実行します。
**重要:**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 番目のノードにアクセスし、以下同様です。詳細については、マルチノードの並列ジョブ を参照してください。
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"