2012-02-11 8 views
6

Sono riuscito a avviare, arrestare e verificare lo stato di un'istanza EC2 creata in precedenza dall'API JAVA. Tuttavia, ho difficoltà a ottenere l'indirizzo DNS pubblico di questa istanza. Poiché avvio l'istanza con StartInstancesRequest e ottengo la risposta con StartInstancesResponse, non è possibile recuperare l'oggetto istanza effettivo. Il mio codice di avviamento viene riportato qui di seguito, così:Ottieni il DNS pubblico dell'istanza Amazon EC2 dall'API 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; 
    } 

Oltre alcun aiuto nella connessione a questa istanza tramite JSch sarà apprezzato.

Grazie mille!

risposta

7

Ecco un metodo che farebbe il trucco. È meglio controllare che l'istanza sia in esecuzione prima di chiamare questo.

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

Ha funzionato perfettamente, grazie mille! – jatha

1

È ora possibile utilizzare un filtro quando si utilizza describeInstances, in modo da non tirare informazioni per tutte le istanze.

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

Utilizzo di aws-java-sdk-1.9.35.jar.