以编程方式设置AWS区域
我使用aws-java-sdk版本1.11.104。按照AWS credentials doc默认的区域是us-east-1
,但是当我不用手动设置的区域,当我创建一个客户端,就像这样:以编程方式设置AWS区域
AWSCredentialsProvider awsCredentialsProvider =
new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey));
AmazonS3 s3Client =
AmazonS3ClientBuilder.standard().withCredentials(awsCredentialsProvider).build();
我得到这个错误:
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.
-
为什么不使用默认区域?
我试着在我的代码之前添加以下内容,但它仍然不起作用。
System.setProperty(SDKGlobalConfiguration.AWS_REGION_ENV_VAR, "us-east-1");
如何编程设置AWS区域?(我想在运行时为我的项目的所有类设置它)。
谢谢。
编辑:
我知道我可以在客户的建设者用.withRegion()
,但我期待一个默认的区域,或者,该区域由一个环境变量通过默认区域提供环比回升。
I was expecting a default region, or, the region picked from an environment variable through the default region provider chain.
是啊,因为我读的代码,它不会有一个默认的区域:
-
AmazonEC2ClientBuilder
扩展(最高位)AwsClientBuilder
。 -
AwsClientBuilder
默认使用DefaultAwsRegionProviderChain
。 -
DefaultAwsRegionProviderChain
使用3个机制来确定区域:-
AwsEnvVarOverrideRegionProvider
看起来在AWS_REGION
环境变量,你不能在运行时设置。或者不应该(见下文)。 -
AwsProfileRegionProvider
将其从您的AWS配置文件中读出。 -
InstanceMetadataRegionProvider
它试图查找您所在的EC2实例并取其区域。
-
- Why isn't the default region used? (see these aws docs)
我没有在代码中看到源除了AwsHostNameUtils.parseRegionName(...)
到us-east-1
任何引用。但我不确定那是用在哪里。
System.setProperty(SDKGlobalConfiguration.AWS_REGION_ENV_VAR, "us-east-1");
是的,环境与系统属性不是一回事。有gross hacks,允许您在运行时更改环境变量,但用户要小心。
感谢您的回答。您的AWS文档链接与我在我的问题中提供的链接相同,并且它说:“如果您不选择区域,则默认情况下将使用us-east-1。”然后令人困惑......关于环境变量,它只是在本地进行测试,因为我的其他环境(例如生产)从'AwsEnvVarOverrideRegionProvider'或'AwsProfileRegionProvider'获取区域。我不想使用'.withRegion()',我不希望我的团队中的所有开发人员仅尝试测试AWS客户端来触摸他们的系统。 –
如果你想要@MaximeLaval,那么我会使用不同的'AwsRegionProviderChain'。您可以使用默认的一个,然后添加您自己的类,查找系统属性或env变量。 – Gray
但是之后我需要将它传递给我创建的每个客户端,与使用'.withRegion()'相同,并且我不想修改现有代码,我希望能够按原样进行测试。我想我会用反射来设置环境变量。 –
我遇到了同样的问题。而我的问题是读取〜/ .aws/config文件的权限。我将其更改为644,每个人都可以阅读它。然后它工作。希望这可以帮助。
第二个问题http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/client/builder/AwsClientBuilder.html#withRegion-com.amazonaws.regions.Regions- –
1日问题HTTP: //docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-region-selection.html –
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/ com/amazonaws/client/builder/AwsClientBuilder.html#setRegion-java.lang.String- – alfasin