2012-02-11 12 views
6

He logrado iniciar, detener y verificar el estado de una instancia de EC2 creada previamente de la API de JAVA. Sin embargo, estoy teniendo dificultades para obtener la dirección dns pública de esta instancia. Como inicio la instancia con StartInstancesRequest y obtengo la respuesta con StartInstancesResponse, no pude recuperar el objeto Instance real. Mi código de arranque se da a continuación, funciona:Obtener DNS público de la instancia de Amazon EC2 de la API de JAVA

BasicAWSCredentials oAWSCredentials = new BasicAWSCredentials(sAccessKey, sSecretKey); 
AmazonEC2 ec2 = new AmazonEC2Client(oAWSCredentials); 
ec2.setEndpoint("https://eu-west-1.ec2.amazonaws.com"); 
List<String> instanceIDs = new ArrayList<String>(); 
instanceIDs.add("i-XXXXXXX"); 

StartInstancesRequest startInstancesRequest = new StartInstancesRequest(instanceIDs); 
try { 
     StartInstancesResult response = ec2.startInstances(startInstancesRequest); 
     System.out.println("Sent! "+response.toString()); 
    }catch (AmazonServiceException ex){ 
     System.out.println(ex.toString()); 
     return false; 
    }catch(AmazonClientException ex){ 
     System.out.println(ex.toString()); 
     return false; 
    } 

Además ayuda a través de la conexión a través de esta instancia JSch será apreciado.

¡Muchas gracias!

Respuesta

7

Aquí hay un método que haría el truco. Lo mejor sería comprobar que la instancia está en estado de ejecución antes de llamar a esto.

String getInstancePublicDnsName(String instanceId) { 
    DescribeInstancesResult describeInstancesRequest = ec2.describeInstances(); 
    List<Reservation> reservations = describeInstancesRequest.getReservations(); 
    Set<Instance> allInstances = new HashSet<Instance>(); 
    for (Reservation reservation : reservations) { 
     for (Instance instance : reservation.getInstances()) { 
     if (instance.getInstanceId().equals(instanceId)) 
      return instance.getPublicDnsName(); 
     } 
    } 
    return null; 
} 
+0

¡Funcionó a la perfección, muchas gracias! – jatha

1

Ahora puede utilizar un filtro cuando se utiliza describeInstances, para que no tire de información para todas las instancias.

private String GetDNS(String aInstanceId) 
{ 
    DescribeInstancesRequest request = new DescribeInstancesRequest(); 
    request.withInstanceIds(aInstanceId); 
    DescribeInstancesResult result = amazonEC2.describeInstances(request); 

    for (Reservation reservations : result.getReservations()) 
    { 
    for (Instance instance : reservations.getInstances()) 
    { 
     if (instance.getInstanceId().equals(aInstanceId)) 
     { 
     return instance.getPublicDnsName(); 
     } 
    } 
    } 

    return null; 
} 

Usando aws-java-sdk-1.9.35.jar.

Cuestiones relacionadas