検索
連載

「Amazon DynamoDB」開発初心者に最適、無料のJava版「DynamoDB Local」とはAWSチートシート

AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はJava版「DynamoDB Local」の概要とメリット/デメリット、セットアップ手順、注意点などを紹介する。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は無料で利用できる「Amazon DynamoDB」のJava版ローカル環境を構築する方法と「AWS Command Line Interface」(以下、AWS CLI)で接続する方法を紹介します。

Java版「DynamoDB Local」とは

 Amazon DynamoDB(以下、DynamoDB)とは、フルマネージドのKey-Value型NoSQLデータベースサービスです。小〜大規模なデータの取り扱いや1秒当たり数千万のI/Oリクエストをサポートするので、IoTデータの取り扱いやセッション管理など幅広い用途で利用できます。

 今回紹介するJava版「DynamoDB Local」とは、上記のDynamoDBをローカル環境のJavaで、無料で動かせるサービスです。実行ファイルをダウンロードするだけで構築でき、実装やテストをローカル環境だけで完結できます。DynamoDBはI/Oベースの課金なのでテスト実施による課金を防げます。

ローカル環境DynamoDBのメリットとデメリット

 ローカル環境のDynamoDBはチーム開発など複数人で開発する際に便利な半面、AWS環境上のDynamoDBとは動きが違うなどのデメリットがあります。

  • メリット
    • 無料なので実装やテストのI/Oによる課金が発生しない
    • テスト時に接続エラーなどの異常系テストが簡単にできる
    • ローカルだけで完結するので、チーム開発において他者のデータを汚さない
  • デメリット
    • ローカル環境のスペックに依存するので動作が遅い
    • AWS環境上のDynamoDBはデフォルトで1秒以内に書き込みが完了する結果整合性なのに対し、ローカル環境では読み取り整合性になるので、結果整合性を期待した確認はしにくい

ローカル環境DynamoDBの構築

 今回は以下の手順でローカル環境のJava版DynamoDBの構築、AWS CLIによるテーブル作成、データの登録と表示を行います。

  1. zip形式のDynamoDBをダウンロードする
  2. 任意のディレクトリで解凍する
  3. ローカル環境DynamoDBを起動する
  4. ローカル環境DynamoDB用のAWS CLIを設定する
  5. AWS CLIでテーブルを作成する
  6. AWS CLIでデータ登録、表示する

【手順1】zip形式のDynamoDBをダウンロードする

 公式ページのダウンロードリンクからzip形式のファイルをダウンロードします。今回は「Asia Pacific(Tokyo)」リージョンを利用します。

【手順2】任意のディレクトリで解凍する

 手順1でダウンロードしたファイルを任意のディレクトリで解凍します。本手順ではディレクトリを「C:\work\DynamoDB」にします。

【手順3】ローカル環境DynamoDBを起動する

 コマンドプロンプトでzipファイルを、解凍したディレクトリまで移動します。

 次のコマンドを実行してDynamoDBを起動します。

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

 下記の状態になったらDynamoDBの起動は完了です。

【手順4】ローカル環境DynamoDB用のAWS CLIを設定する

 AWS CLIは公式のユーザーズガイドからダウンロードできます。

 AWS CLIをインストールできたらローカル環境DynamoDBに接続する認証情報を設定します。AWS CLIを利用してAWS環境を操作するにはAWS環境で払い出したアクセスキーとシークレットアクセスキーが必要ですが、ローカル環境のDynamoDBでは任意の値を設定して利用可能です。

 今回は以下の値で設定します。

AWS Access Key ID: "fakeMyKeyId"
AWS Secret Access Key: "fakeSecretAccessKey"
Default region name: "ap-northeast-1"
Default output format: "json"

 DynamoDBを起動したコマンドプロンプトとは別のウィンドウから操作します。「aws configure」コマンドを実行し、認証情報を設定します。

 これでローカル環境のDynamoDBを操作する準備は完了です。

【手順5】AWS CLIでテーブルを作成する

 AWS CLIを利用してローカル環境のDynamoDBにテーブルを作成します。

