【问题标题】:AWS client does not seem to read config file to read the regionAWS 客户端似乎没有读取配置文件来读取区域
【发布时间】:2021-11-15 22:14:30
【问题描述】:

我正在尝试使用我的代码通过 aws sdk 和 java 服务访问 S3。但我收到以下异常。

我使用的代码如下。

  1. 配置构建器。

    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;
    
  2. 创建 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


【解决方案1】:

您要确保在构建 S3Client 时使用 DefaultAWSCredentialsProviderChain() 类。

您还可以创建环境变量 AWS_REGION=eu-west-1

【讨论】:

  • 当您显示 Java 代码异常时,您的问题是特定于使用 SDK 的。对于 CLI,要设置的两个参数是 AWS_REGION 和 AWS_DEFAULT_REGION。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-15
  • 2018-06-24
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
相关资源
最近更新 更多