2012-02-11 11 views
6

Tôi đã quản lý để bắt đầu, dừng và kiểm tra trạng thái của cá thể EC2 đã tạo trước đó từ API JAVA. Tuy nhiên, tôi gặp khó khăn trong việc nhận địa chỉ dns công khai của cá thể này. Vì tôi bắt đầu cá thể với StartInstancesRequest và nhận được phản hồi với StartInstancesResponse, tôi không thể truy xuất đối tượng Instance thực tế. Mã bắt đầu của tôi được cung cấp bên dưới, nó hoạt động:Nhận DNS công khai của Amazon EC2 Instance từ 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; 
    } 

Bên cạnh đó, bất kỳ trợ giúp nào thông qua kết nối với trường hợp này thông qua JSch sẽ được đánh giá cao.

Cảm ơn rất nhiều!

Trả lời

7

Đây là phương pháp sẽ thực hiện thủ thuật. Nó sẽ là tốt nhất để kiểm tra xem trường hợp là ở trạng thái hoạt động trước khi gọi này.

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

Làm việc hoàn hảo, cảm ơn rất nhiều! – jatha

1

Bây giờ bạn có thể sử dụng bộ lọc khi sử dụng describeInstances, vì vậy bạn không kéo thông tin cho tất cả các phiên bản của mình.

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

Sử dụng aws-java-sdk-1.9.35.jar.