Как скопировать объект S3 из одного региона в другой, когда включена конечная точка vpc - PullRequest
0 голосов
/ 10 мая 2018

Недавно мне не удалось скопировать файлы с использованием s3.copyObject(sourceBucket, sourceKey, destBucket, destKey); по двум причинам.

1) Источники и места назначения находятся в 2 разных регионах (в нашем случае us-east-1 и us-east2).

2) Область, в которой находится сервер, находится в VPC, для которого включена конечная точка S3. Конечная точка S3 - это внутреннее соединение с S3, , но только в том же регионе

Учитывая, что мы перемещаем большие файлы, мы не можем загрузить, а затем загрузить даже временно. Мы также хотели сохранить конечную точку S3 на месте, поскольку приложение серьезно использует ресурсы S3 один раз в регионе.

1 Ответ

0 голосов
/ 10 мая 2018

Решение состоит в том, чтобы скопировать файлы из одного потока в другой. Я написал эту простую функцию, которая справится с этим.

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();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...