Amazon DynamoDB Local & AWS SDK for Java を使ってみよう(前編)

こんにちは。松本です。
TECHSCORE Advent Calendar 2014 の 12 日目の投稿です。

本エントリーでは無料の Amazon DynamoDB Local を使って、AWS SDK for Java に用意されている AmazonDynamoDBv2 API を試してみたいと思います。

Amazon DynamoDB Local って?

DynamoDB Local は DynamoDB API と互換性を持つ小型のデータベースで、DynamoDB サービスを使ったアプリケーション開発向けに Amazon から無料で提供されています。その中身は SQLite や Jetty を使って実現されており、その名の通りローカル端末で動作させることができるのが特徴です。

DynamoDB Local

DynamoDB Local is compatible with the DynamoDB API. When you are ready to deploy your application, you simply redirect it to DynamoDB, without having to modify your application code. In addition, you do not need to have an Internet connection to use DynamoDB Local. You can develop applications without having to be connected to the network.

DynamoDB Local は、AWS のサイトから JAR ファイルをダウンロードして実行するだけで利用できますが、今日は eclipse から利用する方法について書いていきたいと思います。

インストール

DynamoDB Local を eclipse からインストールするのは簡単で、AWS Toolkit をインストールしていくつか手順を踏むだけです。

尚、本記事は次の環境で動作確認しています。

  • Eclipse Luna (4.4.1) Release for Windows 64 Bit
  • JRE 1.8.0_20
  • Java コンパイラー準拠レベル 1.8

※DynamoDB Local は JRE 6.x 以上が必要です。

Downloading and Running DynamoDB Local

Important
DynamoDB Local supports the Java Runtime Engine (JRE) version 6.x or newer; it will not run on older JRE versions.

1. AWS Toolkit for Eclipse のインストール

eclipse 上で Help > Eclipse Marketplace... をクリックして Eclipse Marketplace を開き、AWS Toolkit for Eclipse 2.0 をインストールします。「AWS Toolkit for Eclipse」をキーワードにして検索すればすぐに見つかります。

ウィザード中の Confirm Selected Features では、Amazon DynamoDB Management とAmazon EC2 Management を選択して下さい。Amazon EC2 Management は依存関係上、必要なのです。

インストール完了後、eclipse の再起動が求められるので実施して下さい。

2. AWS アカウント認証情報の入力

eclipse の再起動が完了すると AWS account credentials の入力が求められます。DynamoDB Local を使うだけなら実際の AWS アカウント認証情報を入力する必要はないので、適当な情報を設定してください。ここで設定したアクセスキーIDやシークレットアクセスキーは、SDK から DynamoDB Local を操作する場合にも利用します。

dynamodb_aws_account_credentials

3. Amazon DynamoDB Local のインストール

Window > Preferences から AWS Toolkit の DynamoDB Local Test Tool 画面を開くと、Version リストの中にインストール可能な DynamoDB Loacal のバージョンが表示されるので適当なものを選択(特に制約が無いなら最新の日付のバージョンを選べば良いです)して Install ボタンをクリック。

これで DynamoDB Local のインストールは完了です。

そして起動!

DynamoDB Local の起動は AWS Explorer から行います。

1. AWS Explorer を開く

eclipse 上で AWS Explorer が開いていなければ、Window > Show View > Other... から Show View ウィンドウを開いて AWS Toolkit 内の AWS Explorer から開いて下さい。

2. リージョンを Local に

AWS Explorer 上でリージョンを Local (localhost) に設定。

dynamodb_region

3. グローバルコンフィギュレーション

AWS Explorer 上で Global Configuration がないと怒られた場合は、Window > Preferences の AWS Toolkit 上で Global Configuration に適当な値を設定して下さい。入力する AWS アカウント認証情報は適当なもので構いません。

dynamodb_global-configuration

これで AWS Explorer の警告が消え、DynamoDB Local が利用可能な状態となります。

4. DynamoDB Local の起動

AWS Explorer 上で Amazon DynamoDB を右クリックし Start DynamoDB Local をクリック。
起動する DynamoDB Local のバージョンを聞いてくるので、インストール済みのバージョンを選択します。

これで起動完了。コンソールへの出力から、DynamoDB Local が Jetty が動いていることがわかりますね(状況によって、SQLite のログも出力されます)。

さあ、続いて SDK 経由で DynamoDB Local にアクセスする準備をしましょう。

