Как переместить ковш S3 в другое место

Мы используем S3 для хранения миллионов записей в нашем веб-приложении, теперь мы переносим все это на EC2, серверы ЕС, и мы также хотим перенести эти данные S3 в ЕС. Но используемый нами сегмент находится в США, и, похоже, не существует инструмента для перемещения всего содержимого сегмента в другой сегмент.

Существует также проблема в том, как синхронизировать данные позже, когда мы переключимся на корзину ЕС, данные, которые будут созданы в то время, пока выполнялась миграция.

5 ответов

Новый официальный CLI AWS изначально поддерживает большинство функций s3cmd,

http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html

aws s3 sync s3://oldbucket s3://newbucket --source-region us-west-1 --region us-west-2

Я думаю, вы можете запустить:

s3cmd --recursive cp s3://oldbucket/ s3://newbucket

Это должно скопировать это непосредственно.

Я не знаю пакетного решения для этого, но по сути это просто СПИСОК корзины, а затем PUT-копирование каждого объекта из корзины США в корзину ЕС. API PUT-copy поддерживает "if-Modified-Since" и "If-none-match", поэтому вы можете запускать его повторно, не дублируя при этом: http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/index.html?RESTObjectCOPY.html

Для живой миграции я бы предложил следующий подход:

  1. Необязательный первый шаг. Если требуется перенести огромное количество данных, рассмотрите возможность использования AWS Import/Export для захвата первого снимка данных на физическом устройстве в США и его физической отправки в ЕС. Это может сэкономить ваше время и деньги.
    • Настройте скрипт для переноса данных из США в ЕС, используя if-Modified-Since или If-none-match, как описано выше. Сделайте это достаточно умным, чтобы не засорять свежие данные ЕС устаревшими данными США (как только вы перейдете к шагу 5 ниже). Запускайте его непрерывно в цикле, пока два блока не окажутся примерно в одном и том же состоянии.
    • Измените свое веб-приложение так, чтобы оно одновременно передавало данные как в США, так и в ЕС, продолжая получать данные исключительно из США.
    • Продолжайте запускать сценарий миграции, пока не будете уверены, что сегменты находятся в точно том же состоянии (или настолько близко, насколько это возможно, учитывая возможную согласованность).
    • Снова измените веб-приложение, чтобы получать данные исключительно из корзины ЕС.
    • Теперь вы можете отключить скрипт миграции.
    • Ищите возможные отклонения в последовательности и устраняйте их.
    • Измените веб-приложение, чтобы прекратить ПОЛУЧЕНИЕ данных в ведро США.
    • УДАЛИТЬ все в ведре США.

Возможно, вы захотите использовать S3 Reduced Redundancy Storage в своем сегменте ЕС во время миграции, чтобы получить более низкие скорости передачи данных и более быстрое время отклика, поскольку данные являются лишь дубликатом данных из США.

Вы также можете рассмотреть возможность создания межрегиональной репликации, которая позволяет копировать и синхронизировать данные между регионами https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/

Я проделал большую работу с S3 и никогда не сталкивался с инструментом, который будет делать это изначально. Однако было бы не так сложно использовать пару сценариев синхронизации s3cmd-sync для синхронизации двух сегментов друг с другом.

Другие вопросы по тегам