为什么描述Amazon EC2实例不会产生任何结果?

时间:2014-05-03 01:06:45

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

我正在尝试检索在我的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());
      }
 } 

1 个答案:

答案 0 :(得分:2)

此类问题的最常见原因是初始化客户端时缺少区域规范,请参阅{em>在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   Management Console使用美国西部(俄勒冈州)作为默认设置。因此,   将AWS管理控制台与您的AWS管理控制台结合使用时   开发时,一定要在代码中指定相同的区域   控制台。 [强调我的]

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