AWS Java SDK - 无法通过区域提供商链找到区域

新手上路,请多包涵

我已经完成了标题为“以编程方式设置 AWS 区域 1”的问题,但它没有提供我需要的所有答案。

Q1:我得到一个 SDKClientException-Unable to find a region via the region provider chain 。我究竟做错了什么?或者我错过了一个错字。

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

}

}

问题 2:如果我想从中构建 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;
}

}

原文由 Codistan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

关于 Q1,尝试使用以下语法构建您的客户端:

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

原文由 mapm 发布,翻译遵循 CC BY-SA 3.0 许可协议

如上面的答案所述,您需要在同一区域拥有 S3 和 lambda,这就是为什么-

如果您没有使用 withRegion 方法明确设置区域,SDK 会参考默认区域提供程序链来尝试确定要使用的区域。使用的方法之一是 -

检查 AWS_REGION 环境变量。如果已设置,则该区域用于配置客户端。

在 Lambda 的情况下 -

此环境变量由 Lambda 容器设置。

最后,要使用默认凭证/区域提供程序链来确定环境中的区域,请使用客户端构建器的 defaultClient 方法。

 AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();

这与使用标准后跟构建相同。

 AmazonS3 s3Client = AmazonS3ClientBuilder.standard().build();

AWS 文档: https ://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html

更多详细信息: 如何使用 AWS SDK 修复“无法通过区域提供商链找到区域”异常

PS:上面的链接转到我的个人博客,其中有更多详细信息。

原文由 Aniket Thakur 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题