前回、Amazon SimpleDBの記事で、コマンドラインから操作する方法を紹介しましたが、
今日はJavaから使う方法を紹介したいと思います。
■ AWS SDK for Java
JavaからAmazon Web Servicesを操作するには、Amazon純正のSDKである
「AWS SDK for Java」を使います。以下からダウンロードできます。
http://aws.amazon.com/sdkforjava/
■ 使うための準備
AWS SDK for Javaの現在のバージョンは1.0.14なので、aws-java-sdk-1.0.14.jarというファイルがダウンロードできると思います。これをクラスパスに通しましょう。
また、CommonsのHTTPクライアントライブラリやCODECライブラリが必要になるので
それぞれ以下からダウンロードしてクラスパスに通しましょう。
http://hc.apache.org/httpclient-3.x/
http://commons.apache.org/codec/
■ 最初にアクセスキー、秘密キーのセットアップ
最初にアクセスキーと秘密キーを指定して、AWSCredentialという認証情報を持つインタフェースを実装しているBasicAWSCredentialsクラスのインスタンスを作成します。
そして、認証情報を引数にしてAmazonSimpleDBClientというのクライアントクラスの
インスタンスを作成します。AmazonSimpleDBClientは同期アクセス版のクライアントです。
非同期版は別にあるのですが、今回は同期版で進めます。
2 | String accessKey = "xxxxxxxxxxxxxxx" ; |
3 | String secretKey = "xxxxxxxxxxxxxxx" ; |
5 | AmazonSimpleDB sdb = new AmazonSimpleDBClient( new BasicAWSCredentials(accessKey, secretKey)); |
■ エンドポイントURLでRegionの指定
アメリカ東海岸、西海岸、シンガポールなど、どこのSimpleDBサーバを使うか指定します。
1 | sdb.setEndpoint( "sdb.us-west-1.amazonaws.com" ); |
今回はアメリカ西海岸を使うことにします。各Regionのエンドポイントは以下にあります。
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?Endpoints.html
■ ドメインを作成(CreateDomain)
ここまでで準備ができたのでドメイン作成から始めてみます。
"book"というドメインを作ってみます。以下の通りです。簡単ですね。
1 | sdb.createDomain( new CreateDomainRequest( "book" )); |
■ アイテムを作ってみます(PutAttributes)
"book"というドメインに、キーをISBN(4873110963)として、属性には"name"と"author"を入れて
アイテムを作ってみます。
1 | sdb.putAttributes( new PutAttributesRequest() |
2 | .withDomainName( "book" ) |
3 | .withItemName( "4873110963" ) |
5 | new ReplaceableAttribute( "name" , "Programming Perl" , true ), |
6 | new ReplaceableAttribute( "author" , "Larry Wall" , true ) |
けっこう簡単ですね。
■ アイテムを1件取得します(GetAttributes)
先ほど作成したアイテムを取得します。GetAttributesというAPIを使います。
ドメインとアイテムのキー(ItemName)を指定して取得します。取得できた値は
GetAttributesResultというクラスのインスタンスに格納されるので、以下のように
ループをまわすと属性情報が取得できます。
01 | GetAttributesResult getAttrResult = |
03 | new GetAttributesRequest() |
04 | .withDomainName( "book" ) |
05 | .withItemName( "4873110963" ) |
09 | for (Attribute attr : getAttrResult.getAttributes()) { |
10 | System.out.println( "name = " + attr.getName() + ", value = " + attr.getValue()); |
■ Select文でアイテムを取得します。
以下のようにSelect文を指定して、値を取得することができます。
取得できる値はItemクラスのインスタンスに格納されて返って来ます。
これも簡単にいきますね。
01 | String query = "select name, author from book where author like \"Larry%\" " ; |
02 | for (Item item : sdb.select( new SelectRequest(query)).getItems()) { |
03 | System.out.println( "------------" ); |
04 | System.out.println( "Item Name = " + item.getName()); |
05 | for (Attribute attribute : item.getAttributes()) { |
06 | System.out.println( "\tAttribute" ); |
07 | System.out.println( "\t\tName = " + attribute.getName()); |
08 | System.out.println( "\t\tValue = " + attribute.getValue()); |
■ アイテムの削除(DeleteAttributes)
あるアイテムの、ある属性でけ削除したい場合はDeleteAttributesというAPIを使います。
bookドメインのあるアイテムの"author"という属性を削除したい場合、以下のように
書きます。
1 | sdb.deleteAttributes( new DeleteAttributesRequest( "book" , "4873110963" ) |
2 | .withAttributes( new Attribute().withName( "author" ))); |
また、あるアイテムをひとつまるごと消したい場合は、以下のように
属性を指定しないで、DeleteAttributesを呼び出します。
1 | sdb.deleteAttributes( new DeleteAttributesRequest( "book" , "4873110963" )); |
■ Consistent Readの指定
Amazon SimpleDBでは一貫性読み込みのオプションをつけて、アイテムを読み込むことが
できます。これも非常に簡単でGetAttributesのAPIでwithConsistentReadをtrueに設定するだけです。
1 | sdb.getAttributes( new GetAttributesRequest().withDomainName( "book" ).withItemName( "4873110963" ).withConsistentRead( true )); |
■ ドメイン削除
最後にドメイン削除です。以下のような感じであっさりです。
1 | sdb.deleteDomain( new DeleteDomainRequest( "book" )); |
■ まとめ
今回はAWS SDK for Javaを使ってAmazon SimpleDBを操作する方法の主要な箇所をだいたい書きました。この記事自体は技術的には内容は薄いですが、簡単なお勉強には役に立つかもしれません。
次回からはAmazon Web Servicesからはちょっと離れたクラウドネタを書いてみようかと
思います。
コメント