【问题标题】:Why might describing Amazon EC2 instances yield no result?为什么描述 Amazon EC2 实例可能没有结果?
【发布时间】:2014-05-04 19:59:13
【问题描述】:

我正在尝试检索在我的 AWS 账户中运行的所有实例(例如实例 ID 等)。我使用以下代码。我无法打印实例 ID。当我调试时,我只是得到空值。但是我在 AWS 上运行了三个实例。有人可以指出我在这里做错了什么吗?

 DescribeInstancesResult result = ec2.describeInstances();

 List<Reservation> reservations = result.getReservations();

 for (Reservation reservation : reservations) {
      List<Instance> instances = reservation.getInstances();

      for (Instance instance : instances) {
           System.out.println(instance.getInstanceId());
      }
 } 

【问题讨论】:

    标签: java amazon-web-services amazon-ec2


    【解决方案1】:

    此类问题的最常见原因是初始化客户端时缺少区域规范,有关详细信息,请参阅Create an Amazon EC2 Client 中的创建和初始化 Amazon EC2 客户端部分:

    具体来说,第 2 步只创建一个 EC2 客户端,而没有明确指定区域:

    2) 使用 AWSCredentials 对象创建一个新的 AmazonEC2Client 实例,如下:

    amazonEC2Client = new AmazonEC2Client(credentials);
    

    这会产生一个与 us-east-1 交谈的客户端 - 令人惊讶的是,AWS SDKsAWS Management Console 使用不同的默认值,即使如第 3 步中所述,这也显示了如何指定不同的端点:

    3) 默认情况下,服务端点为 ec2.us-east-1.amazonaws.com。要指定不同的端点,请使用 setEndpoint 方法。例如:

    amazonEC2Client.setEndpoint("ec2.us-west-2.amazonaws.com");
    

    AWS SDK for Java 使用美国东部(弗吉尼亚北部)作为默认区域 如果您没有在代码中指定区域。 但是,AWS 管理控制台默认使用美国西部(俄勒冈)。因此, 将 AWS 管理控制台与您的 开发,请务必在您的代码和 控制台。 [强调我的]

    不同的默认值很容易被绊倒,AWS 管理控制台中的相应默认值实际上随着时间的推移而发生变化 - 在软件开发中经常发生变化,我建议始终在代码中明确说明这一点,以避免这种微妙的错误来源。

    【讨论】:

    • 看准了!像魅力一样工作。
    • 谢谢!我只是浪费了很多令人尴尬的时间,想知道为什么我没有得到任何结果,结果我忘了设置区域。
    猜你喜欢
    • 2017-03-16
    • 2016-11-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2018-06-18
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多