Назад | Перейти на главную страницу

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

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

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

Новый чиновник AWS CLI изначально поддерживает большую часть функций 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 с уменьшенной избыточностью в своей корзине ЕС во время миграции, чтобы получить более низкие скорости передачи данных и более быстрое время отклика, поскольку данные являются просто копией данных из США.

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

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