DynamoDB Local とは
DynamoDB Local を使うと、Amazon DynamoDB サービスを模倣するローカルサーバーを立ち上げることができます。
DynamoDB Local サーバーは、デフォルトでは http://localhost:8000
で起動し、ここに対して AWS CLI や AWS SDK で接続して操作します。
DynamoDB ウェブサービスで複雑なデータ処理を行うときは、あらかじめ DynamoDB Local を使ってテストを行っておくと安心です。 DynamoDB の操作のために試行錯誤しても AWS の利用料金がかかることはありません。
DynamoDB Local のインストール
実行ファイルのダウンロード
DynamoDB Local には、Java の実行ファイル (JAR) や、それを含む Docker コンテナとして提供されています。 Java のインストールされた環境では、JAR ファイルをダウンロードして起動するのが手っ取り早いです。 下記から ZIP ファイルでダウンロードできます。
ダウンロードした ZIP ファイルを展開すると、次のような構成のディレクトリが展開されます。
起動に必要なのは、DynamoDBLocal_lib
ディレクトリと DynamoDBLocal.jar
だけなので、この 2 つを任意のディレクトリにコピーします。
ここでは、次のようなディレクトリにコピーすることにします(Windows であれば、$HOME
は %USERPROFILE%
に置き換えてください)。
起動用スクリプト(エイリアス)の作成
インストール自体はこれで終わりですが、DynamoDB Local サーバーを簡単に起動できるようにするために、dynamodb-local
というコマンドラインエイリアスを定義しておきます。
macOS / Linux の場合
Windows の場合
Windows の場合は、サーバー起動用のバッチファイルを作ってしまうのが楽かもしれません。
例えば、環境変数 PATH
に %USERPROFILE%\mybin
のパスを追加し、次のようなバッチファイルを作成します。
やっていることは、上記の macOS / Linux の場合と同様ですが、コマンドライン引数を受け取れるように末尾に %*
を追加してます。
これで、どのディレクトリからでも dynamodb-local
コマンドを実行するだけで、DyanmoDB Local サーバーを起動できるようになります。
上記の例では、DynamoDBLocal.jar
に次のようなオプションを渡しています。
-sharedDb
… 使用するアクセスキーとリージョンごとにデータベースファイル (.db
) を作らず、shared-local-instance.db
という単一のファイルを作成する。-dbPath $DYNAMODB
… 上記の.db
ファイルをカレントディレクトリに生成せず、実行ファイルと同じ場所に生成する。
DynamoDB Local を使用する
DynamoDB Local サーバーを起動する
ここまでの設定が完了していれば、任意のディレクトリから次のように DynamoDB Local サーバーを起動することができます(終了は Ctrl + C
です)。
サーバー起動時には、上記のようにコンフィグ値が表示され、ポート番号が 8000 番であることや、CORS アクセスが全て許可されている (*
)、といったことが分かります。
これらの設定は、-port
オプションや -cors
オプションで変更することができます。
コマンドラインオプションの詳細は、次のようにしてヘルプを表示するか、こちらのサイト で確認できます。
DynamoDB Local に接続する
DynamoDB Local サーバーを起動したら、AWS CLI(aws
コマンド)で接続してみます。
基本的には DynamoDB ウェブサービスを操作するときと同様ですが、--endpoint-url
オプションでサーバーのアドレスを指定する必要があります。
--endpoint-url http://localhost:8000
の代わりに、--region local
でも DynamoDB Local に接続できるみたいです。
ただし、ポート番号を 8000
以外に変えた場合は接続できないので、--endpoint-url
の方を使っておいた方が安心かもしれません。(おまけ)間違ってウェブサービス側の DynamoDB を操作しないようにする
AWS CLI(aws
コマンド)を使う時に、--endpoint-url
オプションを指定し忘れると、ウェブサービス側の DynamoDB を操作することになります。
このような誤操作でウェブサービス側のデータを更新してしまうのが心配なときは、次のようにアクセスキーに偽物の情報(ここでは fake
)をセットした状態で AWS CLI コマンドを実行するようにします。
このように設定すると、DynamoDB Local サーバーへのアクセスは可能なままで、ウェブサービス側の DynamoDB へのアクセスは認証エラーで弾かれるようになります。
ちなみに、aws dynamodb
コマンドの --endpoint-url
オプションに関しては、現状は環境変数などでデフォルト値を設定しておくことはできないようです。
下記は、DynamoDB ローカル使用に関する注意事項 - Amazon DynamoDB からの抜粋です。
注記:AWS CLI では、ダウンロード可能なバージョンの DynamoDB をデフォルトのエンドポイントとして使用することはできません。そのため、各 –endpoint-url コマンドで AWS CLI を指定する必要があります。
毎回 --endpoint-url
を指定するのも面倒なので、何らかの自動化を行いたい場合は、素直に AWS SDK を使って Node.js や Python のスクリプトを作った方がよさそうです。
SDK が生成するアクセス用インスタンスには、エンドポイント URL を指定できるようになっています。
(おまけ)プロキシ環境下で HTTP 301 エラーになる場合
社内のプロキシ環境内から AWS CLI で DynamoDB Local に接続するとき、次のようなエラーが発生することがあります。
これは、http_proxy
環境変数が設定されていることが直接の原因になっています。
この環境変数を外すか、次のように localhost
をプロキシ対象外に設定することで接続できるようになります。