启用vpc端点时,如何将S3对象从一个区域复制到另一个区域

时间:2018-05-10 00:32:18

标签: java amazon-s3 aws-sdk

最近,由于两个原因,我无法使用s3.copyObject(sourceBucket, sourceKey, destBucket, destKey);复制文件。

1)源和目标存储桶位于2个不同的区域(在我的情况下,us-east-1和us-east2)。

2)服务器所在的区域位于启用了S3端点的VPC中。 S3端点是S3的内部连接,但仅在同一区域

鉴于我们正在移动大文件,我们无法下载,甚至暂时上传。我们还希望保留S3端点,因为应用程序会在区域中严重使用S3资产。

1 个答案:

答案 0 :(得分:0)

解决方案是将文件从一个流流式传输到另一个流。我写了这个简单的函数来处理它。

ZipException只是一个自定义异常。扔任何你想要的东西。

希望这有助于某人。

public static void copyObject(AmazonS3 sourceClient, AmazonS3 destClient, String sourceBucket, String sourceKey, String destBucket, String destKey) throws IOException {

    S3ObjectInputStream inStream = null;
    try {
        GetObjectRequest request = new GetObjectRequest(sourceBucket, sourceKey);
        S3Object object = sourceClient.getObject(request);

        inStream = object.getObjectContent();
        destClient.putObject(destBucket,
                destKey, inStream, object.getObjectMetadata());


    } catch (SdkClientException e) {
        throw new ZipException("Unable to copy file.", e);
    } finally {
        if (inStream != null) {
            inStream.close();
        }
    }
}