Amazon S3 的跨区域访问 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon S3 的跨区域访问

您在使用 Amazon Simple Storage Service (Amazon S3) 桶时,通常会知道桶的 Amazon Web Services 区域。您使用的区域是在您创建 S3 客户端时确定的。

但有时,您可能需要使用一个特定的桶,但您不知道该桶是否位于为 S3 客户端设置的区域中。

您可以使用 SDK 启用跨不同区域访问 S3 桶的功能,而不必进行更多调用来确定桶区域。

设置

SDK 版本 2.20.111 已支持跨区域访问。请在 Maven 构建文件中使用此版本或更高版本作为 s3 依赖项,如以下代码段所示。

<dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> <version>2.20.111</version> </dependency>

接下来,在创建 S3 客户端时,启用跨区域访问,如代码段所示。默认情况下,未启用此访问。

S3AsyncClient client = S3AsyncClient.builder() .crossRegionAccessEnabled(true) .build();

SDK 如何提供跨区域访问

当您在请求中引用现有桶时(例如使用 putObject 方法),SDK 会向为客户端配置的区域发起请求。

如果该特定区域中不存在该桶,则错误响应将包括该桶所在的实际区域。然后,SDK 在第二个请求中使用正确的区域。

为了优化将来对同一个桶的请求,SDK 会在客户端中缓存此区域映射。

注意事项

启用跨区域桶访问时,请注意,如果桶不在客户端配置的区域中,则可能会导致第一次 API 调用延迟增加。但是,后续调用会受益于缓存的区域信息,从而提高性能。

启用跨区域访问后,对桶的访问权限不会受到影响。无论桶位于哪个区域,用户都必须获得访问桶的授权。