1

RackspaceからAmazonに移行する必要があります。Cloudfilesに多くのファイルを保存した大きなRailsアプリがあり、それらをS3にエクスポートする必要があります。その移行を行うためのスクリプトまたはプロセスを知っていますか?

ありがとうございました

4

4 に答える 4

4

ヒント:ファイルがたくさんある(または大きなファイルがいくつかある)場合は、このためにEC2インスタンスをレンタルするのが理にかなっています。両端で帯域幅を支払う必要がありますが、EC2とS3間の転送は無料です。これにより、サーバーの帯域幅コストが節約されます。

于 2011-02-09T00:29:14.667 に答える
3

それぞれの宝石とレーキタスクを使用してこのようなことを行うのはかなり簡単なはずです:

# 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は、いかなる種類の「投稿先」サービスも提供しません(当然のことながらそうです)。

于 2011-01-18T00:28:50.987 に答える
2

これが私が使ったものです

  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
于 2014-09-17T17:50:58.660 に答える
0

私は最近これを自分で行う必要があり、可能な限り効率的に行うための優れたRubyスクリプトを作成しました(GILを回避するためにプロセスをフォークします)。16コアのEC2インスタンスを起動し、1時間半弱で175,000個のファイルを転送できました。インスタンスの費用は1.32ドルです。https://github.com/cannikin/great-migration

于 2016-02-20T17:10:26.447 に答える