【发布时间】:2021-11-15 22:14:30
【问题描述】:
我正在尝试使用我的代码通过 aws sdk 和 java 服务访问 S3。但我收到以下异常。
我使用的代码如下。
-
配置构建器。
ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setRetryPolicy( PredefinedRetryPolicies.getDefaultRetryPolicyWithCustomMaxRetries(5)); AmazonS3ClientBuilder s3ClientCommonBuilder = AmazonS3ClientBuilder.standard() .withClientConfiguration(clientConfiguration) .withForceGlobalBucketAccessEnabled(true) .withPathStyleAccessEnabled(true); s3ClientCommonBuilder.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsKey, awsSecret))); return s3ClientCommonBuilder; -
创建 AwsS3Client
AmazonS3ClientBuilder internalS3ClientBuilder = createS3ClientCommonBuilder(s3bucket, awsKey, awsSecret); if (internalServiceEndpoint != null && !internalServiceEndpoint.isEmpty()) { internalS3ClientBuilder.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(internalServiceEndpoint, Region.EU_Ireland.getFirstRegionId())); }
然后在运行时当客户端尝试连接到 s3 时抛出异常。
1) Error in custom provider, com.amazonaws.SdkClientException: 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.
while locating AwsS3ClientProvider
at org.test.ApiServerBootstrap.configure(ApiServerBootstrap.java:103)
while locating org.test.AWSS3Client
for the 3rd parameter of org.testDataUploader.<init>(DataUploader.java:60)
at org.test.DataUploader.class(DataUploader.java:49)
while locating org.test.DataUploader
for the 3rd parameter of org.test.StoreService.<init>(StoreService.java:56)
at org.test.services.v3.StoreService.class(StoreService.java:53)
while locating org.test.StoreService
for the 1st parameter of org.test.verticles.EventBusConsumerVerticle.<init>
(EventBusConsumerVerticle.java:35)
at
org.test.verticles.EventBusConsumerVerticle.class(EventBusConsumerVerticle.java:35)
while locating org.test.verticles.EventBusConsumerVerticle
for the 3rd parameter of org.test.ApiServer.<init>(ApiServer.java:52)
while locating org.test.ApiServer
1 error
at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:226)
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1053)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1086)
at org.test.ApiServer.main(ApiServer.java:46)
Caused by: com.amazonaws.SdkClientException: 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.
at com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.java:462)
at com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:424)
at com.amazonaws.client.builder.AwsSyncClientBuilder.build(AwsSyncClientBuilder.java:46)
at org.test.AWSS3Client.create(AWSS3Client.java:99)
我已经在其他一些计算机上对此进行了测试,以验证这是我的 aws 客户端配置错误。
我的 .aws/config 文件如下所示
$ cat .aws/config
[default]
region = eu-west-1
output = json
我的 .aws/凭据如下所示。
$ cat .aws/credentials
[default]
aws_access_key_id=XXXXXXXX.....
aws_secret_access_key=XXXXXXXX
我的aws客户端版本如下。
$ aws --version
aws-cli/2.2.40 Python/3.8.8 Linux/5.11.0-34-generic exe/x86_64.ubuntu.20 prompt/off
如果有人能弄清楚我缺少什么让 aws 客户端连接到 s3,我将不胜感激。
【问题讨论】:
-
您的问题是关于适用于 Java 的 AWS 开发工具包(错误的来源)还是您实际提供详细信息的 AWS CLI?
-
异常来自 AWS sdk for java。正如我所提到的,此代码在 Ubuntu 16.04 Jenkins 服务器中成功构建,没有任何错误,与我的 aws 凭据和配置文件相同(我使用的是 ubuntu 20.04 BTW)。唯一的区别是 Jenkins 服务器安装了 aws 客户端 1.X,就像我的 2.2.X 一样
-
服务器上安装的 AWS CLI 客户端完全不相关。 SDK 不使用它。此外,这不是构建时错误,而是运行时错误,因此说它在另一台服务器上构建时没有错误似乎并不相关。
-
感谢您的反馈。看来我的问题没有正确提出。更新了确切的问题。 @MarkB
标签: amazon-web-services amazon-s3 aws-cli aws-config