IRKitスマートホームスキルの改良(4)
LambdaにDynamoDBを読み書きする関数を追加します
3. LambdaにDynamoDBを読み書きする機能を追加する
AWS Lambda(Node.js)でDynamoDBを使用するには、AWS SDKを使用して行います。AWS SDKは最初から組み込まれているらしく、特に何もしなくてもLambda(Node.js)に以下のように記述すれば使用できます。
var AWS = require('aws-sdk'); // AWS SDKを使用
AWS.config.update({region: "us-west-2"});
|
重要なのは先頭の行で、2行目は念のため地域的リージョンを「米国西部(オレゴン)」に設定しているだけです。これだけで、AWS SDKが提供している様々な機能が利用できるようになるらしいです。このAWS SDKに含まれているDynamoDB機能を使用して、先に作成したテーブルの項目を読み書きする関数を作成します。
// DynamoDBのSmartIRKitテーブルの、id:'LivingLight'項目を読み出す
function readDynamoItem(callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
const params = {
TableName: 'SmartIRKit', // DynamoDBテーブル名
Key:{ 'id': 'LivingLight' } // Primary Key
};
docClient.get(params, function (err, data) {
if (err) {
callback(null);
}
else {
callback(data);
}
});
}
// DynamoDBのSmartIRKitテーブルに、id:'LivingLight'項目を書き込む
function writeDynamoItem(powerState, brightness, callback) {
var docClient = new AWS.DynamoDB.DocumentClient();
var writeData = {
TableName: 'SmartIRKit', // DynamoDBテーブル名
Item:{
'id': 'LivingLight',
'powerState': powerState,
'brightness': brightness
}
};
docClient.put(writeData, function (err) {
callback(err);
});
}
|
DynamoDBの"LivingLight"項目を読み書きする関数はこれだけです。共にAWS.DynamoDBオブジェクトのインスタンスを生成して読み書きを行っています。
読み出し関数"readDynamoItem()"の方は、項目を特定するキーに"LivingLight"を指定してgetし、読み出した結果をcallback関数で呼び出し元に返却します。書き込み関数"writeDynamoItem()"は、引数で電源、輝度の値を受け取って、項目を特定するキーの"LivingLight"と共にputして結果をcallback関数で返却します。
どちらも結果をcallback関数によって呼び出し元に返却するって所がポイントですね。そう、コイツらは非同期で動作するんです。関数を呼び出しても結果が返ってくるのを待ったりはしてくれないので、結果をその後の動作に反映したい場合はcallback関数内で行うよう関数の呼びだし元に書かなければならないのです。はい、これがcallback地獄への入口になるわけですね。
[続く]
|