本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
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调用可能会导致延迟增加。但是,后续调用会受益于缓存的区域信息,从而提高性能。
启用跨区域访问后,对桶的访问权限不会受到影响。无论桶位于哪个区域,用户都必须获得访问桶的授权。