RackspaceからAmazonに移行する必要があります。Cloudfilesに多くのファイルを保存した大きなRailsアプリがあり、それらをS3にエクスポートする必要があります。その移行を行うためのスクリプトまたはプロセスを知っていますか?
ありがとうございました
RackspaceからAmazonに移行する必要があります。Cloudfilesに多くのファイルを保存した大きなRailsアプリがあり、それらをS3にエクスポートする必要があります。その移行を行うためのスクリプトまたはプロセスを知っていますか?
ありがとうございました
ヒント:ファイルがたくさんある(または大きなファイルがいくつかある)場合は、このためにEC2インスタンスをレンタルするのが理にかなっています。両端で帯域幅を支払う必要がありますが、EC2とS3間の転送は無料です。これにより、サーバーの帯域幅コストが節約されます。
それぞれの宝石とレーキタスクを使用してこのようなことを行うのはかなり簡単なはずです:
# 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は、いかなる種類の「投稿先」サービスも提供しません(当然のことながらそうです)。
これが私が使ったものです
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
私は最近これを自分で行う必要があり、可能な限り効率的に行うための優れたRubyスクリプトを作成しました(GILを回避するためにプロセスをフォークします)。16コアのEC2インスタンスを起動し、1時間半弱で175,000個のファイルを転送できました。インスタンスの費用は1.32ドルです。https://github.com/cannikin/great-migration