Перенос файлов из облачных файлов на S3 - PullRequest
1 голос
/ 14 декабря 2010

Мне нужно перейти с Rackspace на Amazon. У меня есть большое приложение rails, которое сохранило много файлов в Cloudfiles, и мне придется экспортировать их в S3. Вам известен какой-либо сценарий или процесс, выполняющий эту миграцию?

Спасибо

Ответы [ 4 ]

4 голосов
/ 09 февраля 2011

Просто совет: если у вас много файлов (или несколько больших), имеет смысл арендовать для этого экземпляр EC2.Хотя вам все равно придется оплачивать пропускную способность на обоих концах, передача между EC2 и S3 бесплатна.Это экономит пропускную способность сервера.

3 голосов
/ 18 января 2011

Должно быть довольно просто сделать что-то подобное, используя соответствующие драгоценные камни и задание рейка:

# connect to cloudfiles & aws
cf_container.objects.each do |object_name|
  cf_object = cf_container.object object_name
  AWS::S3::S3Object.store(object_name, cf_object.data, 'name_of_s3_bucket')
end

Самым большим недостатком чего-то подобного является то, что вы пропускаете каждый файл через свой сервер / локальную машину. S3 позволяет вам сделать запись доступной для записи из другого источника, но Rackspace CloudFiles API не предлагает какой-либо вид услуги «пост-к» (понятно).

2 голосов
/ 17 сентября 2014

Вот что я использовал

  def move_to_s3_from_rackspace()
    cf_connection = Fog::Storage.new({
      :provider           => 'Rackspace',
      :rackspace_username => USERNAME,
      :rackspace_api_key  => RACKSPACE_API_KEY,
      :rackspace_region   => RACKSPACE_REGION
    })
    s3_connection = Fog::Storage.new({
      :provider => 'AWS',
      :aws_access_key_id => AWS_ACCESS_KEY_ID,
      :aws_secret_access_key => AWS_SECRET_ACCESS_KEY
    })
    cf_directory = cf_connection.directories.get(RACKSPACE_CONTAINER_NAME)
    s3_directory = s3_connection.directories.get(S3_BUCKET_NAME)
    s3_file_keys = s3_directory.files.map { |file| file.key }
    cf_directory.files.each do |file|
      if s3_file_keys.include?(file.key) # already exists
        p "file already exists, skipping: '#{file.key}'"
        next
      end
      s3_directory.files.create(key: file.key, body: file.body)
    end
  end
0 голосов
/ 20 февраля 2016

Мне недавно пришлось сделать это самому, и я написал хороший скрипт на Ruby, чтобы сделать это настолько эффективно, насколько смог (разветвляя процессы, чтобы избежать GIL). Я развернул 16-ядерный экземпляр EC2 и смог передать 175 000 файлов всего за полтора часа. Стоимость $ 1,32 за экземпляр. https://github.com/cannikin/great-migration

...