web-dev-qa-db-fra.com

Comment trouver l'adresse IP d'une instance Amazon EC2 au redémarrage

Au redémarrage, l'adresse IP d'une instance Amazon change. Comment trouver la nouvelle adresse IP en utilisant Java API?

45
figaro

En supposant que vous ne voulez pas attribuer une adresse IP élastique (et il y a des raisons pour lesquelles ce n'est pas toujours une solution), appelez simplement DescribeInstances sur l'instance redémarrée, qui renvoie un tas d'informations, y compris l'adresse IP publique.

Voici le AWS EC2 Java Documentation API sur le sujet.

5
Eight-Bit Guru

Au redémarrage, les adresses IP d'une instance EC2 ne changent pas . Ils changent généralement à l'arrêt/au démarrage d'une instance de démarrage EBS non VPC.

Voir ma réponse à votre question connexe ici:

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

Cela dit, vous pouvez trouver les adresses IP privées et publiques via l'appel API pour DescribeInstances dans votre langue particulière.

Si vous êtes sur l'instance elle-même, vous pouvez également trouver les adresses IP via l'API de données utilisateur à l'aide de HTTP simple:

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

Par exemple,

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

adresses IP élastiques sont recommandés pour conserver une adresse IP cohérente (statique) tournée vers l'extérieur pour un service ou un serveur particulier. Ceux-ci doivent être réaffectés à une instance après un arrêt/démarrage (mais pas après un redémarrage).

102
Eric Hammond
curl http://169.254.169.254/latest/meta-data/public-ipv4
51
buley

L'adresse IPv4 publique est également disponible à partir de l'instance EC2 comme ceci:

curl checkip.amazonaws.com

Et le nom d'hôte public est:

Dig -x $(curl -s checkip.amazonaws.com) +short
38
holmb

voici comment je l'ai fait sur une instance Ubuntu 12.04 EC2 dans un VPC:

curl ifconfig.me

je ne sais pas pourquoi mais public-ipv4 n'a pas été trouvé sous l'URL des métadonnées

3
Amir Aliabadi

Afin de récupérer l'IP publique de l'instance, vous devez d'abord obtenir l'ID d'instance de cette instance. Vous pouvez obtenir l'ID d'instance de l'instance en utilisant le code Java Java.

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

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

Et maintenant, afin d'obtenir l'IP publique, vous pouvez utiliser le code Java 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());
         }     
    }
}
1
Sachin Gaykar

Ils ont une classe util qui facilite l'accès aux métadonnées EC2. Par exemple

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

vous pouvez l'utiliser.

                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
Viral Prajapati

En supposant que vous redémarriez l'instance et que vous ne lanciez pas de zéro, vous pouvez attribuer une IP élastique qui reste toujours avec l'instance ec2 (sauf si vous déplacez l'IP vers un autre serveur). Cela vous permet de pointer tous vos DNS vers cette adresse IP et de ne pas craindre qu'un redémarrage vous cause des problèmes.

Je pense que c'est ce que vous demandez mais il y a d'autres choses que vous pourriez demander. L'IP interne du serveur change (si vous relancez l'instance sans redémarrer) et vous ne pouvez pas la `` réserver '', vous devrez donc peut-être créer un script pour conserver la nouvelle IP (si vous pointez les services internes vers elle).

j'espère que ça t'as aidé

0
Lostsoul

Vous pouvez utiliser l'application CLI CRUD pour les ressources AWS. AWS-CRUD-Manage r

Pour trouver toutes les instances ec2

./awsconsole.py ec2 all

Pour trouver toutes les données pour une instance ec2 (y compris IP privé et public)

./awsconsole.py ec2 find -i <id-insta`ce>
0
Rafal