AWS Java SDK - Unable to find a region via the region provider chain

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

I have gone through the question titled "Setting the AWS region programmatically 1" but it doesn't provide all the answers I need.

Q1: I'm getting a SDKClientException-Unable to find a region via the region provider chain. What am I doing wrong? or is there a typo that I missed.

public class CreateS3Bucket {  public static void main(String[] args) throws IOException {      BasicAWSCredentials creds = new BasicAWSCredentials("aws-access-key", "aws-secret-key");     AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(creds)).build();      Region region = Region.getRegion(Regions.US_EAST_1);     s3Client.setRegion(region);      try {         String bucketName = "testBucket" + UUID.randomUUID();         s3Client.createBucket(bucketName);         System.out.println("Bucket Created Successfully.");      } catch(AmazonServiceException awse) {          System.out.println("This means that your request made it AWS S3 but got rejected");         System.out.println("Error Message:" +awse.getMessage());         System.out.println("Error Message:" +awse.getErrorCode());         System.out.println("Error Message:" +awse.getErrorType());         System.out.println("Error Message:" +awse.getRequestId());      } catch (AmazonClientException ace) {          System.out.println("The Amazon Client encountered an Error with network Connectivity");         System.out.println("Error Message:" + ace.getMessage());     }   } 

}

Q2: What code changes needs to be done if I want to build a Lambda Function out of it? I'm aware how to create a lambda function and roles that it needs. Just need to know if the code that I have written needs to changed. How should I implement the LambdaFuctionHandler class as below:

import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler;   public class LambdaFunctionHandler implements RequestHandler<String, String> {  @Override public String handleRequest(String input, Context context) {     context.getLogger().log("Input: " + input);       return null; }  } 

回答1:

Regarding Q1, try to build your client using the following syntax:

AmazonS3 amazonS3 = AmazonS3Client.builder()     .withRegion("us-east-1")     .withCredentials(new AWSStaticCredentialsProvider(creds))     .build(); 


回答2:

Well steps you can take to investigate:

Please make sure your Lambda function and S3 are in the same region. (When you use ProviderChain, it will pick up the region from the Lambda function

Also, You should not need to specify the BasicCredentials(aws-key..etc) if you are using Lambda.

Please read about Lambda Permission model (http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html):

Basically, the Lambda role that you assign should have permission to access S3.

All you need to configure S3 is pretty much:

private static final AmazonS3 s3Client =  AmazonS3ClientBuilder.defaultClient(); 

To test it locally, make sure you have configured the AWS Credentials locally.

You can check if you have the credentials, if you go into .aws/credentials (This will contain the "aws-access-key", "aws-secret-key")

http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

To set up your credentials locally, all you need to do is run the AWS Cli command: aws configure (http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.htm)



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!