java - 获取 AmazonS3 时无法通过区域提供商链错误找到区域
问题描述
我有以下方法可以返回 AmazonS3 以上传文件。在本地环境中,我必须连接到不同区域的 s3 存储桶,但在其他环境中,s3 存储桶和应用程序代码是相同的 aws 区域。
public AmazonS3 getAmazonS3Client() {
if ("local".equals(hostEnvironment)) {
final AssumeRoleRequest roleRequest = new AssumeRoleRequest()
.withRoleArn("arnrole").withRoleSessionName("s3Session");
final AssumeRoleResult assumeRoleResult = AWSSecurityTokenServiceAsyncClientBuilder.defaultClient()
.assumeRole(roleRequest);
final Credentials sessionCredentials = assumeRoleResult.getCredentials();
final BasicSessionCredentials basicSessionCredentials = new BasicSessionCredentials(
sessionCredentials.getAccessKeyId(), sessionCredentials.getSecretAccessKey(),
sessionCredentials.getSessionToken());
return AmazonS3Client.builder().withRegion("us-east-2").withCredentials
(new AWSStaticCredentialsProvider(basicSessionCredentials)).build();
} else {
return AmazonS3Client.builder().withRegion("us-east-2").withCredentials
(new InstanceProfileCredentialsProvider(true)).build();
}
}
从本地运行时,我遇到了异常,我在这里缺少什么?
原因:com.amazonaws.SdkClientException:无法通过区域提供商链找到区域。必须在构建器或设置环境中提供显式区域以提供区域。在 com.amazonaws.client.builder.AwsClientBuilder.setRegion(AwsClientBuilder.java:462) 在 com.amazonaws.client.builder.AwsClientBuilder.configureMutableProperties(AwsClientBuilder.java:424) 在 com.amazonaws.client.builder.AwsAsyncClientBuilder.build (AwsAsyncClientBuilder.java:80) 在 com.amazonaws.services.securitytoken.AWSSecurityTokenServiceAsyncClientBuilder.defaultClient(AWSSecurityTokenServiceAsyncClientBuilder.java:45)
解决方案
在我将区域设置为 AmazonS3Client 后,这有效
AmazonS3Client amazonS3 = new AmazonS3Client(basicSessionCredentials); amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));
推荐阅读
- python - 如何使用 xlwt 和 xlrd 将每五行放入一张纸中?
- mysql - MySQL Keywords as column name
- asp.net-core - WindowsCryptographicException running ASP.NET Core 2 web app in Azure Web App Service
- firebase - How to use limit function and startAt function to paginate data react native firebase
- c++ - 从函数应用程序创建 std::vector
- python - In Dash subplots how do I only increase the height of the very first plot keeping other subplots unchanged?
- android - 带文本的状态进度条
- html - How can I refer a library only to a specific part of the HTML?
- jquery - Add active class on label if selected option value in edit mode?
- javascript - Node.js 使用来自单独 javascript 文件的 express.js