0
我正嘗試使用AWS開發工具包獲取AWS中所有EC2實例的實例ID。無法聯繫EC2元數據服務
AmazonEC2 ec2Service = null;
String aWSAccessId = "XXXXXXXXXXXXXXXXXXXX";
String aWSSecretKey = "XXXXXXXXXXXXXXXXXXXXX";
if (null != aWSAccessId && !"".equals(aWSAccessId)
&& null != aWSSecretKey && !"".equals(aWSSecretKey)) {
ec2Service = new AmazonEC2Client(new BasicAWSCredentials(aWSAccessId, aWSSecretKey));
}
DescribeInstancesResult result = ec2Service.describeInstances();
String instanceid = EC2MetadataUtils.getInstanceId();
String availabilityZone = EC2MetadataUtils.getAvailabilityZone();
System.out.println("availabilityZone-----> "+availabilityZone);
System.out.println("instanceid-----> "+instanceid);
List<Reservation> reservations = result.getReservations();
System.out.println("reservations-----> "+reservations.toString());
for (Reservation reservation : reservations)
{
List<Instance> instances = reservation.getInstances();
System.out.println("instances-----> "+instances.size());
for (Instance instance : instances)
{
System.out.println("Instances----> "+instance.getInstanceId());
}
}
但我無法獲取instances.I還試圖使用EC2MetadataUtils.java在我的Eclipse IDE中配置SDK來獲取詳細信息。
EC2MetadataUtils ec2Meta = new EC2MetadataUtils();
String amiId = ec2Meta.getAmiId();
System.out.println("Ec2 Metadata ----amiId---> "+amiId);
String availabilityZone = ec2Meta.getAvailabilityZone();
System.out.println("Ec2 Metadata ----AvailabilityZone---> "+availabilityZone);
/*String eC2InstanceRegion = ec2Meta.getEC2InstanceRegion();
System.out.println("Ec2 Metadata ----eC2InstanceRegion---> "+eC2InstanceRegion);*/
String instanceId = ec2Meta.getInstanceId();
System.out.println("Ec2 Metadata ----instanceId---> "+instanceId);
InstanceInfo instanceInfo = ec2Meta.getInstanceInfo();
System.out.println("Ec2 Metadata "+instanceInfo.getAccountId());
System.out.println("Ec2 Metadata "+instanceInfo.getInstanceId());
System.out.println("Ec2 Metadata "+instanceInfo.getPrivateIp());
System.out.println("Ec2 Metadata "+instanceInfo.getRegion());
System.out.println("Ec2 Metadata "+instanceInfo.getArchitecture());
System.out.println("Ec2 Metadata "+instanceInfo.getInstanceType());
System.out.println("Ec2 Metadata "+instanceInfo.getVersion());
System.out.println("Ec2 Metadata "+instanceInfo.getImageId());
String publicKey = EC2MetadataUtils.getPublicKey();
System.out.println("Ec2 Metadata "+publicKey);
IAMInfo AMInstanceProfileInfo = EC2MetadataUtils.getIAMInstanceProfileInfo();
System.out.println("Ec2 Metadata "+AMInstanceProfileInfo.lastUpdated);
String MacAddress = EC2MetadataUtils.getMacAddress();
System.out.println("Ec2 Metadata "+MacAddress);
但是,我得到null只爲最初的字段,最後我得到下面的錯誤。
Ec2 Metadata null
Ec2 Metadata null
Ec2 Metadata null
Exception in thread "main" com.amazonaws.SdkClientException: Unable to contact EC2 metadata service.
完整性檢查:您是否正在從EC2實例運行此代碼? EC2元數據服務僅在您的實例中可用,並且該服務將獲取描述正在運行的實例的元數據:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html –
否,我正在EC2實例之外運行代碼。 KIndly讓我知道如何在實例外訪問EC2的元數據。謝謝。 – Amar
專注於您的第一個代碼片段...返回[DescribeInstancesResult]的請求(http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/DescribeInstancesResult.html) 。您可以像預先嚐試的那樣從預訂和實例集合中獲取所需的所有內容。從調試開始。 AWS SDK的響應是否成功?是否有任何保留或實例返回響應?如果不是,爲什麼? (也許是因爲您沒有爲您的AmazonEC2Client指定一個區域?SDK請求將僅返回您請求的區域中的實例。) –