5

我使用 Spring cloud AWS 在 openStack 中连接到我的 Amazon S3,默认情况下,端点是 s3.amasonaws.com 我想更改端点,因为我的存储桶 S3 我们在私有云中而不是在公共亚马逊云中。

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-aws</artifactId>
 </dependency>

. . . .

<dependencyManagement>
 <dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
  </dependency>
 </dependencies>
</dependencyManagement>

....在我的 application.properties

cloud.aws.stack.auto=false
cloud.aws.region.static=eu-west-3
storage.s3.accessKey=AKIAJNGI4VX4DTY4U24Q

想你的帮助。

4

2 回答 2

2

我在尝试使用 LocalStack 和在我的机器上本地配置的 S3 时遇到了类似的问题。由于 Spring Boot 没有配置端点的选项,我们必须自己定义 bean。然后,我们只需要使用新定义的 bean。

/**
 * It must be configured, if we need to upload a file using the LocakStack configuration.
 * Because of it, we must define a new client since the default one has not an option to configure the Endpoint.
 *
 * @see org.springframework.cloud.aws.context.config.annotation.ContextResourceLoaderConfiguration.Registrar#registerBeanDefinitions(AnnotationMetadata, BeanDefinitionRegistry)
 */
@Bean(name = "amazonS3Client")
public AmazonS3 amazonS3Client(AWSCredentialsProvider credentialsProvider,
                               RegionProvider regionProvider,
                               @Value("${aws.s3.default-endpoint:https://s3.amazonaws.com}") String endpoint) {

    return AmazonS3ClientBuilder.standard()
        .withCredentials(credentialsProvider)
        .withEndpointConfiguration(
            new AwsClientBuilder.EndpointConfiguration(endpoint, regionProvider.getRegion().getName()))
        .build();
}
于 2019-11-28T20:44:22.277 回答
0

您可以使用cloud.aws.s3.endpoint属性来覆盖端点。

于 2021-09-01T17:57:54.200 回答