Irbコンソールでこのようにawss3アカウントへの接続を確立しようとしました-
AWS::S3::Base.establish_connection!(:access_key_id => 'my access key', :secret_access_key => 'my secret key', :server => "s3-ap-southeast-1.amazonaws.com")
そしてそれはうまく機能し、これを促します-
=> #<AWS::S3::Connection:0x8cd86d0 @options={:server=>"s3-ap-southeast-1.amazonaws.com", :port=>80, :access_key_id=>"my access key", :secret_access_key=>"my secret key"}, @access_key_id="my access key", @secret_access_key="my secret key", @http=#<Net::HTTP s3-ap-southeast-1.amazonaws.com:80 open=false>>
「SingaporeRegion」に基づくバケットがあり、そのエンドポイントのサーバーは次のとおりです。s3-ap-southeast-1.amazonaws.comしたがって、このコマンドを使用してアクセスしようとすると、
AWS::S3::Service.buckets
アカウント内のすべてのバケットを正しくフェッチします-
=> [#<AWS::S3::Bucket:0x8d291fc @attributes={"name"=>"bucket1", "creation_date"=>2011-06-28 10:08:58 UTC}, @object_cache=[]>,
#<AWS::S3::Bucket:0x8d291c0 @attributes={"name"=>"bucket2", "creation_date"=>2011-07-04 07:15:21 UTC}, @object_cache=[]>,
#<AWS::S3::Bucket:0x8d29184 @attributes={"name"=>"bucket3", "creation_date"=>2011-07-04 07:39:21 UTC}, @object_cache=[]>]
ここで、bucket1はシンガポール地域に属し、他の2は米国地域に属しています。だから、私がこれをするとき-
AWS::S3::Bucket.find("bucket1")
それは私にこのエラーを示しています:
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/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/error.rb:38:in `raise'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:72:in `request'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/base.rb:88:in `get'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:102:in `find'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:145:in `objects'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:313:in `reload!'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:242:in `objects'
from /home/surya/.rvm/gems/Ruby-1.9.2-p180/gems/aws-s3-0.6.2/lib/aws/s3/bucket.rb:253:in `each'
from (irb):5
from /home/surya/.rvm/rubies/Ruby-1.9.2-p180/bin/irb:16:in `<main>'
昨日同じことがうまくいったので、これが起こっている理由がわかりません。何か推測?私はここで何かが足りないのですか?
接続する前に、
AWS::S3::DEFAULT_Host.replace "s3-ap-southeast-1.amazonaws.com"
あなたができるもう一つのことは(これは本当に良い解決策ではありませんが)配列インデックスでバケットにアクセスすることです
AWS::S3::Bucket.list[0]
プラットフォームごとに異なるリージョンを実行しようとしているときに問題が発生した場合は、次のように構成を設定できます。
AWS.config({
:region => 'us-west-2',
:access_key_id => ENV["AWS_ACCESS_KEY_ID"],
:secret_access_key => ENV["AWS_SECRET_ACCESS_KEY"],
:s3 => { :region => 'us-east-1' }
})
ここで私もこの問題に遭遇しました。私はブラジルに住んでいるので、サンパウロバケットを作成してみました。それを削除して、US Standartバケットを使用した後、すべてがうまく機能しました。
s3バケットにアクセスするには、awsリージョンをs-standardに設定する必要があります。
Linuxコマンドラインの場合は、次を実行します:export AWS_DEFAULT_REGION="us-standard"
。