2017-05-24 60 views
0

我已經過了題爲「以編程方式設置AWS區域1」的問題,但它沒有提供我需要的所有答案。問題1:我得到一個SDKClientException - 無法通過區域提供程序鏈找到區域。我究竟做錯了什麼?或者是否有我錯過的錯字。AWS Java SDK - 無法通過區域提供程序鏈來查找區域

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:如果我想建立一個lambda函數出來的代碼更改需要做的事情?我知道如何創建它需要的lambda函數和角色。只需要知道我寫的代碼是否需要更改。我應該如何實現LambdaFuctionHandler類,如下:

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; 
} 

} 

回答

2

好步驟,你可以採取調查:

請確保您的lambda函數和S3是在同一地區。 (當你使用ProviderChain,它將從lambda函數

還拿起區域,你不應該需要,如果你正在使用LAMBDA指定BasicCredentials(AWS-key..etc)。

請了解LAMBDA權限模型(http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html):

基本上,你應該指定有權訪問S3拉姆達作用

所有你需要配置S3是相當多:

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

要在本地進行測試,請確保您已在本地配置AWS憑證。

您可以檢查,如果你有憑據,如果你去到.aws /憑證(這將包含 「AWS訪問鍵」, 「AWS-祕密鑰匙」)

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

要設置您的憑據在本地,所有你需要做的就是運行AWS CLI命令:AWS配置(http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.htm

2

關於Q1,請嘗試使用下面的語法來構建你的客戶:

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