AWS S3如何将文件从存储桶移动到其他区域的另一个存储桶

时间:2018-07-11 03:14:23

标签: c# amazon-s3

我在不同地区有两个存储桶,B1位于APSoutheast2(悉尼),另一个(B2)位于USWest1(美国西部(加利福尼亚北部))。 我正在尝试使用AWS S3 SDK(.NET)将某些文件从B1移到B2,但似乎看不到一种简单的方法。

这是我的示例代码:

var sydneyClient = new AmazonS3Client("accessKeyID", "secretKey", 
RegionEndpoint.APSoutheast2)
var fileInfo = new S3FileInfo(sydneyClient, "b1", "filePath");
if (!fi.Exists)
{
    return;
}
fileInfo.MoveTo("b2", "filePath");

这给了我以下错误:

Amazon.S3.AmazonS3Exception: 'Error making request with Error Code 
MovedPermanently and Http Status Code MovedPermanently. No further error 
information was returned by the service.'

我认为这是因为b2与执行此操作时位于不同的区域:

var listAllRequest = new ListObjectsRequest();
listAllRequest.BucketName = "b2";
var listAllResponse = sydneyClient.ListObjects(listAllRequest);

我明白了:

The bucket you are attempting to access must be addressed using the specified 
endpoint. Please send all future requests to this endpoint

我知道我的“ sydneyClient”无法访问在美国创建的另一个存储桶是有道理的,因为我在创建该存储桶时将其指定为“ RegionEndpoint.APSoutheast2”,并且每个区域都独立于AWS文档。

如果我尝试将文件从b1移到APSoutheast2中的另一个存储桶,则可以正常工作。

我知道我可以将文件从b1下载到本地存储,为b2创建另一个AmazonS3Client,然后执行上传。 但是在这种情况下,是否有一种简单的方法将文件从b1移到另一个区域中的存储桶?

谢谢

2 个答案:

答案 0 :(得分:3)

Amazon S3没有“移动”命令。相反,您应该使用AmazonS3Client.CopyObject Method,并指定:

public virtual CopyObjectResponse CopyObject(
         String sourceBucket,
         String sourceKey,
         String destinationBucket,
         String destinationKey
)

然后,删除原始对象。

这在存储桶之间以及区域之间也起作用。将请求发送到目标区域(即,目标存储桶所在的区域)。

答案 1 :(得分:0)

您可以直接使用AWS管理门户进行配置,而无需更改任何代码。

此功能称为S3跨区域复制(简称CRR)。

他们有一个setup guide here