DynamoDB Localの導入からGUIでのテーブル作成手順 (Windows10)


はじめに

2020年12月現在のDynamoDBLocalの導入・GUIでのテーブル作成手順を紹介します。
DynamoDBLocalはAWS上のリソースを使わず、ローカルでDynamoDBの検証ができるので非常に便利です。
LinuxやMacを使った導入手順は既に多くの記事があるので、この記事ではWindowsを使った導入手順~テーブル作成の手順をまとめます。
※Dockerではなく通常のパッケージを使ったやり方です。

環境

  • Windows10 Home
  • JRE 8.027
  • Node.js v14.15.0

DynamoDB Localの導入

1. ダウンロード

以下AWS公式リンクからzipファイルをダウンロードし、任意のプロジェクトフォルダに展開。
(アジアパシフィック (東京) リージョン)
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html

2. JREの導入

DyanamoDB LocalはJRE(Java Runtime Environmen)8.x以降で動作するため、
ローカル内にJREがない場合は以下リンクからダウンロードして実行する。
https://www.java.com/ja/download/

3. 実行

  1. PowrShellを開き、DynamoDB Localを展開したフォルダに移動。
  2. 以下のコマンドを実行
java -D"java.library.path=./DynamoDBLocal_lib" -jar DynamoDBLocal.jar -sharedDb

4. JavaScript consoleでの確認

DynamoDB Localには「JavaScript console」というJavaScriptでDBを操作する機能が備わっています。
上記コマンドでDynamoDBLocalを起動したら、ブラウザで「 http://localhost:8000/shell/ 」にアクセスするだけで確認できます。

後程、より簡単にテーブル作成ができるツールを紹介するので、ここではshellの説明は割愛します。
興味がある方は以下の記事等が参考になります。
https://dev.classmethod.jp/articles/dynamodb-local-shell-console/#toc-2
https://dev.classmethod.jp/articles/try_dynamodb_local/#toc-4

※ 右側のコンソールで「 tutorial.start() 」を実行するとDynamoDBのチュートリアルを始めることもできます(英語)

dynamodb-admin でのテーブル作成

先ほどのJavaScript consoleではjavaScriptを使ったDB操作が可能でしたが、検証で使うのに複雑なJavaScriptを書いてテーブル作成をしていては大変ですよね。
そこで、有志がOSSで開発してくれた「dynamodb-admin」の使い方を紹介します。
これはGUIでのテーブル作成を可能にしてくれるツールです。
https://github.com/aaronshaf/dynamodb-admin

1. Node.jsの構築

dynamodb-adminはNode.js上で動作します。
既にローカルマシンにNode.jsが存在すれば問題ありません。
もしまだNode.js環境が無い方は以下の記事などを参考に導入してみてください。
Windows 10へNode.jsをインストールする

2. 導入

PowrShellなどで以下のコマンドを実行し、dynamodb-adminを導入します。

npm install -g dynamodb-admin

3. 環境変数設定

以下のコマンドを実行し、環境変数をセットしてください。

set DYNAMO_ENDPOINT=http://localhost:8000

4. 実行

dynamodb-adminを実行するには、以下のコマンドを実行するだけです。
先ほどのDynamoDBLocalを実行したのと別のshellを立ち上げて実行してみてください。

dynamodb-admin

実行できたでしょうか?
私の環境では以下のエラーが出てしまい実行できませんでした。

このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\$user_name\AppData\Roaming\npm\dynamodb-admin.ps1 を読み込むことができません。
詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
発生場所 行:1 文字:1
+ dynamodb-admin
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : セキュリティ エラー: (: ) []、PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Windows の初期設定では PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因です。
詳細はこちらを参照してみてください。

これを解決するセキュアな実行コマンドはこちらです。

PowerShell -ExecutionPolicy RemoteSigned dynamodb-admin

これは一時的にdynamodb-adminスクリプトに権限を与えて実行するコマンドです。
私はこれをメモしてコピペで使っていますが、毎度これを打つのが面倒という方は
「PowerShell Set-ExecutionPolicy RemoteSigned」このコマンドで恒久的に実行ポリシーを変更できます。
※恒久的なポリシーの変更はあまりお勧めできません。

それでは、実行ログに表示されたアドレス(http://localhost:8001) にブラウザでアクセスしてみてください。
私の環境では既にいくつかのテーブルを作成しているため、このように起動後の画面ではテーブルの一覧が表示されています。

5. テーブル作成

それでは実際にテーブルを作っていきます。
dynamodb-admin起動後のブラウザ画面で「Create table」ボタンを押してください。

ここでいくつか名称に関する注意点があります。
参考に2020年12月時点のAWS DynamoDBのコンソール画面を載せます。

見ての通りdynamodb-adminではキーの名称が古いです。
簡単な対応表を記載します。

dynamodb-admin AWS dynamoDB(2020/12)
Hash Attribute パーティションキー
Range Attribute ソートキー

上記に注意して、キーの作成をしてみてください。
テーブル名、パーティションキー、必要であればソートキー・インデックスを追加し「submit」を押すだけでテーブルを作成できます。

6. 補足

  • ReadCapacityUnits: 一秒ごとに何回 strongly consistent reads 出来るか。(eventually consistent read はその二倍)
  • WriteCapacityUnits: 一秒ごと何回 書き込めるか。
  • LSI: 簡単に言うとソートキーをもう1つ増やすイメージ。
  • GSI: RDBでいう射影の概念で、簡単に言うと別の条件で検索するためキーを追加する。

※dynamodb-adminでは左下の「New Secondary Index」を押すことで、LSI,GSIを設定できます。

おわりに

以上でWindowsでのDynamoDBLocalの導入、dynamodb-adminでのテーブル作成の手順は終了です。
DynamoDBはNoSQLベースなのでRDBとは全く異なり、キー設計(データアクセス設計)が非常に重要になります。
また時間があればDynamoDBの設計に関する記事を書きたいと思います。