S3 复制对象请求区域



我正在尝试在不同区域中的 2 个 S3 存储桶之间复制一些对象。

我有这个:

static void PutToDestination(string filename)
{
var credentials = new Amazon.Runtime.BasicAWSCredentials(awsAccessKeyId, awsSecretKey);
var client = new Amazon.S3.AmazonS3Client(credentials, Amazon.RegionEndpoint.GetBySystemName(awsS3RegionNameSource));
CopyObjectRequest request = new CopyObjectRequest();
request.SourceKey = filename;
request.DestinationKey = filename;
request.SourceBucket = awsS3BucketNameSource;
request.DestinationBucket = awsS3BucketNameDest;
try
{ 
CopyObjectResponse response = client.CopyObject(request);
}
catch (AmazonS3Exception x)
{
Console.WriteLine(x);
}
}

我得到"您尝试访问的存储桶必须使用指定的终端节点进行寻址。请将所有将来的请求发送到此终结点。

似乎没有办法为源和目标设置单独的终结点。

我应该看看其他方法吗?

谢谢

你试过这个吗? https://github.com/aws/aws-sdk-java-v2/issues/2212(在构建 S3:客户端时提供目标区域(。为我工作:)

我认为,如果您没有明确指定区域,那么跨区域之间的复制应该可以工作。

请参阅文档。

但是,加速将不起作用,复制将是

复制=获取+放置

这是文档中的解释摘录,上面写着-

重要

Amazon S3 传输加速不支持跨区域副本。

在代码中,指定区域如下所示。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider())
.withRegion(clientRegion)
.build();

而是初始化没有区域的 S3client,如下所示。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new ProfileCredentialsProvider()).build();

最新更新