【问题标题】:Get Public DNS of Amazon EC2 Instance from JAVA API从 JAVA API 获取 Amazon EC2 实例的公共 DNS
【发布时间】:2012-03-03 17:41:26
【问题描述】:

我已经设法通过 JAVA API 启动、停止和检查先前创建的 EC2 实例的状态。但是,我在获取此实例的公共 dns 地址时遇到了困难。由于我使用 StartInstancesRequest 启动实例并使用 StartInstancesResponse 获取响应,因此我无法检索实际的 Instance 对象。我的起始代码如下,它可以工作:

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 连接到此实例的任何帮助外,我们将不胜感激。

非常感谢!

【问题讨论】:

    标签: java ssh amazon-ec2 amazon jsch


    【解决方案1】:

    这是一个可以解决问题的方法。最好在调用它之前检查实例是否处于运行状态。

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

    【讨论】:

      【解决方案2】:

      您现在可以在使用 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 2015-03-23
        • 2014-12-29
        • 1970-01-01
        • 2021-04-25
        相关资源
        最近更新 更多