Au redémarrage, l'adresse IP d'une instance Amazon change. Comment trouver la nouvelle adresse IP en utilisant Java API?
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.
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:
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).
curl http://169.254.169.254/latest/meta-data/public-ipv4
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
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
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());
}
}
}
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();
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;
}
}
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é
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>