2017-06-22 22 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" 
} 

を取得していますPOSTMANからこのエンドポイントをヒットしようとすると、私はまた、上記では、次のコードを追加しましたが、まだPOSTMANの残りのクライアントから同じエラーメッセージを取得。

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

誰かが私を助けてくれますか?ありがとう..

+0

どのバージョンのJAVA AWS SDKですか? –

+0

バージョン - 1.11.150。 – Nithyananth

答えて

0

どのバージョンのJAVA AWS SDKですか?

Aws SDK 1.11.113からsetRegionは無効になりました。

https://aws.amazon.com/blogs/developer/client-constructors-now-deprecated/

は、だから、AWSの資格情報領域を設定する必要があります。また、メソッドgetCurrentRegion()を使用して地域を取得する必要があります

参照:これは、デフォルトのクライアントビルダーを変更することによって、私のために働いたhttp://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/regions/Regions.html

0

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

コード内の領域をホットコードしないでください。他の地域で実行する必要がある場合は、コードを変更する必要があります。 –

+0

テストのために私はちょうどハードコード化しました。将来、私は外部ソースからロードします。あなたの提案をありがとう@MohanShanmugam – Nithyananth

関連する問題