DynamoDBを使ってみる
Amazon DynamoDB を使ってみました。
使ってみた一番最初の印象は、今までのDBとは次元が異なるものだなと。
DBのメンテナンスをユーザーがする必要はなくて、フルマネージドであると。
DBのRead および Write のスループットをManagement Consoleで自由に変更できて、そのスループットの設定が高いと、それだけコストが高くなる。
Youtubeにアップされている DynamoDB の動画を見ると、胸が躍らされるというか、ワクワクしますね!
今回は、DynamoDB 上に SampleTable という名前のテーブルを作成して、AWS SDK for Javaを使って参照Queryを投げてみました。
その手順が以下の通りです。
まずは、Management Console上でDynamoDB を選択して、以下のような画面に遷移します。既に以下の画面ではテーブルがいくつか作成されていますが、お気になさらずに。
Create Tableボタンをクリックします。
Table Nameに SampleTable と入力、以下のように Primary Key を設定します。
とりあえず Read Capacity Units を 10 に、Write Capacity Units を 5 にしました。
Send notification to のところには、自分のメールアドレスを入れます。
テーブルを作成すると、SampleTableがCreating状態であることが確認できます。
作成が完了後、SampleTalbeを選択して、Explore Table をクリックします。
テーブル作成当初は、当然データがないので、データを追加してみます。
New Itemをクリックします。
Primary Key で Id の Value に 1 を入れます。
あと、追加で Name という名前の Attribute を追加して、その Value を Test にします。
Put Itemをクリックします。
画面をリフレッシュすると、データが追加されたのがわかります。
以上で、テーブルの作成とデータの追加が完了です。
Managment Console 上で確認できましたが、これを今度は Java のプログラムを使って参照してみます。
まず事前に AWS API を利用するための Credential 用のアクセスキーを AwsCredentials.properties ファイルに以下のように入力して保存します。
secretKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXX accessKey=XXXXXXXXXXXXXXXXX
こちらは、AWS Managment Console 画面右上の自分のアカウント名をクリックすると出てくる「Security Credentials」リンクをクリックして、ページ遷移、AWS アカウントで再ログインすると、accessKey と secretAccessKey 情報を見ることができます。
これらをコピペして上記ファイルに保存してください。
そして、以下のJavaプログラムを実行します。上記propertiesファイルをプログラムから参照できるようにする必要があります。
import java.io.IOException; import java.util.Arrays; import java.util.Map; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.PropertiesCredentials; import com.amazonaws.services.dynamodb.AmazonDynamoDBClient; import com.amazonaws.services.dynamodb.model.AttributeValue; import com.amazonaws.services.dynamodb.model.GetItemRequest; import com.amazonaws.services.dynamodb.model.GetItemResult; import com.amazonaws.services.dynamodb.model.Key; public class DynamoDBSample { static AmazonDynamoDBClient dynamoDB; public static void main(String[] args) throws IOException { //Credentialsの設定 AWSCredentials credentials = new PropertiesCredentials( DynamoDBSample.class.getResourceAsStream( "AwsCredentials.properties")); //リクエストのパラメータの設定 dynamoDB = new AmazonDynamoDBClient(credentials); dynamoDB.setEndpoint("http://dynamodb.ap-northeast-1.amazonaws.com"); String tableName = "SampleTable"; String id = "1"; GetItemRequest getItemRequest = new GetItemRequest() .withTableName(tableName) .withKey(new Key() .withHashKeyElement(new AttributeValue().withN(id))) .withAttributesToGet(Arrays.asList("Id", "Name")); //リクエストを送信して、結果を取得 GetItemResult result = dynamoDB.getItem(getItemRequest); //結果の出力 Map<String, AttributeValue> attributeList = result.getItem(); for (Map.Entry<String, AttributeValue> item : attributeList.entrySet()) { String attributeName = item.getKey(); AttributeValue value = item.getValue(); System.out.println(attributeName + " " + (value.getS() == null ? "" : "S=[" + value.getS() + "]") + (value.getN() == null ? "" : "N=[" + value.getN() + "]\n")); } } }
上記を実行した結果が以下になります。
Name S=[Test] Id N=[1]
ちゃんと取得できました!
以上ですー。