Как найти IP-адрес экземпляра Amazon EC2 при перезагрузке - PullRequest
45 голосов
/ 23 сентября 2011

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

Ответы [ 10 ]

102 голосов
/ 24 сентября 2011

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

Смотрите мой ответ на ваш связанный вопрос здесь:

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-адреса для конкретной службы или сервера. Их необходимо переназначить экземпляру после остановки / запуска (но не после перезагрузки).

51 голосов
/ 15 мая 2012
curl http://169.254.169.254/latest/meta-data/public-ipv4
38 голосов
/ 04 апреля 2016

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

curl checkip.amazonaws.com

И публичное имя хоста:

dig -x $(curl -s checkip.amazonaws.com) +short
5 голосов
/ 23 сентября 2011

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

Ниже приведена документация по API Java AWS EC2 по теме.

3 голосов
/ 11 февраля 2014

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

curl ifconfig.me

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

1 голос
/ 13 июля 2015

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

EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicHostname();
EC2MetadataUtils.getNetworkInterfaces().get(0).getPublicIPv4s();
1 голос
/ 08 августа 2014

Чтобы получить общедоступный 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());
         }     
    }
}
0 голосов
/ 15 октября 2018

Вы можете использовать приложение CLI CRUD для ресурсов AWS. AWS-CRUD-Manage r

Чтобы найти все экземпляры ec2

./awsconsole.py ec2 all

Чтобы найти все данные для одного экземпляра ec2 (включая IP priv и public)

./awsconsole.py ec2 find -i <id-insta`ce>
0 голосов
/ 12 февраля 2016

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

                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;
                    }
                }
0 голосов
/ 23 сентября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...