AWS-CLIを使ってDynamoDBを操作してみる
LambdaからDynamoDBを操作する必要があったのだけれども、
DynamoDBにあまり触れる機会もなく今まで来ました。
コマンドラインからテーブルの作成やデータ投入を行ってみることにしました。
操作するためのツールとして AWS CLI を使ってみます。
ちなみに、DynamoDBの構成要素や概念を整理した内容は以下のエントリにまとめました。
検証環境
$ uname -moi
x86_64 MacBookPro10,1 Darwin
$ aws --version
aws-cli/1.16.140 Python/3.7.3 Darwin/18.5.0 botocore/1.12.130
DynamoDBの概念・コンセプトを整理してみる
Amazon DynamoDBの構成要素・コンセプト
「Amazon DynamoDB」を構成する要素については、別のエントリで整理しておきました。
上記エントリでまとめましたが、抑えておく用語は以下の4つです。
- テーブル
- 項目
- 属性
- プライマリーキー
コンセプト
DynamoDBではデータを抽出する方法は大きく2つとなります。
- プライマリーキー で検索し項目を受け取る
- 全項目を受け取りプログラムで絞り込む
データ量が増えた場合は (2) の方法は現実的ではなくなるため、 (1) でデータを取得できるように設計する必要があります。
検証用のテーブル定義
上記の概念やコンセプトを理解した上で、今回検証用に作成したいテーブルの定義を整理しておきます。
検証用のtable名
ユーザ情報を管理する users
というtableを作成します。
検証用の属性名
users
テーブルは以下のような属性(RDSでいうところの列情報)を保持します。
Name | Type | プライマリーキー? |
---|---|---|
String | Y | |
first_name | String | |
last_name | String | |
age | Number |
「属性」には型を設定する必要があります。
連想配列や配列などを指定できますが、最もよく利用するのは「文字列」と「数値」となるでしょう。
また、属性からプライマリーキーとなるものも決めておきましょう。
※ちなみにプライマリーキーとしない属性については、項目ごとにあったりなかったりしても問題がありません。このあたりはRDBとの大きな違いです。
AWS-CLIを使ったDynamoDBの操作
いよいよDynamoDBを操作してみます。
aws-cli
(AWSコマンドの利用可能な環境づくり)のインストール
AWSコマンドを使うための環境をDockerを使って構築(Mac/Linux/WindowsでもPythonなしで動くよ) | ゲンゾウ用ポストイット を参照。
上記記事では Mac、Linux、Windowsの環境の差異を無視できるよう、またPythonなしでも動作するように Docker を利用しました。
もちろん yum
や brew
で AWS CLI をインストールしても問題ありません。
テーブルの作成
まずはテーブルを作成します。
テーブルを作成するには aws dynamodb create-table
コマンドを利用します。
--key-schema
オプションに対して、プライマリーキーとなる属性
として「email」を指定しています。KeyType
としてHASH
というものを指定していますが今回は説明を飛ばします。(一意キーでスバリ検索、という利用用途しか考えない場合はHASH
で十分です。)
テーブル作成時にはプライマリーキーに関する属性の情報のみを指定します。
プライマリーキー以外の属性の型は指定する必要がありません。(先も述べたとおり、プライマリーキーさえあれば項目ごとに属性が異なっていても構わない、という点がRDBと大きな違いとなっています。)
AttributeType
には 文字列の場合には S
を、 数値の場合には N
を指定します。
$ aws dynamodb create-table \
--table-name 'users' \
--key-schema '
[
{
"AttributeName": "email",
"KeyType": "HASH"
}
]
' \
--attribute-definitions '
[
{
"AttributeName": "email",
"AttributeType": "S"
}
]
' \
--provisioned-throughput '
{
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
}
'
データの挿入
aws dynamodb put-item
コマンドを利用します。--item
オプションに対して以下のようにJSONフォーマットを渡します。
JSONフォーマットには各属性の値を型付きで指定します( 文字列の場合には S
を、 数値の場合には N
)。
$ aws dynamodb put-item \
--table-name users \
--item '
{
"email": {
"S": "yamada@gmail.com"
},
"first_name": {
"S": "太郎"
},
"last_name": {
"S": "山田"
},
"age": {
"N": "20"
}
}
'
データのスキャン
aws dynamodb scan
コマンドを実行すると登録済みデータをすべて取得できます。
$ aws dynamodb scan \
--table-name users
{
"Items": [
{
"last_name": {
"S": "山田"
},
"email": {
"S": "yamada@gmail.com"
},
"first_name": {
"S": "太郎"
},
"age": {
"N": "20"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
データの取得(プライマリーキー指定)
aws dynamodb get-item
コマンドでデータを1件取得できます。--key
オプションにプライマリーキー値を指定します。
$ aws dynamodb get-item \
--table-name users \
--key '
{
"email": {
"S": "yamada@gmail.com"
}
}
'
{
"Item": {
"last_name": {
"S": "山田"
},
"email": {
"S": "yamada@gmail.com"
},
"first_name": {
"S": "太郎"
},
"age": {
"N": "20"
}
}
}
データの削除
データの削除を行うためにはプライマリーキーを指定する必要があります。
(すべて削除したい場合はscan
してすべてのプライマリーキーを取得してから1件1件削除する必要があります。)
aws dynamodb delete-item
コマンドを実行しましょう。
$ aws dynamodb delete-item \
--table-name users \
--key '
{
"email": {
"S": "yamada@gmail.com"
}
}
'
テーブルの削除
不要になったテーブルを削除するには aws dynamodb delete-table
コマンドを実行します。
$ aws dynamodb delete-table \
--table-name users
レコード数のカウント
aws dynamodb scan \
--table-name users \
--select "COUNT"
{
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
ひとこと
今回は AWS-CLI
を使った操作にとどまりました。
DynamoDBの構成要素や概念を整理した内容は以下のエントリにまとめました。
ディスカッション
コメント一覧
まだ、コメントがありません