3

嗨,我正在使用下面的代码来获取存储桶的大小。进行了全面研究,但唯一的方法是循环遍历每个文件。在循环遍历时,一些存储桶似乎是在不同的区域创建的,我最终得到了上面错误

AWS::S3::PermanentRedirect: The bucket you are attempting to access must be addressed         using   the specified endpoint. Please send all future requests to this endpoint. from /home//.rvm/gems/ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/error.rb:38:in `raise'

终点是 us-west-1,需要帮助解决上述问题以及如何将我的代码动态切换到我的存储桶所属的区域。在失败的情况下还需要添加异常的建议下面是我的代码。请随意发表评论。

def get_bucket
  s3 = AWS::S3::Base.establish_connection!(:access_key_id => @config[:ACCESS_KEY_ID], :secret_access_key => @config[:SECRET_ACCESS_KEY])
  if !s3.nil?
    AWS::S3::Service.buckets.each do |bucket|
      puts bucket.inspect
      if !bucket.nil?
        size = 0
        # I'm harding coding below bucket names, for code not to fail
        if ![
             'cf-templates-m01ixtvp0jr0-us-west-1',
             'cf-templates-m01ixtvp0jr0-us-west-2',
             'elasticbeanstalk-us-west-1-767904627276',
             'elasticbeanstalk-us-west-1-akiai7bucgnrthi66w6a',
             'medidata-rave-cdn'
            ].include? bucket.name
          bucket_size = AWS::S3::Bucket.find(bucket.name)
          if !bucket_size.nil?
            bucket_size.each do |obj|
              if !obj.nil?
                size += obj.size.to_i
              end
            end
          end
        end

        load_bucket(bucket.name,bucket.creation_date,size,@config[:ACCOUNT_NAME])
      end
    end
  end
end
4

2 回答 2

1

问题是存储桶可以存在于不同的区域,虽然您可以列出来自同一连接的所有存储桶(与其他被锁定到创建它们的位置的 AWS 实体不同),但对存储桶的其他操作需要您登录到它们被限制到的特定“端点”(区域)。

我的解决方案是检查存储桶的位置,然后重新登录到该区域:

s3 = AWS::S3.new(@awscreds)
if s3.buckets[bucket].location_constraint != @awscreds[:region] then
  # need to re-login, otherwise the S3 upload will fail
  s3 = AWS::S3.new(@awscreds.merge(region: s3.buckets[bucket].location_constraint))
end
于 2014-10-19T08:32:46.520 回答
0

我不明白您如何构建 URL 来访问您的存储桶。

如果它是美国标准,你可以说http://s3.amazonaws.com/BUCKETNAME/path/to/file。如果它在其他任何地方,则不起作用(非巧合的是,您仅限于存储桶名称的域允许字符(仅限小写和数字))并且您使用http://BUCKETNAME.s3.amazonaws.com/path /到/文件

这篇文章可能会有所帮助: http ://docs.aws.amazon.com/general/latest/gr/rande.html

于 2013-10-28T12:29:06.453 回答