Max*_*val 6 java amazon-web-services aws-sdk
我使用aws-java-sdk版本1.11.104。根据AWS凭证doc,默认区域为us-east-1
,但是当我创建客户端时未手动设置区域时,如下所示:
AWSCredentialsProvider awsCredentialsProvider =
new AWSStaticCredentialsProvider(new BasicAWSCredentials(awsAccessKey, awsSecretKey));
AmazonS3 s3Client =
AmazonS3ClientBuilder.standard().withCredentials(awsCredentialsProvider).build();
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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.
Run Code Online (Sandbox Code Playgroud)
为什么不使用默认区域?
我试图在上面的代码之前添加以下内容,但仍然无法正常工作。
System.setProperty(SDKGlobalConfiguration.AWS_REGION_ENV_VAR, "us-east-1");
Run Code Online (Sandbox Code Playgroud)如何以编程方式设置AWS区域?(我想在运行时为项目的所有类设置它)。
谢谢。
编辑:
我知道我可以.withRegion()
在客户端的生成器上使用,但是我期望使用默认区域,或者是通过默认区域提供程序链从环境变量中选择的区域。
小智 12
我有一个类似的场景,我们正在构建一个AWS抽象层,这样程序员就不必接触任何AWS代码。而且我在单元测试方面也遇到了问题,并尝试AWS_REGION
使用System.setProperty(String, String)
.
我找到的解决方案是设置属性aws.region。AwsSystemPropertyRegionProvider类位于“区域提供商链”上,并将从此属性获取值。
我在测试之前设置属性@BeforeClass
:
@BeforeClass
public static void setUp() {
System.setProperty("aws.region", "us-west-2");
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。
我期待一个默认区域,或者通过默认区域提供程序链从环境变量中选择的区域。
是的,当我阅读代码时,它没有默认区域:
AmazonEC2ClientBuilder
延伸(向上一点)AwsClientBuilder
。AwsClientBuilder
默认情况下使用DefaultAwsRegionProviderChain
.DefaultAwsRegionProviderChain
使用 3 种机制来确定区域:
AwsEnvVarOverrideRegionProvider
它查找AWS_REGION
您无法在运行时设置的环境变量。或者不应该(见下文)。AwsProfileRegionProvider
它从您的 AWS 配置文件中读取它。InstanceMetadataRegionProvider
它会尝试查找您所在的 EC2 实例并获取其区域。
- 为什么不使用默认区域?(请参阅这些aws 文档)
us-east-1
除了 之外,我在代码中没有看到任何对源代码的引用AwsHostNameUtils.parseRegionName(...)
。但我不确定它在哪里使用。
System.setProperty(SDKGlobalConfiguration.AWS_REGION_ENV_VAR, "us-east-1");
是的,环境与系统属性不同。有一些严重的黑客行为允许您在运行时更改环境变量,但用户要小心。
归档时间: |
|
查看次数: |
7856 次 |
最近记录: |