使用 Amazon SDK for PHP 版本 3 的 Amazon S3 多区域客户端 - Amazon SDK for PHP
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon SDK for PHP 版本 3 的 Amazon S3 多区域客户端

Amazon SDK for PHP版本 3 提供一种通用的多区域客户端,可用于任何服务。它支持用户为任何命令提供 @region 输入参数,以指定向哪个 Amazon 区域发送命令。此外,SDK 为 Amazon S3 提供的多区域客户端可针对特定的 S3 错误智能响应,并据此重新路由命令。它支持用户使用同一客户端与多个区域通信。对于使用 Amazon SDK for PHP 版本 3 的 Amazon S3 Stream Wrapper 的用户而言,这是特别有用的功能,因为存储桶驻留在多个区域中。

基本用法

无论使用标准 S3 客户端还是多区域客户端,Amazon S3 客户端的基本用法模式都是相同的。在命令级别,唯一的用法区别是可使用 @region 输入参数来指定 Amazon 区域。

// Create a multi-region S3 client $s3Client = (new \Aws\Sdk)->createMultiRegionS3(['version' => 'latest']); // You can also use the client constructor $s3Client = new \Aws\S3\S3MultiRegionClient([ 'version' => 'latest', // Any Region specified while creating the client will be used as the // default Region 'region' => 'us-west-2', ]); // Get the contents of a bucket $objects = $s3Client->listObjects(['Bucket' => $bucketName]); // If you would like to specify the Region to which to send a command, do so // by providing an @region parameter $objects = $s3Client->listObjects([ 'Bucket' => $bucketName, '@region' => 'eu-west-1', ]);
重要

如果使用多区域 Amazon S3 客户端,您不会遇到永久性的重定向异常。如果命令发送到错误的区域,标准 Amazon S3 客户端会抛出 Aws\S3\Exception\PermanentRedirectException 的实例。而多区域客户端会将该命令分派到正确的区域。

存储桶区域缓存

Amazon S3 多区域客户端会为给定存储桶驻留的 Amazon 区域保留内部缓存。默认情况下,每个客户端都有它自己的内存中的缓存。要在客户端或进程之间共享缓存,请提供 Aws\CacheInterface 的一个实例,作为多区域客户端的 bucket_region_cache 选项。

use Aws\DoctrineCacheAdapter; use Aws\Sdk; use Doctrine\Common\Cache\ApcuCache; $sdk = new Aws\Sdk([ 'version' => 'latest', 'region' => 'us-west-2', 'S3' => [ 'bucket_region_cache' => new DoctrineCacheAdapter(new ApcuCache), ], ]);