AWS SDK for JavaでAmazonS3を使う
インストール解説動画
http://d36cz9buwru1tt.cloudfront.net/videos/eclipse-java-sdk-video.htmlインストールに成功するとこんな感じでメニューが出てきます。
AWS Explorer Viewが便利!
AWS Explorer Viewという機能が秀逸で、S3のバケット一覧を見たりバケット内のオブジェクト操作を行うことができます。
わざわざブラウザでくそ重いWebコンソール画面を開かなくて済むので大変便利です。
S3を扱うコードを書くときは、コード改修→バケットの中身確認→コード改修というサイクルをぐるぐるまわすことになるので、この一連の作業をEclipseだけで完結できるのは非常に効率がよいです。
S3で東京リージョンのバケットを扱う方法
SDKにはご丁寧にサンプルコードが同梱されています。このサンプルコードは実行可能になっていて、secret keyとaccess keyを設定すればすぐに動いてバケット作成→オブジェクト保存→取得→バケット削除までの一連の流れを実行してくれます。
ただ1点だけ問題があって、何も指定しないとUSリージョン決め打ちになってしまうのです。
東京リージョンのバケットにアクセスしようとするとエラーが出ます。
Caught an AmazonServiceException, which means your request made it to Amazon S3,
but was rejected with an error response for some reason.
Error Message: The bucket you are attempting to access must be addressed
using the specified endpoint. Please send all future requests to this endpoint.
HTTP Status Code: 301
AWS Error Code: PermanentRedirect
Error Type: Client
対処法
3時間ほどハマったあげくに解決方法がわかりました。下記のようにendpointを設定してあげましょう。
s3.setEndpoint("https://s3-ap-northeast-1.amazonaws.com");
これで東京リージョンを設定することができます。実際のコードはこんな感じになります。
AmazonS3 s3 = new AmazonS3Client(new PropertiesCredentials(
ConcurrentSample.class
.getResourceAsStream("AwsCredentials.properties")));
s3.setEndpoint("https://s3-ap-northeast-1.amazonaws.com");
String bucket = "my-first-s3-bucket-" + UUID.randomUUID();
String key = "MyObjectKey";
うまく動きましたか?Enjoy!