2011-09-23 10 views

Odpowiedz

4

Zakładając, że nie chcą, aby przypisać adres IP Elastic (a istnieją powody, dlaczego nie zawsze jest rozwiązaniem), a następnie po prostu zadzwonić DescribeInstances na ponownym uruchomieniu instancji, która zwraca pęczek informacje, w tym publiczny adres IP.

Oto AWS EC2 Java API Documentation na ten temat.

+0

Podniosłem cię do ośmiu bit-guru. Czy znasz jakiś łatwy sposób uzyskania InstanceID ostatniej utworzonej instancji do natychmiastowego powiązania ElasticIP? Zgodnie z moją wiedzą wymaga on parsowania zwróconych informacji z 'ec2-run-instances' lub parsowania JSON-a za pomocą bash przy pomocy zwracającego JSON z' aws ec2 run-instances'. Próbuję uniknąć dodatkowych zależności. – JohnAllen

+0

Aby wyjaśnić powyższe polecenie "DescribeInstances", lubię tego użyć: 'aws ec2 describe-instances | grep "Wartość \ | PublicIpAddress" '(oczywiście będziesz potrzebował zainstalowanego aws cli) – modulitos

+0

Dlaczego dziękuję, miły anonimowy downvoter. Twój powód, by nieco odpiąć mój ponowny narzut przez karanie mojej sześcioletniej zaakceptowanej odpowiedzi jest tak oczywisty, że żaden komentarz nie jest wymagany! –

0

Zakładając, że zrestartujesz instancję i nie uruchomisz jej od nowa, możesz przypisać elastyczny adres IP, który zawsze pozostaje w instancji EC2 (chyba że przeniesiesz IP na inny serwer). To pozwala wskazać wszystkie DNS na ten jeden adres IP i nie martwić się, że ponowne uruchomienie spowoduje problemy.

Myślę, że to jest to, o co pytasz, ale są inne rzeczy, o które możesz zapytać. Wewnętrzny adres IP serwera zmienia się (jeśli ponownie uruchomisz instancję, a nie reboot) i nie możesz go "zarezerwować", więc możesz potrzebować utworzyć skrypt, aby utrzymać nowy adres IP (jeśli kierujesz do niego wewnętrzne usługi).

nadzieję, że pomoże

97

Po ponownym uruchomieniu adresy IP instancji EC2 zmieniają się na , a nie na. Zwykle zmieniają się po zatrzymaniu/uruchomieniu instancji rozruchowej EBS innej niż VPC.

Zobacz moją odpowiedź do powiązanej tutaj pytanie:

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

Powiedział, że można znaleźć prywatne i publiczne adresy IP poprzez wywołanie API dla DescribeInstances w danym języku.

Jeśli jesteś na samym przykład, można również znaleźć adresy IP za pośrednictwem interfejsu API dla użytkownika danych za pomocą prostego http:

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

Na przykład,

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

Elastic IP addresses zaleca się utrzymywanie spójnego (statycznego) zewnętrznego adresu IP dla określonej usługi lub serwera. Te muszą być ponownie przypisane do instancji po zatrzymaniu/uruchomieniu (ale nie po ponownym uruchomieniu).

+1

To solidna, kompletna odpowiedź. "Wget" dostarcza właściwej poprawnej odpowiedzi, a otaczająca ją proza ​​jest również pomocna/użyteczna. – javadba

47
curl http://169.254.169.254/latest/meta-data/public-ipv4 
+1

To powinna być zaakceptowana odpowiedź, a także to, co mówią w dokumentach. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html – jontsai

+1

Co to za dziwaczny adres IP? Czy jest to zagrożenie bezpieczeństwa, aby wywołać ten nieznany adres IP z własnego serwera? : D Zasugerowałem zmienił wyjaśniając, że IP i wygląda na to, że nie została przyjęta –

+0

@RavindranathAkila nie można użyć tego polecenia od wewnątrz instancji EC2 –

3

to jak to zrobiłem na Ubuntu 12.04 instancji EC2 w VPC:

curl ifconfig.me 

nie wiem, dlaczego, ale publiczno-IPv4 nie został znaleziony pod adresem URL meta-danych

+1

Próbowałem to: wisi bez odpowiedzi – javadba

+0

działa na CentOS 7 –

1

W celu pobrania publicznego adresu IP instancji najpierw trzeba uzyskać identyfikator instancji tej instancji. Możesz uzyskać identyfikator instancji instancji, używając następującego kodu java.

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

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

A teraz, aby uzyskać publiczny adres IP, można użyć następującego kodu 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

Posiadają klasę użytkową, która ułatwia dostęp do metadanych EC2. Na przykład

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

możesz tego użyć.

   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; 
        } 
       } 
30

publiczny adres IPv4 jest również dostępna z instancji EC2 tak:

curl checkip.amazonaws.com 

A hosta publiczny:

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

to faktycznie działało lepiej. Powyższa odpowiedź/public-ipv4 działała do niedawna, niepewna, czy AWS coś zmieniło, czy ograniczenie ruchu przez ELB, ale dostałem mój elastyczny adres IP zgłoszony w obu przypadkach. Skręcony checkip jednak zrobił to poprawnie, mój elastyczny ip na jednym i losowo przypisany z drugiej. –

Powiązane problemy