Amazon Web Services ブログ
DynamoDB Shell — Amazon DynamoDB のコマンドラインインターフェイスを使用してデータを取得する
(本記事は 2023/02/17に投稿された Query data with DynamoDB Shell – a command line interface for Amazon DynamoDB を翻訳した記事です。)
DynamoDB を初めて使用する人にとっては、習得に時間がかかる場合があるため、Amazon DynamoDB 用のオープンソースのコマンドラインインターフェイスである DynamoDB シェル (ddbsh) を開発しました。ddbsh の目的の 1 つは、DynamoDB を初めて使用するユーザーに、使い慣れた SQL のようなコマンドを実行することから始められる、シンプルで直感的な環境を提供することです。ddbsh のクエリ言語は SQL から派生したもので、DynamoDB 固有の拡張機能を備えています。
例えば、次のようなコマンドを実行して ddbsh を使用してテーブルを作成することができます
Hello DynamoDB shell から ddbsh の概要を簡単に説明し、Getting started with dynamodb-shell からグローバルセカンダリインデックスの作成とクエリについてもう少し詳しく説明しています。ddbsh README.md ファイルには、詳細なコマンドの使用法と例を記載しています。
この記事では2つのトピックを取り上げています。最初に DynamoDB に接続し、それから DynamoDB ローカルに接続する方法を学習します。次に、SQL WHERE
句を使用してデータをフィルタリングする方法を学習します。
始めるためには、Github 上の AWS Labs から ddbsh のソースコードをダウンロードし、手順に従ってビルドしてください。
AWSリージョンに接続する
ddbsh は AWS C++ SDK を使用しています。AWS コマンドラインインターフェイス (AWS CLI) のドキュメントに記載されているように、接続パラメータを設定することができます。詳しくは AWS CLI を設定する環境変数をご覧ください。
リージョンに接続するには
-
- AWS CLI 設定ファイル内に記載されるデフォルトのリージョン、 AWS アクセスキー、 AWS シークレットキーが適切であるかをまず確認します。設定ファイルの配置パスは、ご利用の OS によって異なる場合があります。確認方法については AWS CLI ドキュメンテーションを参照してください。また、リージョンの設定項目については、 DynamoDB ローカルと DynamoDB (ウェブサービス) のドキュメンテーションも合わせて確認してください。設定ファイルは、直接ファイルを編集するほか、
aws configure
コマンドを使用する、環境変数を設定して DynamoDB への接続するといった方法も利用できます。 - AWS CLI を使用して DynamoDB に接続できるかどうかを確認してください。例えば、次のように実行できます。
- エラーがあれば解決してください。上記のコマンドをエラーなく実行すると、次のインタラクティブセッションに示すように、デフォルトのリージョンに接続できます。
- プロンプトではコマンドを実行することができます。コマンドのリストを表示するには、 HELP コマンドを実行してください。コマンドはセミコロン(;)で終了します。
- AWS CLI 設定ファイル内に記載されるデフォルトのリージョン、 AWS アクセスキー、 AWS シークレットキーが適切であるかをまず確認します。設定ファイルの配置パスは、ご利用の OS によって異なる場合があります。確認方法については AWS CLI ドキュメンテーションを参照してください。また、リージョンの設定項目については、 DynamoDB ローカルと DynamoDB (ウェブサービス) のドキュメンテーションも合わせて確認してください。設定ファイルは、直接ファイルを編集するほか、
DynamoDB ローカルに接続する
このステップを開始する前に、ddbsh バージョン 0.2 以上、AWS SDK バージョン 1.11 以上であることを確認してください。
DynamoDB ローカルに接続するには
- コンピュータ上で DynamoDB をローカルでデプロイするに従ってインストールします。
- ターミナルセッションで、 DynamoDB ローカルインスタンスに接続する環境変数を設定します。
- 2番目のターミナルセッションを開き、 DynamoDB をローカルで起動します。
- 最初のターミナルセッションに戻ります。次のような AWS CLI コマンドを使用して、 DynamoDB ローカルに接続できます。
- これができれば、
ddbsh
でローカルインスタンスに接続できます。
リージョン名の後の括弧 (*) 内のアスタリスクは、非標準のエンドポイントが使用されていることを示します。これで DynamoDB ローカルに接続されていることが分かります。 DynamoDB ローカルは開発およびテストで利用できますが、一部AWS上のリソースとは挙動が異なる場合があり、テストに応じて使い分けをしてください。詳しくは DynamoDB Local の使用に関する注意事項をご確認ください。
WHERE 句によるデータのフィルタリング
WHERE 句は SELECT
、 UPDATE
、 DELETE
、 UPSERT
と共に使用できます。WHERE
句には、論理和 ( AND
) と論理論理和 ( OR
) で結合できる複数の論理式を含めることができます。また、NOT
演算子を使用して論理式を否定することもできます。
次の論理表現がサポートされています。
attribute op value
という形式で op 値の論理比較ができます。attribute はテーブルの attribute を表し、op は <、>、<=、>=、=、または != が使用できます。attribute_exists(attr)
は、 Item に attribute が存在する場合、true と評価されます。begins_with(attr, prefix)
は、 attribute が prefix で始まる場合、true と評価されます。attr between value and value
は、指定された 2 つの値の間に attribute がある場合に true と評価されます。attribute_type (attr, type)
は、 attribute が指定された type であれば true と評価されます。
次のサンプルデータを考えてみましょう。
クエリのサンプルは次のとおりです。
括弧を使用して項目をグループ化することで、より複雑なクエリを作成できます。
EXPLAIN
コマンドを使用すると、 ddbsh がクエリを実行する方法を確認できます。
WHERE
句は UPDATE
でも使用できます。
attribute は削除できます。次の例では、attribute c
を削除します。
クリーンナップ
検証が完了したら、コストが発生しないように、作成した可能性のあるテーブルをすべて削除することを忘れないでください。そのためには ddbsh
の DROP TABLE
を使うことができます。 DynamoDB ローカルを停止するには、起動したターミナル (2 番目のセッション) に移動し、 Ctrl-C でシャットダウンします。
まとめ
これで完了です。 ddbsh
では、標準 SQL と同じように、 WHERE
句を使用して処理の対象となる項目を絞り込み、テーブルのデータの読み込み、変更、削除することができます。
導入を検討されているお客様から、 DynamoDB API の学習に役立つリソースを求めていると聞いています。 ddbsh の EXPLAIN
コマンドなど、いくつかの解決策を試しています。このツールに関するフィードバックをいただければ幸いです。 DynamoDB を使いやすくするために、 ddbsh に追加できるものはあるでしょうか?
ddbsh に実装してほしい特定の機能や機能がある場合は、サポートチケットを入力するか、amrithie (at) amazon (dot) comに直接メールでお知らせください。具体的には、ユーザーが ddbsh をインストールして使用しやすくする機能など(パッケージングスクリプトの提供など)、プルリクエストしていただける方を歓迎します。既に Homebrew のプルリクエストを頂いています。その他のプルリクエストについても、お気軽に amrithie (at) amazon (dot) com まで直接お問い合わせください。
皆様へ最後のお願いです。 MacOS で ddbsh をインストールするための Homebrew ソリューションをご希望の場合は、 ddbsh の GitHub リポジトリを fork し、スターをつけてウォッチしていただくことで私たちをサポートしてください。 Homebrew リポジトリへのプルリクエストは頂いていますが、 ddbsh の GitHub リポジトリがまだ十分に知られていないため、リクエストは現在ブロックされています。このリクエストを前進させるお手伝いをしていただければと思います。
作者情報
Amrith Kumar はアマゾンウェブサービスのシニアプリンシパルエンジニアとして活動し、 Amazon DynamoDB に従事しています。