「Amazon DynamoDB」開発初心者に最適、無料のJava版「DynamoDB Local」とは:AWSチートシート
AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はJava版「DynamoDB Local」の概要とメリット/デメリット、セットアップ手順、注意点などを紹介する。
「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によるテーブル作成、データの登録と表示を行います。
- zip形式のDynamoDBをダウンロードする
- 任意のディレクトリで解凍する
- ローカル環境DynamoDBを起動する
- ローカル環境DynamoDB用のAWS CLIを設定する
- AWS CLIでテーブルを作成する
- 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つのデータを登録します。
Key | 値 | 型 |
---|---|---|
Id | 1 | Number |
Name | Taro | String |
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.
関連記事
- 1000万ダウンロード規模の「ロマサガRS」が障害を回避できた理由
アカツキでエンジニアを務める駒井祐人氏が、スマートフォンゲームアプリ「ロマサガRS」でどのように障害を回避したのか紹介した。 - AWS、最大10倍高速なクエリ性能を実現する「Amazon DynamoDB Accelerator」をリリース
AWSは、NoSQLデータベースサービス「Amazon DynamoDB」を高速化するインメモリ型のキャッシュサービス「Amazon DynamoDB Accelerator(DAX)」の提供を開始する。DynamoDBの性能を最大10倍に高められる。 - 大量データ処理時に知っておきたいAmazon DynamoDB活用テクニック4選
大規模プッシュ通知基盤について、「Pusna-RS」の実装事例を基にアーキテクチャや運用を解説する連載。今回は、アプリ単位でテーブル分割を行い「スループットの奪い合い」を防ぐ方法、「全件走査用テーブル」を用意して処理を効率化する方法、Amazon SQSやAWS CloudWatchと連携して「スループット超過エラー」を防ぐ方法、「並列スキャン」で読み取り速度を向上させる方法などを紹介します。