【问题标题】:S3 CopyObjectRequest between regions区域之间的 S3 CopyObjectRequest
【发布时间】:2018-05-11 19:11:33
【问题描述】:

我正在尝试在不同区域的 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);
        }
      }

我收到“您尝试访问的存储桶必须使用指定的端点进行寻址。请将所有未来请求发送到此端点。”

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

我应该看看其他方法吗?

谢谢

【问题讨论】:

  • 您应该在客户端构造函数中指定目标存储桶区域,而不是源存储桶。这就是你在做的吗?
  • 这就是问题所在。谢谢。

标签: amazon-web-services amazon-s3


【解决方案1】:

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

See documentation.

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

复制=获取+放置

这是文档的解释摘录-

重要

Amazon S3 Transfer Acceleration 不支持跨区域复制。

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

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

而是像下面那样初始化没有区域的 S3client。

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

【讨论】:

  • 很遗憾,这不起作用。您将收到异常 { "errorType": "AmazonS3Exception", "errorMessage": "eu-central-1 位置约束与此请求发送到的区域特定端点不兼容。",
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 2017-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-21
相关资源
最近更新 更多