AWS活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回はJava版「DynamoDB Local」の概要とメリット/デメリット、セットアップ手順、注意点などを紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Amazon Web Services」(AWS)活用における便利な小技を簡潔に紹介する連載「AWSチートシート」。今回は無料で利用できる「Amazon DynamoDB」のJava版ローカル環境を構築する方法と「AWS Command Line Interface」(以下、AWS CLI)で接続する方法を紹介します。
Amazon DynamoDB(以下、DynamoDB)とは、フルマネージドのKey-Value型NoSQLデータベースサービスです。小〜大規模なデータの取り扱いや1秒当たり数千万のI/Oリクエストをサポートするので、IoTデータの取り扱いやセッション管理など幅広い用途で利用できます。
今回紹介するJava版「DynamoDB Local」とは、上記のDynamoDBをローカル環境のJavaで、無料で動かせるサービスです。実行ファイルをダウンロードするだけで構築でき、実装やテストをローカル環境だけで完結できます。DynamoDBはI/Oベースの課金なのでテスト実施による課金を防げます。
ローカル環境のDynamoDBはチーム開発など複数人で開発する際に便利な半面、AWS環境上のDynamoDBとは動きが違うなどのデメリットがあります。
今回は以下の手順でローカル環境のJava版DynamoDBの構築、AWS CLIによるテーブル作成、データの登録と表示を行います。
公式ページのダウンロードリンクからzip形式のファイルをダウンロードします。今回は「Asia Pacific(Tokyo)」リージョンを利用します。
手順1でダウンロードしたファイルを任意のディレクトリで解凍します。本手順ではディレクトリを「C:\work\DynamoDB」にします。
コマンドプロンプトでzipファイルを、解凍したディレクトリまで移動します。
次のコマンドを実行してDynamoDBを起動します。
java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb
下記の状態になったらDynamoDBの起動は完了です。
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を操作する準備は完了です。
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」が登録できていることを確認できました。
作成した「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.