2011-09-23 12 views

Respuesta

4

asumiendo que no desea asignar una dirección IP elástico (y hay razones para que esto no siempre es una solución) a continuación, sólo tiene que llamar DescribeInstances en la instancia reiniciado, que devuelve un montón de información, incluida la dirección IP pública.

Aquí está el AWS EC2 Java API Documentation sobre el tema.

+0

Te he votado como Eight-Bit-Guru. ¿Conoces alguna forma fácil de obtener el InstanceID de la última instancia creada para asociar inmediatamente un ElasticIP? Que yo sepa, requiere analizar la información devuelta de 'ec2-run-instances' o analizar JSON utilizando bash con el retorno JSON de' aws ec2 run-instances'. Intentando evitar dependencias adicionales. – JohnAllen

+0

Para aclarar el comando 'DescribeInstances' anterior, me gusta usar esto:' aws ec2 describe-instances | grep "Value \ | PublicIpAddress" '(por supuesto necesitarás el Aws Cli instalado) – modulitos

+0

¿Por qué? Gracias, amable downvoter anónimo. ¡Tu razón para desestabilizar mi reputación reprendiendo mi respuesta aceptada hace seis años es tan descaradamente obvia que no se requieren comentarios! –

0

Suponiendo que se reinicia la instancia y no se inicia desde cero, se puede asignar una IP elástica que siempre permanece con la instancia de ec2 (a menos que mueva la IP a otro servidor). Esto le permite apuntar todos sus DNS a esa IP y no preocuparse de que un reinicio le cause problemas.

Creo que eso es lo que preguntas, pero hay otras cosas que podrías estar preguntando. La IP interna del servidor cambia (si relanza la instancia no se reinicia) y no puede 'reservarla', por lo que puede necesitar crear una secuencia de comandos para mantener la nueva IP (si su puntero le presta servicios internos).

esperanza de que ayuda a

97

Al reiniciar, las direcciones IP de una instancia EC2 hacen no cambio. Por lo general, cambian al detener/iniciar una instancia de arranque de EBS que no es de VPC.

Véase mi respuesta a su pregunta relacionada aquí:

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

Dicho esto, se pueden encontrar las direcciones IP privadas y públicas a través de la llamada a la API para DescribeInstances en su idioma particular.

Si se encuentra en la propia instancia, también se pueden encontrar las direcciones IP a través de la API de datos de usuario utilizando HTTP simple:

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

Por ejemplo,

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

Elastic IP addresses se recomiendan para mantener una dirección IP orientada externamente (estática) para un servicio o servidor en particular. Estos deben ser reasignados a una instancia después de una parada/inicio (pero no después de un reinicio).

+1

Esta es una respuesta completa y sólida. El "wget" proporciona la respuesta correcta específica y la prosa que lo rodea también es útil/útil. – javadba

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

Esta debería ser la respuesta aceptada, y también es lo que dicen en los documentos. http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html – jontsai

+1

¿Qué es esa extraña IP? ¿Es una amenaza a la seguridad llamar a este IP desconocido desde el servidor de uno? : D me sugirió una edición que explica que la propiedad intelectual y parece que no fue aceptada –

+0

@RavindranathAkila No, usted puede utilizar este comando desde el interior de la instancia EC2 –

3

esto es cómo lo hice en una instancia EC2 Ubuntu 12.04 dentro de una VPC:

curl ifconfig.me 

no sé por qué pero público-IPv4 no se encontró bajo la url de meta-datos

+1

He intentado esto: se cuelga sin respuesta – javadba

+0

Obras en CentOS 7 –

1

Para obtener la IP pública de la instancia, primero necesita obtener el ID de instancia de esa instancia. Puede obtener el ID de instancia de la instancia utilizando el siguiente código java.

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

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

Y ahora, para obtener la IP pública, puede usar el siguiente código de 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

Tienen una clase util que facilita el acceso a los metadatos EC2. Por ejemplo

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

puede usar esto.

   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

La dirección IPv4 pública también está disponible desde la instancia EC2 de esta manera:

curl checkip.amazonaws.com 

Y el nombre de host público es:

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

esto realmente funcionó mejor. La respuesta/public-ipv4 anterior funcionaba hasta hace poco, no estoy seguro de si AWS cambió algo o restringir el tráfico a través del ELB hizo una diferencia, pero estaba recibiendo mi IP elástica informada en ambas instancias. Sin embargo, la cuenta de curl lo hizo correctamente, mi IP elástica en una y una aleatoriamente asignada en la otra. –

Cuestiones relacionadas