注意!

 ローカル環境を操作する際の注意点としては、AWS環境を操作するAWS CLIコマンドのオプション「--endpoint-url」に「http://localhost:8000」を指定することです。これによってローカル環境向きに動作させることができます。このように設定しないとAWS環境に接続しようとするので注意してください。

 今回はAWS CLI以外の方法は紹介しませんが、AWS SDKなどから接続する際も「endpoint-url」の設定を「http://localhost:8000」にすることでローカル環境のDynamoDBに接続できます。


 今回は下記表の「User」テーブルを作成します。DynamoDBでは登録したKeyにひも付くデータをValueとして登録するため、一意となるKey(Hash)の定義のみを設定してみます。

Key Hash 説明
Id Number データ登録の中で一意となる値

 テーブルを作成します。

aws dynamodb create-table --table-name User ^
    --attribute-definitions AttributeName=Id,AttributeType=N ^
    --key-schema AttributeName=Id,KeyType=HASH ^
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 ^
    --endpoint-url http://localhost:8000

 作成したテーブルを確認するためにテーブル一覧を表示する「aws dynamodb list-tables」を実行します。こちらもローカル環境向きで実行させるので、オプション「--endpoint-url」に「http://localhost:8000」を指定します。

aws dynamodb list-tables --endpoint-url http://localhost:8000

 テーブル「User」が登録できていることを確認できました。

【手順6】AWS CLIでデータ登録、表示する

 作成した「User」テーブルを操作します。下記2つのデータを登録します。

データ1
Key
Id 1 Number
Name Taro String


データ2
Key
Id 2 Number
Name Jiro String
Age 20 Number

 「Age」についてデータ1では未登録ですが、データ2では登録します。DynamoDBではHashを設定したKeyに対するValueが管理されるので、このようなデータも登録可能です。

 まずは、データ1を登録します。コマンドプロンプトで実行するためにJSON形式の「"(ダブルクォーテーション)」をエスケープしています。

aws dynamodb put-item ^
  --table-name User ^
  --item "{\"Id\":{\"N\":\"1\"},\"Name\":{\"S\":\"Taro\"}}" ^
  --endpoint-url http://localhost:8000

 次に、データ2を登録します。

aws dynamodb put-item ^
  --table-name User ^
  --item "{\"Id\":{\"N\":\"2\"},\"Name\":{\"S\":\"Jiro\"},\"Age\":{\"N\":\"20\"}}" ^
  --endpoint-url http://localhost:8000

 登録が完了したら、順番にデータを表示します。「get-item」コマンドにID「1」を指定してデータ1を取得します。

aws dynamodb get-item ^
  --table-name User ^
  --key "{\"Id\":{\"N\":\"1\"}}" ^
  --endpoint-url http://localhost:8000

 Hash値「ID」と、登録した「Name」の値を取得できました。次にデータ2を取得します。

aws dynamodb get-item ^
  --table-name User ^
  --key "{\"Id\":{\"N\":\"2\"}}" ^
  --endpoint-url http://localhost:8000

 「Id」「Name」に加えて、データ2のみで登録していた「Age」の値も取得できました。

まとめ

 今回は、テーブル作成、データ登録と表示の操作を紹介しましたが、その他のDynamoDBのAWS CLI操作については公式の「コマンドリファレンス」から確認できます。

 いずれもオプション「--endpoint-url」に「http://localhost:8000」を指定することでローカル環境のDynamoDBを操作できます。

 初めてのDynamoDB開発などの際にはいろいろ試したい。けど、課金されてしまうのはちょっと……という方向けに個人の環境で試行錯誤ができるので少しでもお役に立てば幸いです。

筆者紹介

金光 適(かなみつ かなう)

株式会社システムシェアード システム開発事業部所属

最高の貢献を最高の仲間と届けることをミッションに普段はWebアプリケーションの開発を実施。API基盤開発、「AWS IoT Core」を利用した基盤構築とIoT機器から収集したデータを利用した機械学習によるレコメンドシステム開発、VM環境からAWS環境へのリプレースやAWS環境上で実施する性能試験など先端技術を用いた開発に従事。


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る