皆さんどうも、Smartio開発部研究員のシバトウです。前回はAlexaスキルと外部のデータベースを連携することのメリットについて紹介していましたね。
外部のデータベースを利用することは、きっと内部でデータを取り扱うようなスキルに大きな革命をもたらすことだと私は信じています!
今回はAlexaスキルと連携させる外部データベースとして「Amazon DynamoDB」を選択し、実際にデータを操作してみたものをまとめてみました!
この記事の目次クリックすると該当箇所へ飛べます。
Amazon DynamoDBをスキル内で使ってみよう!
Amazon DyanamoDBはAWS(Amazon Web Services)で提供されているデータベースのサービス。AlexaスキルをAWS Lambdaで作成することを前提に、DynamoDBのテーブルやデータに対してどのような操作ができるか確認していきます!
一般のレンタルサーバーで触れる機会の多いSQLデータベースとはデータの条件指定等の記述が異なるので、少しクセがあるように感じましたね。
1.操作するための準備
まず、LambdaからDynamoDBの操作を行うためには、Lambdaで使用しているロール(IAM ロール)に対しDynamoDBへアクセスするための権限を与えなければなりません。
AWSコンソールからIAMのサービスに移動しLambdaで利用するロールを選択後、ポリシーのアタッチから「DynamoDBFullAccess」を追加してあげればOK。
2.テーブルを作成する(createTable)
Lambda側でDynamoDBを操作する準備ができたら、データを格納するためのテーブルを作成していきましょう。テーブルのキーに関しては、以下で簡単に説明しておきますね。
プライマリキー | DynamoDBの要。データの追加・更新等の命令はプライマリーキーを条件として設定します。 |
---|---|
Hash型 | 属性を判断するデータに割り当てるのが吉。一致するものしか検索できない。 |
Range型 | 日付やIDなどのデータに割り当てるのが吉。範囲を指定して検索することができる。 |
ただし検索条件としてRange型のみを指定できないので、Hash型項目の条件指定しないとデータを検索できないというオチが…。
今回はIDと名前を保存するテーブルを例に出しているのですが、プライマリキーの指定には少し工夫が必要でした!DynamoDBのプライマリーキーはHash型、あるいはHash型とRange型を2つ複合させたものしか指定できません。
上記の画像のようにHash型キーを”group”、Range型キーを”id”としてパラメーターを指定しています。パラメーターが決まったら「createTable」を実行してテーブル作成を完了させましょう。
[実行結果]:テーブル作成成功
3.テーブルを削除する(deleteTable)
必要のなくなったテーブルは、丸ごと削除することができます。この画像のようにテーブル名を指定して、「deleteTable」を実行するとテーブルがデータとともに跡形もなく削除されます。
[実行結果]:テーブル削除成功
4.データを追加する(put)
データを追加するには、追加したいデータをパラメーターとして指定します。そして、「put」命令を実行することで指定したテーブルへデータを追加することができます。
テーブル作成時に作成していなかったプライマリキー以外の項目(画像では”names”)を指定すると、勝手にテーブルの方に追加されるので覚えておきましょう。また、データの重複をプライマリーキーで判断するため、プライマリーキーが全く同一の値だと追加ではなく更新されてしまうので注意!
[実行結果]:追加に成功した
5.データを取得する(get, query)
データを取得するための方法は、プライマリーキーの値からデータを1件取得するための「get」。そして、プライマリーキーの値を指定し複数件のデータを取得可能な「query」の大きく2種類に分かれます。
getを使う場合
まず初めにプライマリーキーをパラメーターとして設定。このパラムに対して「get」命令を実行すれば、プライマリーキーの値に応じたデータが返ってきます!
プライマリーキーでHash型とRange型のキーを複合している場合は、パラメーターで両方を指定しないとデータが取得できないので注意してくださいね。
[実行結果]:ID2のシバタニさんですね。
queryを使う場合
「query」命令は、プライマリーキーの値をもとにデータベース内を検索することができる「get」命令と変わりません。
パラメーターとして設定したプライマリーキーのうち、Range型へ範囲条件を指定して複数件のデータを取得できるのが「query」の最大の特徴なのです。
ここでは”group”が1で、”id”が3以下のデータを取得するように条件を指定してみました。
[実行結果]:シバヤマさん。シバタニさん。シバウラさん。
6.データを更新する(update)
データを更新したいときは、「update」命令を使います。更新するデータの指定には、プライマリーキーをKeyとして設定する必要がありました。
プライマリーキーを正しく設定さえすれば、後はupdateを実行するのみ!
[実行結果]:更新に成功した
7.データを削除する(delete)
最後はデータベースに存在するデータを1件削除してみましょうか。削除を行うには「delete」命令ですね。
こちらもupdate命令と同様、プライマリーキーをKeyに指定することで削除対象を決めることができます。delete命令を実行して消してしまいましょう!
[実行結果]:削除に成功した
DynamoDBとの連携まとめ!
Amazon謹製のデータベースであるDynamoDBをLambdaから操作することができました!今回はテーブル作成やデータ操作など、データベースを活用する上で欠かせない部分が成功しています。
このようなデータベースとの連携を活かしたスキルを企画しつつ、通常のレンタルサーバーで欠かせないMySQLとの連携ができるか試していきたいところです。