Comment trouver l’adresse IP d’une instance amazon EC2 au redémarrage

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

En supposant que vous ne voulez pas atsortingbuer une adresse IP Elastic (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 une adresse IP publique.

Voici la documentation de l’API Java AWS EC2 sur le sujet.

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

Voir ma réponse à votre question 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.

Si vous êtes sur l’instance elle-même, vous pouvez également trouver les adresses IP via l’API de données utilisateur en utilisant un 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 

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

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

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

 curl checkip.amazonaws.com 

Et le nom d’hôte public est:

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

c’est comme ça que je l’ai fait sur une instance Ubuntu 12.04 EC2 dans un VPC:

 curl ifconfig.me 

pas sûr pourquoi public-ipv4 n’a pas été trouvé sous l’URL méta-données

Pour récupérer l’adresse 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 suivant.

  List instances = runInstancesResult.getReservation().getInstances(); Ssortingng instanceId = instances.get(0).toSsortingng().subssortingng(13, 23); 

Et maintenant, pour obtenir l’adresse IP publique, vous pouvez utiliser le code Java suivant.

 public void fetchInstancePublicIP() { DescribeInstancesRequest request = new DescribeInstancesRequest().withInstanceIds("i-d99ae7d2"); DescribeInstancesResult result= ec2.describeInstances(request); List  list = result.getReservations(); for (Reservation res:list) { List  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()); } } } 

Ils ont une classe util qui facilite l’access aux métadonnées EC2. Par exemple

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

En supposant que vous redémarriez l’instance et que vous ne la lanciez pas de zéro, vous pouvez atsortingbuer une adresse IP élastique qui rest toujours avec l’instance ec2 (à moins que vous ne déplaciez l’adresse IP vers un autre serveur). Cela vous permet de pointer tout votre DNS vers cette adresse IP et de ne pas craindre qu’un redémarrage ne 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 et ne le redémarre pas) et vous ne pouvez pas la “réserver”. Vous devrez peut-être créer un script pour vous garder la nouvelle adresse IP (si vos services internes de pointage y sont liés).

J’espère que cela pourra aider

vous pouvez utiliser ceci.

  var ipofnewServer = ssortingng.Empty; while (ssortingng.IsNullOrEmpty(ipofnewServer)) { var statusRequest1 = new DescribeInstancesRequest { InstanceIds = new List() { instanceId } }; var result = amazonEc2client.DescribeInstances(statusRequest1); var status = result.Reservations[0].Instances.FirstOrDefault(); if (status != null) { ipofnewServer = status.PublicIpAddress; } }