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

20

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

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

Скрат
источник

Ответы:

18

Новый официальный 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
AB
источник
Где можно найти список названий регионов?
Барт
Вы можете найти регионы S3 здесь: docs.aws.amazon.com/general/latest/gr/rande.html#s3_region Они практически идентичны регионам EC2, которые вы получаете aws ec2 describe-regions, но us-east-1также известны как стандарт США для S3 и являются несколько отличается по историческим причинам.
AB
5

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

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

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

Алексей
источник
CLI говорит: «команда не найдена»
Барт
3

Я не знаю пакетного решения для этого, но по сути это просто СПИСОК корзины, а затем 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 в своем сегменте ЕС во время миграции, чтобы получить более низкие скорости передачи данных и более быстрое время отклика, поскольку данные являются лишь дубликатом данных из США.

user44700
источник
1

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

jareks
источник
Пожалуйста, расширьте свой пост, чтобы быть самодостаточным.
Охотник на оленей
0

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

EEAA
источник
да, это бы сработало, но требует, чтобы мы загружали все локально, в то время как S3 API поддерживает перемещение / копирование записей без их загрузки.
скрат