2017-06-22 115 views
0

这里我试图列出可用的实例。但是,当我运行代码时,我收到错误消息为“无法通过区域提供程序链查找区域。必须在构建器或安装环境中提供显式区域以提供区域。”AWS Java SDK EC2描述实例抛出错误

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import com.amazonaws.regions.Region; 
import com.amazonaws.regions.Regions; 
import com.amazonaws.services.ec2.AmazonEC2; 
import com.amazonaws.services.ec2.AmazonEC2ClientBuilder; 
import com.amazonaws.services.ec2.model.DescribeInstancesRequest; 
import com.amazonaws.services.ec2.model.DescribeInstancesResult; 
import com.amazonaws.services.ec2.model.Instance; 
import com.amazonaws.services.ec2.model.Reservation; 
@Controller 
public class EC2InstancesController { 

@RequestMapping(value="/getAllInstances", produces = {"application/json"}, 
      consumes = {"application/json"}, method = RequestMethod.GET) 
    public List<Instance> getAllInstances(){ 

     final AmazonEC2 ec2 = AmazonEC2ClientBuilder.defaultClient(); 

     boolean done = false; 

     while(!done) { 
      DescribeInstancesRequest request = new DescribeInstancesRequest(); 

      DescribeInstancesResult response = ec2.describeInstances(request); 

      for(Reservation reservation : response.getReservations()) { 
       for(Instance instance : reservation.getInstances()) { 
        System.out.printf(
         "Found reservation with id %s, " + 
         "AMI %s, " + 
         "type %s, " + 
         "state %s " + 
         "and monitoring state %s", 
         instance.getInstanceId(), 
         instance.getImageId(), 
         instance.getInstanceType(), 
         instance.getState().getName(), 
         instance.getMonitoring().getState()); 
       } 
      } 
      request.setNextToken(response.getNextToken()); 

      if(response.getNextToken() == null) { 
       done = true; 
      } 
     } 
     return null; 
    } 
} 

当我试着打从邮递员端点我收到以下错误

{ 
    "timestamp": 1498107927641, 
    "status": 500, 
    "error": "Internal Server Error", 
    "exception": "com.amazonaws.SdkClientException", 
    "message": "Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.", 
    "path": "/getAllInstances" 
} 

我还添加以下代码在上面,但还是从邮差其余客户端收到同样的错误信息。

Region region = Region.getRegion(Regions.US_EAST_1); 
     ec2.setRegion(region); 

有人可以帮我解决这个问题。谢谢..

+0

哪个版本的JAVA AWS SDK? –

+0

版本 - 1.11.150。 – Nithyananth

回答

0

它为我通过更改默认客户端生成器使用标准构建器,

final AmazonEC2 ec2 = AmazonEC2ClientBuilder.standard().withRegion(Regions.AP_SOUTH_1).build(); 
+0

请勿在代码中热码区域。如果您有要求在其他地区运行,您需要修改代码。 –

+0

对于测试我只是硬编码。将来我会从外部来源加载。感谢您的建议@MohanShanmugam – Nithyananth