Ruby で aws-sdk gem を使って、次のようなコードを書いたら例外が起きた。
require "aws"
s3 = AWS::S3.new(
access_key_id: "FOO",
secret_access_key: "XXX"
)
s3.buckets["bar"].objects.first
# AWS::S3::Errors::PermanentRedirect: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.
http://docs.amazonwebservices.com/general/latest/gr/rande.html をみると S3 の Asia Pacific (Tokyo) の endpoint は s3-ap-northeast-1.amazonaws.com
らしい。
指定の仕方は、ドキュメントでは見つけられなかったけど、次のように s3_endpoint オプションで渡してやれば動作した。
s3 = AWS::S3.new(
access_key_id: "FOO",
secret_access_key: "XXX",
s3_endpoint: "s3-ap-northeast-1.amazonaws.com"
)
ググると AWS::S3::DEFAULT_HOST.replace("s3-ap-northeast-1.amazonaws.com")
とせよ、という記述がたくさん見つかるけど aws-sdk v1.6.8 では AWS::S3::DEFAULT_HOST がなく、使えない。
参考: http://subtech.g.hatena.ne.jp/secondlife/20120116/1326715826