У меня есть экземпляр AWS EC2, развернутый как сервер, и мне нужно узнать его общедоступный IP-адрес. Однако, чтобы знать, что я должен сначала узнать идентификатор экземпляра моего экземпляра.
Цель:
Прочитав документацию Amazon, я придумал метод Java, который возвращает IP-адреса всех экземпляров, , но это не то, что мне нужно , мне нужен метод, который возвращает только идентификатор экземпляра или общедоступный IP-адрес запущенного экземпляра.
/**
* Returns a list with the public IPs of all the active instances, which are
* returned by the {@link #getActiveInstances()} method.
*
* @return a list with the public IPs of all the active instances.
* @see #getActiveInstances()
* */
public List<String> getPublicIPs(){
List<String> publicIpsList = new LinkedList<String>();
//if there are no active instances, we return immediately to avoid extra
//computations.
if(!areAnyActive())
return publicIpsList;
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.setInstanceIds(instanceIds);
DescribeInstancesResult result = ec2.describeInstances(request);
List<Reservation> reservations = result.getReservations();
List<Instance> instances;
for(Reservation res : reservations){
instances = res.getInstances();
for(Instance ins : instances){
LOG.info("PublicIP from " + ins.getImageId() + " is " + ins.getPublicIpAddress());
publicIpsList.add(ins.getPublicIpAddress());
}
}
return publicIpsList;
}
В этом коде у меня есть массив с идентификаторами экземпляров всех активных экземпляров, но я не знаю, являются ли они «мной» или нет. Поэтому я предполагаю, что моим первым шагом будет узнать, кто я, а затем попросить мой общедоступный IP-адрес.
Можно ли изменить предыдущий метод, чтобы получить то, что я хочу? Есть ли более эффективный способ сделать это?
EDIT
Действительно? Может ли кто-нибудь объяснить мне, как вопрос о виртуализированном сервере, в данном случае об экземпляре EC2 AWS, выходит за рамки темы, когда внутри форума можно задавать вопросы о серверах?
Это полностью соответствует следующим двум пунктам правил:
Кроме того, на этом форуме есть множество вопросов (даже те, которые требуют ответов по программированию), и тот факт, что кто-то действительно ответил на мой вопрос, подтверждает мою точку зрения - это правильное место, чтобы задать его .
Я оставляю этот комментарий как неодобрение ваших действий, это такие люди, как вы, отталкивают новых пользователей . Я знаю, что пометил это как ответ, но я все еще делаю это. Почему? Потому что важен принцип.
Вы можете использовать описанные здесь метаданные экземпляра http://docs.aws.amazon.com/AWSEC2/ latest / UserGuide / AESDG-chapter-instancedata.html
ниже. Я написал простой фрагмент кода Java, который печатает идентификатор запущенного экземпляра
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;
public final class Main {
public static void main(String[] args) throws Exception {
URL url = new URL("http://169.254.169.254/latest/meta-data/instance-id");
URLConnection conn = url.openConnection();
Scanner s = new Scanner(conn.getInputStream());
if (s.hasNext()) {
System.out.println(s.next());
}
}
}
Код должен выполняться из запущенного экземпляра ec2