絖綛 N@i.jp  昨日:00094175
 今日:00003567
 総計:00128815
keywords
管理者専用
  Post   Add link   Control Panel 































新しいトピック
最新:04/16 19:55


新しいコメント
最新:07/28 16:47






管理人へMAIL

プライバシーポリシー

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地獄への入口になるわけですね。

[続く]


■ このトピックへのコメント投稿フォーム ■
キャンセル
※ HTMLタグは使えません
* 名前
* MAIL
* URL
本文
PASS ※ 半角英数8文字まで
認証 ※ 九四九伍七を半角数字で入力して下さい
  * 印の項目をcookieに保存する

2018 calendar
1月
123456
78910111213
14151617181920
21222324252627
28293031


掲示板
最新:08/15 17:19


GsBlog was developed by GUSTAV, Copyright(C) 2003, Web Application Factory All Rights Reserved.