本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon S3 多区域客户端与 AWS SDK for PHP 版本 3
AWS SDK for PHP版本 3 提供一种通用的多区域客户端,可用于任何服务。它支持用户为任何命令提供 @region 输入参数,以指定向哪个 AWS 区域发送命令。此外,开发工具包为 Amazon S3 提供的多区域客户端可针对特定的 Amazon S3 错误智能响应,并据此重新路由命令。它支持用户使用同一客户端与多个区域通信。对于Amazon S3 Stream Wrapper 与适用于 PHP 的 AWS 开发工具包版本 3 的用户而言,这是特别有用的功能,因为存储桶驻留在多个区域中。
基本用法
无论使用标准 S3 客户端还是多区域客户端,Amazon S3 客户端的基本用法模式是相同的。在命令级别,唯一的用法区别是可使用 @region 输入参数指定 AWS 区域。
// 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 多区域客户端会为给定存储桶驻留的 AWS 区域保留内部缓存。默认情况下,每个客户端都有它自己的内存中的缓存。要在客户端或进程之间共享缓存,请提供
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),
],
]);