Получить идентификатор экземпляра EC2 через Java [закрыто]

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

Цель:

  • У меня есть Java-код, работающий в моем экземпляре, и я хочу, чтобы этот код определял текущий IP или Instance-ID экземпляра, на котором он выполняется.

Прочитав документацию 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, выходит за рамки темы, когда внутри форума можно задавать вопросы о серверах?

Это полностью соответствует следующим двум пунктам правил:

  • Операционные системы, оборудование и программное обеспечение для серверов и рабочих станций
  • Виртуализация бизнес / корпоративного уровня.

Кроме того, на этом форуме есть множество вопросов (даже те, которые требуют ответов по программированию), и тот факт, что кто-то действительно ответил на мой вопрос, подтверждает мою точку зрения - это правильное место, чтобы задать его .

Я оставляю этот комментарий как неодобрение ваших действий, это такие люди, как вы, отталкивают новых пользователей . Я знаю, что пометил это как ответ, но я все еще делаю это. Почему? Потому что важен принцип.

-1
задан 17 April 2014 в 13:03
1 ответ

Вы можете использовать описанные здесь метаданные экземпляра 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

2
ответ дан 5 December 2019 в 19:28

Теги

Похожие вопросы