Spring Boot 使用java aws-java-sdk从其他区域访问s3存储桶

ia2d9nvy  于 2023-02-19  发布在  Spring
关注(0)|答案(1)|浏览(128)

我有来自ap-south-1的s3存储桶,我使用aws java sdk AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard(). withRegion(Regions.AP_SOUTH_1).defaultClient();访问它
awazonS3.putObject(putObjectRequest);
当我的服务在“ap-south-1”中运行时,它工作正常。现在,当我将服务移动到“ap-south-2”时,相同的代码出现错误。

The ap-south-1 location constraint is incompatible for the region specific endpoint this request was sent to. (Service: Amazon S3; Status Code: 400; Error Code: IllegalLocationConstraintException; Request ID: TTTTDW5T2GF0J28S8; S3 Extended Request ID: l3djAuSl5RXWgSLn12gTnyXyF1P7Q60OAMxTNhyrnmIJxIZ2MjRRzmOMT1hsEW6+KjqA=; Proxy: null)

目前我正在使用

`<dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>1.12.145</version>
    </dependency>`

我想访问ap-south-2中的ap-south-1的同一存储桶

2ul0zpep

2ul0zpep1#

问题是您使用的是.defaultClient(),我认为它忽略了您设置的Region
尝试使用.build(),而不是使用configure属性构建客户端。
所以

AmazonS3 amazonS3 = AmazonS3ClientBuilder
                    .standard()
                    .withRegion(Regions.AP_SOUTH_1)
                    .build();

注意,您也可以显式指定S3端点,如下所示(但上面的代码更简单):

AmazonS3 amazonS3 = AmazonS3ClientBuilder
                    .standard()
                    .withEndpointConfiguration(
                       new EndpointConfiguration("https://s3.ap-south-1.amazonaws.com", "ap-south-1"))
                    .build();

相关问题