【问题标题】:Port files from Cloudfiles to S3将文件从 Cloudfiles 移植到 S3
【发布时间】:2010-12-14 19:28:54
【问题描述】:

我必须从 Rackspace 迁移到亚马逊。我有一个大型 Rails 应用程序,它在 Cloudfiles 上保存了很多文件,我必须将它们导出到 S3。 您是否知道执行该迁移的任何脚本或流程?

谢谢

【问题讨论】:

    标签: ruby amazon-s3 rackspace cloudfiles


    【解决方案1】:

    提示:如果您有很多文件(或几个大文件),那么为此租用一个 EC2 实例是有意义的。虽然您仍然需要为两端的带宽付费,但 EC2 和 S3 之间的传输是免费的。这样可以节省服务器的带宽成本。

    【讨论】:

      【解决方案2】:

      使用相应的 gem 和 rake 任务来做这样的事情应该相当简单:

      # 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 不提供任何类型的“发布到”服务(可以理解)。

      【讨论】:

        【解决方案3】:

        这是我用的

          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
        

        【讨论】:

          【解决方案4】:

          我最近不得不自己做这件事,并编写了一个很好的 Ruby 脚本来尽可能高效地完成它(分叉进程以避免 GIL)。我启动了一个 16 核 EC2 实例,并且能够在不到一个半小时的时间内传输 175,000 个文件。该实例的成本为 1.32 美元。 https://github.com/cannikin/great-migration

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-19
            • 2014-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-03
            相关资源
            最近更新 更多