Подтвердить что ты не робот

Как найти IP-адрес экземпляра ECA Amazon при перезагрузке

При перезагрузке изменяется IP-адрес экземпляра Amazon. Как найти новый IP-адрес с помощью java API?

4b9b3361

Ответ 1

Предполагая, что вы не хотите назначать Elastic IP-адрес (и есть причины, по которым это не всегда решение), просто вызовите DescribeInstances на перезагруженный экземпляр, который возвращает кучу информации, включая Public IP Address.

Здесь Документация API Java AWS EC2 по этой теме.

Ответ 2

При перезагрузке IP-адреса экземпляра EC2 не изменяются. Обычно они меняются при остановке/запуске экземпляра загрузки, отличного от VPC EBS.

Посмотрите мой ответ на свой вопрос:

https://stackoverflow.com/questions/7533871/difference-between-rebooting-and-stop-starting-an-amazon-ec2-instance

Таким образом, вы можете найти частные и общедоступные IP-адреса через API-вызов DescribeInstances на вашем конкретном языке.

Если вы находитесь в самом экземпляре, вы также можете найти IP-адреса через API пользовательских данных, используя простой HTTP:

http://instance-data/latest/meta-data/local-ipv4
http://instance-data/latest/meta-data/public-ipv4

Например,

wget -qO- http://instance-data/latest/meta-data/public-ipv4

Эластичные IP-адреса рекомендуются для поддержания постоянного (статического) внешнего IP-адреса для конкретной службы или сервера. Они должны быть повторно назначены экземпляру после остановки/запуска (но не после перезагрузки).

Ответ 3

curl http://169.254.169.254/latest/meta-data/public-ipv4

Ответ 4

Открытый IPv4-адрес также доступен из экземпляра EC2 следующим образом:

curl checkip.amazonaws.com

И общедоступное имя хоста:

dig -x $(curl -s checkip.amazonaws.com) +short

Ответ 5

так я сделал это на экземпляре Ubuntu 12.04 EC2 в VPC:

curl ifconfig.me

не уверен, почему, но public-ipv4 не был найден под URL-адресами метаданных

Ответ 6

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

 List<Instance> instances = runInstancesResult.getReservation().getInstances();

 String instanceId = instances.get(0).toString().substring(13, 23);

И теперь, чтобы получить общедоступный IP-адрес, вы можете использовать следующий код Java.

public void fetchInstancePublicIP() {
    DescribeInstancesRequest request = new   DescribeInstancesRequest().withInstanceIds("i-d99ae7d2");
    DescribeInstancesResult result= ec2.describeInstances(request);
    List <Reservation> list  = result.getReservations();

    for (Reservation res:list) {
         List <Instance> instanceList= res.getInstances();

         for (Instance instance:instanceList){

                 System.out.println("Public IP :" + instance.getPublicIpAddress());     
                 System.out.println("Public DNS :" + instance.getPublicDnsName());
                 System.out.println("Instance State :" + instance.getState());
                 System.out.println("Instance TAGS :" + instance.getTags());
         }     
    }
}

Ответ 7

Они используют класс, который облегчает доступ к метаданным EC2. Например,

EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname();
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s();

Ответ 8

Предполагая, что вы перезагрузите экземпляр и не запускаетесь с нуля, вы можете назначить эластичный IP, который всегда остается с экземпляром ec2 (если вы не переместите IP на другой сервер). Это позволяет указать весь ваш DNS на этот IP-адрес и не беспокоиться о том, что перезагрузка вызовет у вас проблемы.

Я думаю, это то, о чем вы спрашиваете, но есть другие вещи, которые вы могли бы спросить. Внутренний IP-адрес сервера изменяется (если вы перезапускаете экземпляр не перезагружается), и вы не можете его "зарезервировать", поэтому вам может понадобиться создать script, чтобы сохранить новый IP-адрес (если ваши внутренние службы указывают на него).

надеюсь, что поможет

Ответ 9

Вы можете использовать это.

                var ipofnewServer = string.Empty;    
                while (string.IsNullOrEmpty(ipofnewServer))
                {
                    var statusRequest1 = new DescribeInstancesRequest
                    {
                        InstanceIds = new List<string>() { instanceId }
                    };

                    var result = amazonEc2client.DescribeInstances(statusRequest1);
                    var status = result.Reservations[0].Instances.FirstOrDefault();
                    if (status != null)
                    {
                        ipofnewServer = status.PublicIpAddress;
                    }
                }