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