DynamoDBにおけるCRUD操作の色々なやり方をまとめた
DynamoDBをよく触るようになったもののDynamoDBヘのCRUD操作は色々なやり方があって、
毎度ググっては実行してというのを繰り返してました。
そのやり方をまとめていちいちググらないようにしたいと思います。
この記事について
色々なやり方があるDynamoDBへのCRUD操作を紹介します。
また、それぞれのやり方のメリット・デメリットを自分なりに説明します。
目次
AWS CLI
CRUD
Create
put-item
でデータを1つ作成できます。
$ aws dynamodb put-item --table-name Sample --item '{"partitionKey": {"S": "posts"}, "sortKey": {"S": "post-1"}}'
Read(query)
query
でkeyを条件にしてデータを取得できます。
$ aws dynamodb query --table-name Sample --key-condition-expression "partitionKey = :value" --expression-attribute-values '{":value":{"S":"posts"}}'
Update
update-item
で既存のデータを更新できます。
$ aws dynamodb update-item --table-name Sample --key '{ "partitionKey": {"S": "posts"}, "sortKey": {"S": "post-1"}}' --update-expression "SET title = :newval" --expression-attribute-values '{":newval":{"S":"title-1"}}'
データに含まれる値を削除する場合など更新式の書き方のパターンがいくつかあります。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html
Delete
delete-item
で既存のデータを削除できます。
$ aws dynamodb delete-item --table-name Sample --key '{ "partitionKey": {"S": "posts"}, "sortKey": {"S": "post-1"}}'
メリット&デメリット
AWS CLIがインストールされていないのはあまりないかと思うので、すぐに利用できるのがメリットだと思います。
keyの指定にデータ型が必要だったり、expressionとvalueを分けて書かないといけなかったりと書き方が複雑です。
DQL
非公式ですが、DQLというSQLライクな構文でDynamoDBにアクセスできるツールがあります。
CRUD
事前に以下のコマンドでREPLを起動します。
$ dql
Create
> INSERT INTO Sample (partitionKey, sortKey) VALUES ('posts', 'post-1');
Read
> SELECT * FROM Sample WHERE partitionKey = 'posts';
Update
> UPDATE Sample SET title = 'title-1' WHERE partitionKey = 'posts' AND sortKey = 'post-1';
Delete
> DELETE FROM Sample WHERE partitionKey = 'posts' AND sortKey = 'post-1';
メリット&デメリット
SQLに慣れていると直感的にDynamoDBの操作ができます。
SELECTの出力形式が扱いづらいのでとりあえずデータの内容を確認したい用途向けだと思います。
AWS SDK
プログラミング言語から操作する方法です。ここではNode.jsを使う方法になります。
CRUD
Create
const AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", endpoint: "http://localhost:8000" }); const docClient = new AWS.DynamoDB.DocumentClient(); const params = { TableName: "Sample", Item: { partitionKey: "posts", sortKey: "post-1" } }; docClient.put(params).promise();
Read
const AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", endpoint: "http://localhost:8000" }); const docClient = new AWS.DynamoDB.DocumentClient(); const params = { TableName: "Sample", KeyConditionExpression: "partitionKey = :value", ExpressionAttributeValues: { ":value": "posts" } }; docClient .query(params) .promise() .then(d => { console.log(d); });
Update
const AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", endpoint: "http://localhost:8000" }); const docClient = new AWS.DynamoDB.DocumentClient(); const params = { TableName: "Sample", Key: { partitionKey: "posts", sortKey: "post-1" }, UpdateExpression: "set title = :newval", ExpressionAttributeValues: { ":newval": "title-1" } }; docClient.update(params).promise();
Delete
const AWS = require("aws-sdk"); AWS.config.update({ region: "ap-northeast-1", endpoint: "http://localhost:8000" }); const docClient = new AWS.DynamoDB.DocumentClient(); const params = { TableName: "Sample", Key: { partitionKey: "posts", sortKey: "post-1" } }; docClient.delete(params).promise();
メリット&デメリット
DynamoDBは1度に取得できるデータ量に制限があるために大量データを扱う場合には繰り返し実行する必要があります。
SDKを使うとこのような大量データを扱うのがやりやすいです。
ちょっとデータを確認したいというような用途には向かないと思います。
NoSQL Workbench
GUIでDynamoDBを操作するツールです。
インストールは以下からできます。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/workbench.settingup.html
CRUD
NoSQL Workbenchを起動します。
Create
[Operation builder] -> [Build operations] -> [Put Item] を選択します。
keyを指定して、Executeで実行します。
Read
[Operation builder] -> [Build operations] -> [Query] を選択します。
keyを指定して、Executeで実行します。
Update
[Operation builder] -> [Build operations] -> [Update Item] を選択します。
keyとUpdate expressionを指定して、Executeで実行します。
Delete
[Operation builder] -> [Build operations] -> [Delete Item] を選択します。
keyを指定して、Executeで実行します。
チェックボックスで選択して消す方法もあります。
メリット&デメリット
CRUD毎に何のパラメータを指定すればいいか指示されているので分かりやすいです。
複数のテーブルを包括したデータモデリングの機能もあります。
GUIに抵抗がなければこれを利用するのが良さそうです。
AWSマネジメントコンソール
ブラウザでAWSマネジメントコンソールから操作する方法です。
CRUD
[DynamoDB] -> [Tables] で特定のテーブルを選択し、[Items]タブを選択します。
Create
[Create Item] を選択します。
keyを指定して、Saveで実行します。
Read
[Query] を選択します。
keyを指定して、[Start search] を選択します。
Update
Itemを選択し、[Actions] -> [Edit] を選択します。
attributeを指定して、Saveで実行します。
Delete
Itemを選択し、[Actions] -> [Delete] を選択します。
メリット&デメリット
インストールが不要なのでとにかく簡単に使えます。
ちょっとデータの内容を確認したい場合に良く使います。
マネジメントコンソールの事情ですが、セッションタイムアウトが発生してその度に画面の内容がクリアされるのが欠点かなと思います。
まとめ
DynamoDBへCRUD操作をする場合の色々なやり方を紹介しました。
自分の場合、なんだかんだでAWSマネジメントコンソールを使ってしまいます。