2017-02-23 53 views
9

我试图在Amazon AWS PHP SDK v3的两个不同区域的两个存储桶之间复制Amazon AWS S3对象。这将是一次性的过程,所以我不需要cross-region replication。试图使用copyObject(),但没有办法指定该地区。如何使用Amazon AWS PHP SDK在区域之间复制S3对象?

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

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

回答

6

你并不需要为操作指定的区域。它会找出目标桶的区域并复制它。

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

  1. 在源区域中创建临时存储区。
  2. 在目标区域创建存储桶。
  3. 配置从临时存储区到目标存储区的复制。
  4. 在临时存储桶set expiration rule上,所以文件将在短暂时间后从临时存储桶中自动删除。
  5. 使用PHP SDK将源存储桶中的对象复制到临时存储桶中。
  6. 所有的对象也将被复制到另一个区域。
  7. 您可以在一天后移除临时存储桶。

或者只使用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 
2

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

CLI工具的最新更新允许您从一个桶到另一个桶进行复制,如果它在同一个帐户下。使用类似提到的东西Çağatay Gürtürk