AWS SDK for JavaでAmazon SimpleDBを使う
前回、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は同期アクセス版のクライアントです。
非同期版は別にあるのですが、今回は同期版で進めます。
// アクセスキーと秘密キーは任意のものを指定してください。
String accessKey = "xxxxxxxxxxxxxxx";
String secretKey = "xxxxxxxxxxxxxxx";
AmazonSimpleDB sdb = new AmazonSimpleDBClient(new BasicAWSCredentials(accessKey, secretKey));
■ エンドポイントURLでRegionの指定
アメリカ東海岸、西海岸、シンガポールなど、どこのSimpleDBサーバを使うか指定します。
sdb.setEndpoint("sdb.us-west-1.amazonaws.com");
今回はアメリカ西海岸を使うことにします。各Regionのエンドポイントは以下にあります。
http://docs.amazonwebservices.com/AmazonSimpleDB/latest/DeveloperGuide/index.html?Endpoints.html
■ ドメインを作成(CreateDomain)
ここまでで準備ができたのでドメイン作成から始めてみます。
"book"というドメインを作ってみます。以下の通りです。簡単ですね。
sdb.createDomain(new CreateDomainRequest("book"));
■ アイテムを作ってみます(PutAttributes)
"book"というドメインに、キーをISBN(4873110963)として、属性には"name"と"author"を入れて
アイテムを作ってみます。
sdb.putAttributes(new PutAttributesRequest()
.withDomainName("book")
.withItemName("4873110963")
.withAttributes(
new ReplaceableAttribute("name","Programming Perl", true),
new ReplaceableAttribute("author","Larry Wall", true)
)
);
けっこう簡単ですね。
■ アイテムを1件取得します(GetAttributes)
先ほど作成したアイテムを取得します。GetAttributesというAPIを使います。
ドメインとアイテムのキー(ItemName)を指定して取得します。取得できた値は
GetAttributesResultというクラスのインスタンスに格納されるので、以下のように
ループをまわすと属性情報が取得できます。
GetAttributesResult getAttrResult =
sdb.getAttributes(
new GetAttributesRequest()
.withDomainName("book")
.withItemName("4873110963")
);
// 属性情報を表示します
for (Attribute attr : getAttrResult.getAttributes()) {
System.out.println("name = " + attr.getName() + ", value = " + attr.getValue());
}
■ Select文でアイテムを取得します。
以下のようにSelect文を指定して、値を取得することができます。
取得できる値はItemクラスのインスタンスに格納されて返って来ます。
これも簡単にいきますね。
String query = "select name, author from book where author like \"Larry%\" ";
for (Item item : sdb.select(new SelectRequest(query)).getItems()) {
System.out.println("------------");
System.out.println("Item Name = " + item.getName());
for (Attribute attribute : item.getAttributes()) {
System.out.println("\tAttribute");
System.out.println("\t\tName = " + attribute.getName());
System.out.println("\t\tValue = " + attribute.getValue());
}
}
■ アイテムの削除(DeleteAttributes)
あるアイテムの、ある属性でけ削除したい場合はDeleteAttributesというAPIを使います。
bookドメインのあるアイテムの"author"という属性を削除したい場合、以下のように
書きます。
sdb.deleteAttributes(new DeleteAttributesRequest("book", "4873110963")
.withAttributes(new Attribute().withName("author")));
また、あるアイテムをひとつまるごと消したい場合は、以下のように
属性を指定しないで、DeleteAttributesを呼び出します。
sdb.deleteAttributes(new DeleteAttributesRequest("book", "4873110963"));
■ Consistent Readの指定
Amazon SimpleDBでは一貫性読み込みのオプションをつけて、アイテムを読み込むことが
できます。これも非常に簡単でGetAttributesのAPIでwithConsistentReadをtrueに設定するだけです。
sdb.getAttributes(new GetAttributesRequest().withDomainName("book").withItemName("4873110963").withConsistentRead(true));
■ ドメイン削除
最後にドメイン削除です。以下のような感じであっさりです。
sdb.deleteDomain(new DeleteDomainRequest("book"));
■ まとめ
今回はAWS SDK for Javaを使ってAmazon SimpleDBを操作する方法の主要な箇所をだいたい書きました。この記事自体は技術的には内容は薄いですが、簡単なお勉強には役に立つかもしれません。
次回からはAmazon Web Servicesからはちょっと離れたクラウドネタを書いてみようかと
思います。