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