如何使用Amazon AWS PHP SDK在区域之间复制S3对象?

时间:2017-02-23 11:07:36

标签: amazon-web-services amazon-s3 aws-php-sdk

我正在尝试使用Amazon AWS PHP SDK v3在两个不同区域的两个存储桶之间复制Amazon AWS S3对象。这将是一次性过程,因此我不需要cross-region replication。试图使用copyObject(),但无法指定区域。

$s3->copyObject(array(
    'Bucket'     => $targetBucket,
    'Key'        => $targetKeyname,
    'CopySource' => "{$sourceBucket}/{$sourceKeyname}",
));

来源: http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectUsingPHP.html

2 个答案:

答案 0 :(得分:6)

您不需要为该操作指定区域。它会找出目标存储区的区域并进行复制。

但您可能是对的,因为在AWS CLI上存在PHP SDK上不存在的源区域和目标区域属性。所以你可以完成这样的任务:

  1. 在源区域中创建临时存储桶。
  2. 在目标区域中创建存储桶。
  3. 配置从临时存储桶复制到目标存储区。
  4. 在临时存储桶set expiration rule上,文件将在中间存储桶中自动删除一小段时间。
  5. 使用PHP SDK将对象从源存储桶复制到临时存储桶。
  6. 您的所有对象也将被复制到另一个区域。
  7. 您可以在一天后删除临时存储桶。
  8. 或者只使用cli并使用以下单个命令:

    aws s3 cp s3://my-source-bucket-in-us-west-2/ s3://my-target-bucket-in-us-east-1/ --recursive --source-region us-west-2 --region us-east-1
    

答案 1 :(得分:2)

不同的区域桶也可以是不同的帐户。其他人一直在做的是从一个存储桶复制并在本地临时保存数据,然后上传到具有不同凭据的不同存储桶。 (如果您有两个具有不同凭据的区域存储桶)。

CLI工具的最新更新允许您在同一帐户下从存储桶复制到存储桶。使用像Çağatay Gürtürk提到的内容。