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请求将仅返回您请求的区域中的实例。) –