AWS SDK for Java のインストール

今回は maven で構築することにします。

1. maven プロジェクト作成

eclipse の File > New > Project... から Maven > Maven Project を選び、simple project を作成します。groupId と artifactId は適当に入力して下さい。

2. pom.xml を編集

dependencies に AWS SDK for Java を追加するだけです。

しばらく待てば AWS SDK for Java がインストールされます。これで環境構築は完了です。

では実際に AWS SDK for Java 経由でアイテムを保存してみよう

主に com.amazonaws.services.dynamodbv2 以下のパッケージを利用します。古いバージョンの SDK では com.amazonaws.services.dynamodb 系のパッケージも存在するので間違えないよう注意して下さい。

1. 準備

まずは AmazonDynamoDBClient オブジェクトの生成から。

DynamoDB Local を使う上でのポイントは AmazonDynamoDBClient 上でエンドポイントを変えることと、リージョンIDをセットする事です。setEndpoint() の二つ目の引数である「サービス名」は無視されます。

AmazonDynamoDBClient#setEndpoint()

endpoint - The endpoint (ex: "dynamodb.us-east-1.amazonaws.com/") or a full URL, including the protocol (ex: "http://dynamodb.us-east-1.amazonaws.com/") of the region specific AWS endpoint this client will communicate with.
serviceName - This parameter is ignored.
regionId - The ID of the region in which this service resides AND the overriding region for signing purposes.

BasicAWSCredentials のコンストラクタには、AWS アカウント認証情報として eclipse 上で設定したアクセスキーIDとシークレットアクセスキーを引数として渡します。今回は AWSCredentials の生成をサンプルとしてわかりやすい BasicAWSCredentialsjavadoc)で行いましたが、実際のアプリケーションでは次のように ClasspathPropertiesFileCredentialsProviderjavadoc)を使うことになるでしょう。

こうすることで、クラスパス上の AwsCredentials.properties ファイルを参照してくれるようになります。

2. テーブルの作成

AWS Explorer を使ってテーブルを作成します。

AWS Explorer の Amazon DynamoDB アイコン上で右クリックし、Create Table を選んで下さい。Create New DynamoDB Table という画面が開くので、下記を参考にテーブル作成を行って下さい。サンプルではチャットアプリのチャンネルを表すテーブルを想定しています。

dynamodb_channels-table

Table Name と Hash Key Name、Hash Key Type に必要な情報を入力しています。

サンプルではレンジキーを使用しないので、Enable Range Key はオフにします。

Table Throughput という項目は、DynamoDB Local では無視されるので今回は適当な値を設定しておいて下さい。

Differences Between DynamoDB Local and DynamoDB

DynamoDB Local ignores provisioned throughput settings, even though the API requires them. For CreateTable, you can specify any numbers you want for provisioned read and write throughput, even though these numbers will not be used. You can call UpdateTable as many times as you like per day; however, any changes to provisioned throughput values are ignored.

3. アイテムの保存

次に実際のコードです。

ここでは PutItemRequest を使って Channels テーブルにアイテムを保存しています。

テーブル名の指定を withTableName() メソッドで、属性値のセットを addItemEntry() で行っています。withXxx()addXxx() 系のメソッドは戻り値に PutItemRequest オブジェクト自身を返してくれるので、属性値の設定等をメソッドチェーンでつなぐことができ、コードの可読性を上げることができます。

AttributeValue は属性値を表すクラスで、データ型が Number なら withN()setN()、文字列型なら withS()setS() というように、データ型に応じたメソッドで値の格納(や取得)を行います。

全ソースコードを掲載します。

com/techscore/dynamodb_local_sample/ChannelCreationLowLevelAPI.java

このコードを実行することで Channels テーブルに "techscore" という channelName 属性値を持つアイテムが新規作成されます。結果は AWS Explorer 上で Channels テーブルの Query Editor を開くことで確認できます。

dynamodb_query-editor

次回は

「前編」と題した今回は主に Amazon DynamoDB Local の利用方法について紹介しました。もう少し書きたいこともありましたが、長くなってきたので今回はここでいったん終了します。

次回「後編」では AWS SDK for Java による低レベル API および高レベル API に触れつつ、DynamoDB の Atomic Counters と Conditional Writes を試す予定です。

Comments are closed, but you can leave a trackback: Trackback URL.