2017-02-12 2 views
0

Я создал программу Java, которая позволяет создавать экземпляры программно.
Мне нужно разобрать возвращаемый объект, чтобы напечатать публичный IP-адрес экземпляра.Amazon aws Public IP из запущенного экземпляра с использованием Java

Однако, когда я выдаю результат функции EC2 клиента Amazon, выход представляет собой лабиринт списков и хеш-карт, и я не знаю, как его разобрать.

Может ли кто-нибудь сказать мне более простой подход к этому?

Я попытался преобразовать результат Ec2.describeInstances().getReservations() в строку и затем манипулировать строкой для вывода общедоступного IP-адреса.

Есть ли более простой способ достичь этого?

Код:

DescribeAddressesRequest add =new DescribeAddressesRequest(); 
String Desc= client.describeInstances().getReservations().get(1).toString(); 
+0

Кстати: 'vagrant-aws' уже разрешает программные экземпляры Ec2 –

+0

Я не знаю, что' getReservations(). Get (1) 'возвращает. Какой Java API для Ec2 у вас есть? Что случилось с итерацией по Hashmaps? –

+0

Вызов 'runInstances()' API возвращает «RunInstancesResult», который может использоваться для извлечения информации о экземпляре. Используйте getReservation(). GetInstances() 'для получения списка экземпляров, которые были запущены. –

ответ

1

Вам нужен Instance класс

getPublicIpAddress()
Адрес общественного IPv4, назначенный примеру, если применимо

Я не Не знаю API, но из Резервации, лет u получите к экземпляру.

getInstances()
один или несколько экземпляров

for (Reservation r : client.describeInstances().getReservations()) { 
    for (Instance i : r.getInstances()) { 
     String ipv4 = i.getPublicIpAddress(); 
    } 
} 
1

В SDK не возвращает HashMaps он возвращает фактические Java классы. Я не уверен, как вы получаете HashMaps. Преобразование возвращаемого объекта в String и манипулирование этим, безусловно, не рекомендуется.

Если вы посмотрите на API Docs вы увидите, что describeInstances() возвращает DescribeInstancesResult, который содержит список Reservation объектов, каждый из которых содержит список объектов Instance. Объект Instance имеет метод getPublicIpAddress(). Таким образом, вы могли бы сделать что-то вроде следующего:

DescribeInstancesRequest request = new DescribeInstancesRequest(); 
String ipAddress = client.describeInstances(request) // You pass the request here 
    .getReservations().get(0) // Get the first reservation 
    .getInstances().get(0) // Get the first instance in the reservation 
    .getPublicIpAddress(); // Get the public IP address of the instance 

Я предполагаю, что вы хотите добавить некоторые критерии, такие как ID бронирования, к DescribeInstancesRequest объекта, так что вы можете ожидать только один экземпляр, чтобы быть в ответе.

Обратите внимание, что публичный IP-адрес может не присваиваться немедленно. Возможно, вам придется сделать это в цикле, проверяя, был ли еще присвоен IP-адрес.

Смежные вопросы