Я пытаюсь получить идентификаторы экземпляров всех экземпляров EC2 в AWS с использованием AWS SDK.Не удается связаться с службой метаданных 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 для извлечения деталей путем настройки SDK в моей Eclipse IDE.
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) , Вы можете получить все, что вам нужно, из коллекций «Бронирование» и «Экземпляр», как вы уже делали. Начните с отладки. Успешен ли ответ от SDS SDK? Являются ли какие-либо оговорки или случаи возвратами с ответом? Если нет, то почему? (Возможно, потому, что вы не указали регион для своего AmazonEC2Client? Запрос SDK будет возвращать только экземпляры в запрошенном регионе.) –