48 votes

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

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

0 votes

Pourquoi n'attribuez-vous pas une IP élastique fixe ?

105voto

Eric Hammond Points 10699

Au redémarrage, les adresses IP d'une instance EC2 sont no changement. 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 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 par l'intermédiaire de l'appel API de DescribeInstances dans votre langue particulière.

Si vous êtes sur l'instance elle-même, vous pouvez également trouver les adresses IP par le biais de l'API des données utilisateur en utilisant le simple HTTP :

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 externe cohérente (statique) pour un service ou un serveur particulier. Ces adresses doivent être réattribuées à une instance après un arrêt/démarrage (mais pas après un redémarrage).

1 votes

C'est une réponse complète et solide. Le "wget" fournit la bonne réponse spécifique et la prose qui l'entoure est également utile.

53voto

buley Points 7880
curl http://169.254.169.254/latest/meta-data/public-ipv4

1 votes

Cela devrait être la réponse acceptée, et c'est également ce qu'ils disent dans les docs. docs.aws.amazon.com/AWSEC2/latest/UserGuide/

1 votes

Quelle est cette IP bizarre ? Est-ce une menace pour la sécurité d'appeler cette IP inconnue à partir de son serveur ? :D J'ai proposé une modification expliquant cette IP et il semble qu'elle n'ait pas été acceptée.

0 votes

@RavindranathAkila Non, vous pouvez utiliser cette commande depuis votre instance EC2.

5voto

Eight-Bit Guru Points 4613

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

Voici le Documentation sur l'API Java AWS EC2 sur le sujet.

0 votes

J'ai voté pour vous Eight-Bit-Guru. Connaissez-vous un moyen facile d'obtenir l'InstanceID de la dernière instance créée pour associer immédiatement une ElasticIP ? A ma connaissance, il faut analyser l'information retournée de ec2-run-instances ou l'analyse de JSON en utilisant bash avec le retour de JSON de aws ec2 run-instances . J'essaie d'éviter les dépendances supplémentaires.

1 votes

Pour clarifier le DescribeInstances ci-dessus, j'aime utiliser cette commande : aws ec2 describe-instances | grep "Value\|PublicIpAddress" (bien sûr, vous aurez besoin de la cli aws installée)

0 votes

Merci, gentil downvoter anonyme. La raison pour laquelle vous avez légèrement diminué ma réputation en critiquant ma réponse acceptée il y a six ans est si évidente qu'aucun commentaire n'est nécessaire !

1voto

Sachin Gaykar Points 11

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

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

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

Et maintenant pour obtenir l'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 <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());
         }     
    }
}

0voto

Lostsoul Points 5465

En supposant que vous redémarrez l'instance et que vous ne la lancez pas à partir 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 faire pointer tous vos DNS vers cette 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 et non le redémarrage) et vous ne pouvez pas la "réserver". Vous devrez peut-être créer un script pour conserver la nouvelle IP (si vous y faites pointer des services internes).

J'espère que cela vous aidera

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X