2012-02-11 15 views
6

以前に作成したEC2インスタンスのステータスをJAVA APIから開始、停止、チェックすることができました。しかし、私はこのインスタンスのパブリックDNSアドレスを取得するのが難しいです。 StartInstancesRequestでインスタンスを開始し、StartInstancesResponseで応答を取得するので、実際のInstanceオブジェクトを取得できませんでした。私の開始コードは以下の通りです。Amazon EC2インスタンスのパブリックDNSをJava APIから取得

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

JSch経由でこのインスタンスに接続することによる助けに感謝します。

ありがとうございます!

答えて

7

トリックを行う方法は次のとおりです。これを呼び出す前に、インスタンスが実行状態にあるかどうかを確認することをお勧めします。

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

本当に感謝しました。 – jatha

1

describeInstancesを使用するときは、現在のフィルタを使用することができますので、あなたはすべてのインスタンスのための情報を引っ張らないでください。

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

aws-java-sdk-1.9.35.jarを使用する。

関連する問題