はかせのラボ

私の頭の中を書いていく雑記ブログです

Alexa AlexaからDynamoDBにデータを追加する

あいさつ

どうも、はかせです。
今回は最近ご無沙汰だったAlexaです。
(UnityAWSが予想の右斜め上で難しかったのでしばらくこっちやります)

今回やるのはAlexaからDynamoDBへのデータのPutです。

DynamoDBでやること

DBを作るところからAlexaでやってもいいんですが、
初回ですしまずはあらかじめ用意しておきます。

やり方は簡単でまずDynamoDBのコンソールから「テーブルの作成」ボタンをクリックします。
するとこんな画面になるので
f:id:hakase0274:20190820232507p:plain
テーブル名とか必要なもの入れて下にある「作成」ボタンをクリックします
あとはちょっと待てばテーブルができます。

Lambdaでやること

Lambdaの設定は前回のハローワールドやった時のをそのまま使います。
hakase0274.hatenablog.com

この時に作ったコードに以下のコードを追加

import boto3
from boto3.dynamodb.conditions import Key, Attr

def db(name,age):
    dynamodb = boto3.resource("dynamodb")
    table    = dynamodb.Table('作ったテーブルの名前')

    table.put_item(
      Item = {
        "テーブルのプライマリキーの名前": 'プライマリキーの値として入れたいもの', 
        #以下はテーブル作成の際に用意した場合のみ記述
        "テーブルのソートキーの名前": 'ソートキーの値として入れたいもの', 
      }
    )
    
    return OneSpeech('データベースに追加したよ').build()

#ハンドラーに追加
elif intent_name == 'DataBaseIntent':
        name = request['intent']['slots']['name']
        age = request['intent']['slots']['age']
        return db(name,age)

とりあえずネット上に落ちてるコードを
ガチャガチャくっつけてみました。
作成したテーブルの参照的なものを取得し
そこにクエリを発行しています。

そして作った処理を呼ぶため
ハンドラーに追加しました。

Alexaでやること

インテントとスロットを追加するだけです。
インテントとかスロットとか何?って方はこの辺りを見てもらうと
それとなく雰囲気がつかめると思います。
hakase0274.hatenablog.com
hakase0274.hatenablog.com

今回私はDataBaseIntentというインテント
nameとageというスロットを作りました。
f:id:hakase0274:20190820234045p:plain

nameは適当にはかせとhakaseを入れただけです。
ageはAmazonの数値扱ってくれるビルトインのスロットを使いました。

実行

では実行です。
f:id:hakase0274:20190820234333p:plain
f:id:hakase0274:20190820234342p:plain
はい無事はかせ21歳が登録されました。

あとがき

今回はAlexaを使いDynamoDBにデータをPutしてみた話でした。

いやーUnityや.NETでAWSを使おうとするのに比べて圧倒的に楽ですね。
(Unityとかから使うときもこんだけ楽ならいんだけどなぁ)

最初はなぜかAlexaが吐くJSONが安定せず頭を悩ましてましたが、
再サインインしたら直りました。
(なんか変なキャッシュでも溜まってたんですかね?)

それでは今回はこの辺でノシ