Node.jsでAmazon DynamoDBを操作してやった!

node.jsを利用して、DynamoDBを操作する

皆さんどうも、Smartio開発部研究員のシバトウです。前回はAlexaスキルと外部のデータベースを連携することのメリットについて紹介していましたね。

外部のデータベースを利用することは、きっと内部でデータを取り扱うようなスキルに大きな革命をもたらすことだと私は信じています!

今回はAlexaスキルと連携させる外部データベースとして「Amazon DynamoDB」を選択し、実際にデータを操作してみたものをまとめてみました!

Amazon DynamoDBをスキル内で使ってみよう!

Amazon DyanamoDBはAWS(Amazon Web Services)で提供されているデータベースのサービス。AlexaスキルをAWS Lambdaで作成することを前提に、DynamoDBのテーブルやデータに対してどのような操作ができるか確認していきます!

一般のレンタルサーバーで触れる機会の多いSQLデータベースとはデータの条件指定等の記述が異なるので、少しクセがあるように感じましたね。

1.操作するための準備

まず、LambdaからDynamoDBの操作を行うためには、Lambdaで使用しているロール(IAM ロール)に対しDynamoDBへアクセスするための権限を与えなければなりません。

DynamoDBFullAccessの権限をIAMロールに与える

AWSコンソールからIAMのサービスに移動しLambdaで利用するロールを選択後、ポリシーのアタッチから「DynamoDBFullAccess」を追加してあげればOK。

2.テーブルを作成する(createTable)

Lambda側でDynamoDBを操作する準備ができたら、データを格納するためのテーブルを作成していきましょう。テーブルのキーに関しては、以下で簡単に説明しておきますね。

プライマリキーDynamoDBの要。データの追加・更新等の命令はプライマリーキーを条件として設定します。
Hash型属性を判断するデータに割り当てるのが吉。一致するものしか検索できない。
Range型日付やIDなどのデータに割り当てるのが吉。範囲を指定して検索することができる。

ただし検索条件としてRange型のみを指定できないので、Hash型項目の条件指定しないとデータを検索できないというオチが…。

今回はIDと名前を保存するテーブルを例に出しているのですが、プライマリキーの指定には少し工夫が必要でした!DynamoDBのプライマリーキーはHash型、あるいはHash型とRange型を2つ複合させたものしか指定できません。

createTableのパラムと実行文

上記の画像のようにHash型キーを”group”、Range型キーを”id”としてパラメーターを指定しています。パラメーターが決まったら「createTable」を実行してテーブル作成を完了させましょう。

createTable処理 function関数
[実行結果]:テーブル作成成功

3.テーブルを削除する(deleteTable)

deleteTableのパラムと実行文

必要のなくなったテーブルは、丸ごと削除することができます。この画像のようにテーブル名を指定して、「deleteTable」を実行するとテーブルがデータとともに跡形もなく削除されます。

deleteTable処理 function関数
[実行結果]:テーブル削除成功

4.データを追加する(put)

データを追加するには、追加したいデータをパラメーターとして指定します。そして、「put」命令を実行することで指定したテーブルへデータを追加することができます。

putのパラムと実行文

テーブル作成時に作成していなかったプライマリキー以外の項目(画像では”names”)を指定すると、勝手にテーブルの方に追加されるので覚えておきましょう。また、データの重複をプライマリーキーで判断するため、プライマリーキーが全く同一の値だと追加ではなく更新されてしまうので注意!

put処理 function関数
[実行結果]:追加に成功した

5.データを取得する(get, query)

データを取得するための方法は、プライマリーキーの値からデータを1件取得するための「get」。そして、プライマリーキーの値を指定し複数件のデータを取得可能な「query」の大きく2種類に分かれます。

getを使う場合

getのパラムと実行文

まず初めにプライマリーキーをパラメーターとして設定。このパラムに対して「get」命令を実行すれば、プライマリーキーの値に応じたデータが返ってきます!

プライマリーキーでHash型とRange型のキーを複合している場合は、パラメーターで両方を指定しないとデータが取得できないので注意してくださいね。

get処理 function関数
[実行結果]:ID2のシバタニさんですね。

queryを使う場合

query」命令は、プライマリーキーの値をもとにデータベース内を検索することができる「get」命令と変わりません。

queryのパラムと実行文

パラメーターとして設定したプライマリーキーのうち、Range型へ範囲条件を指定して複数件のデータを取得できるのが「query」の最大の特徴なのです。

ここでは”group”が1で、”id”が3以下のデータを取得するように条件を指定してみました。

query処理 function関数
[実行結果]:シバヤマさん。シバタニさん。シバウラさん。

6.データを更新する(update)

updateのパラムと実行文

データを更新したいときは、「update」命令を使います。更新するデータの指定には、プライマリーキーをKeyとして設定する必要がありました。

プライマリーキーを正しく設定さえすれば、後はupdateを実行するのみ!

update処理 function関数
[実行結果]:更新に成功した

7.データを削除する(delete)

最後はデータベースに存在するデータを1件削除してみましょうか。削除を行うには「delete」命令ですね。

deleteのパラムと実行文

こちらもupdate命令と同様、プライマリーキーをKeyに指定することで削除対象を決めることができます。delete命令を実行して消してしまいましょう!

delete処理 function関数
[実行結果]:削除に成功した

DynamoDBとの連携まとめ!

Amazon謹製のデータベースであるDynamoDBをLambdaから操作することができました!今回はテーブル作成やデータ操作など、データベースを活用する上で欠かせない部分が成功しています。

このようなデータベースとの連携を活かしたスキルを企画しつつ、通常のレンタルサーバーで欠かせないMySQLとの連携ができるか試していきたいところです。

注目今1番オススメする記事

ランキング一覧

スマートスピーカーを使った1番オススメしたい方法

スマートスピーカー比較

あなたにぴったりのスマートスピーカーが分かる!欲しくなる!

Smartio-store

Searchスマートスピーカーで出来ること・設定方法を検索




家電おすすめ記事