首页 > 解决方案 > 获取 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)

标签: javaamazon-s3aws-sdk

解决方案


在我将区域设置为 AmazonS3Client 后,这有效

AmazonS3Client amazonS3 = new AmazonS3Client(basicSessionCredentials); amazonS3.setRegion(RegionUtils.getRegion("us-east-2"));


推荐阅读