web-dev-qa-db-de.com

So ermitteln Sie die IP-Adresse einer Amazon EC2-Instanz beim Neustart

Beim Neustart ändert sich die IP-Adresse einer Amazon-Instanz. Wie finde ich die neue IP-Adresse mit der Java API?

45
figaro

Angenommen, Sie möchten keine elastische IP-Adresse zuweisen (und es gibt Gründe, warum dies nicht immer eine Lösung ist), rufen Sie einfach DescribeInstances für die neu gestartete Instanz auf, die eine Reihe von Informationen einschließlich der öffentlichen IP-Adresse zurückgibt.

Hier ist das AWS EC2 Java API Documentation zum Thema.

5
Eight-Bit Guru

Beim Neustart ändern sich die IP-Adressen einer EC2-Instanz nicht . Sie ändern sich im Allgemeinen beim Beenden/Starten einer Nicht-VPC-EBS-Startinstanz.

Meine Antwort auf Ihre Frage finden Sie hier:

https://stackoverflow.com/questions/7533871/differenz zwischen-start-und-stoppstart-an-Amazon-ec2-instance

Sie können die privaten und öffentlichen IP-Adressen jedoch über den API-Aufruf für DescribeInstances in Ihrer jeweiligen Sprache finden.

Wenn Sie sich in der Instanz selbst befinden, können Sie die IP-Adressen auch über die Benutzerdaten-API mit einfachem HTTP ermitteln:

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

Beispielsweise,

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

Elastische IP-Adressen wird empfohlen, um eine konsistente (statische) externe IP-Adresse für einen bestimmten Dienst oder Server beizubehalten. Diese müssen nach einem Stopp/Start (aber nicht nach einem Neustart) einer Instanz neu zugewiesen werden.

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

Die öffentliche IPv4-Adresse ist wie folgt auch in der EC2-Instanz verfügbar:

curl checkip.amazonaws.com

Und der öffentliche Hostname lautet:

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

so habe ich es auf einer Ubuntu 12.04 EC2-Instanz in einer VPC gemacht:

curl ifconfig.me

ich weiß nicht warum, aber public-ipv4 wurde unter der Metadaten-URL nicht gefunden

3
Amir Aliabadi

Um die öffentliche IP der Instanz abzurufen, müssen Sie zuerst die Instanz-ID dieser Instanz abrufen. Sie können die Instanz-ID der Instanz mit dem folgenden Code abrufen: Java.

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

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

Und jetzt, um die öffentliche IP zu erhalten, können Sie den folgenden Java Code verwenden.

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

Sie haben eine util-Klasse, die den Zugriff auf EC2-Metadaten erleichtert. Zum Beispiel

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

sie können dies verwenden.

                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

Wenn Sie die Instanz neu starten und nicht neu starten, können Sie eine elastische IP zuweisen, die immer bei der ec2-Instanz bleibt (es sei denn, Sie verschieben die IP auf einen anderen Server). Auf diese Weise können Sie Ihren gesamten DNS auf diese eine IP-Adresse verweisen und müssen sich keine Sorgen machen, dass ein Neustart zu Problemen führt.

Ich denke, das ist es, wonach du fragst, aber es gibt andere Dinge, die du fragen könntest. Die interne IP des Servers ändert sich (wenn Sie die Instanz nicht neu starten), und Sie können sie nicht 'reservieren', sodass Sie möglicherweise ein Skript erstellen müssen, um die neue IP beizubehalten (wenn Ihre internen Dienste darauf verweisen).

ich hoffe, das hilft

0
Lostsoul

Sie können die CLI CRUD-Anwendung für AWS-Ressourcen verwenden. AWS-CRUD-Manage r

So finden Sie alle ec2-Instanzen

./awsconsole.py ec2 all

So finden Sie alle Daten für eine ec2-Instanz (einschließlich privater und öffentlicher IP-Adressen)

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