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

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

Amazon S3 的跨区域访问

当你使用亚马逊简单存储服务 (Amazon S3) Service 存储桶时,你通常知道 Amazon Web Services 区域 该存储桶的用法。您使用的区域是在您创建 S3 客户端时确定的。

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

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

设置

的版本中提供了对跨区域访问的 Supp 2.20.111 ort。SDK请在 Maven 构建文件中使用此版本或更高版本作为 s3 依赖项,如以下代码段所示。

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

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

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

如何SDK提供跨区域访问

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

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

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

注意事项

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

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