web-dev-qa-db-ja.com

Amazon AWS Lambda関数のMQTTトピックにどのように公開できますか?

AWS Lambda関数内のMQTTのトピックに何かを公開するためにbashで使用するような簡単なコマンドが欲しいです。次の行に沿って:mosquitto_pub -h my.server.com -t "light/set" -m "on"

背景:Alexaでランプのオン/オフを切り替えたいのですが。 AlexaはLambda関数を開始できます。ランプはMQTTトピックをリッスンし、そこでメッセージに反応できるため、このLambda関数の内部でMQTTパブリッシュを開始したいと思います(より簡単な解決策があるかもしれませんが、他の多くのアプローチをより困難にする複雑な(大学)ネットワーク)

11
matt_55_55

Pythonを使用している場合、ハンドラー関数内で次のように使用して、AWS Lambda関数からAWS IoTにメッセージを発行することができました。

import boto3
import json

client = boto3.client('iot-data', region_name='us-east-1')

# Change topic, qos and payload
response = client.publish(
        topic='$aws/things/pi/shadow/update',
        qos=1,
        payload=json.dumps({"foo":"bar"})
    )

また、(Lambda関数構成内の)ロールにIoT公開関数へのアクセスを許可するためのポリシーがアタッチされていることを確認する必要もあります。 IAM-> Rolesの下で、次のようにインラインポリシーをLambda関数Roleに追加できます。

{
   "Version": "2016-6-25",
   "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "iot:Publish"
        ],
        "Resource": [
            "*"
        ]
    }
   ]
}
22
Roy

AWS SDKには、IoTで動作する2つのクラスがあります:Iot and IotData。 IotData.publish は、探しているメソッドです。Iotオブジェクトはモノを操作するためのもので、IotDataはMQTTとシャドウを操作するためのものです。これはMQTTとシャドウに関するドキュメントで直接参照する必要がありますが、そうではありません。

このサービス(IotData)も利用できます CLIで

4
dpurrington

Node.jsを使用している場合、これは機能します-

var AWS = require('aws-sdk');
var iotdata = new AWS.IotData({ endpoint: '*****************.iot.us-east-1.amazonaws.com' });

exports.handler = async(event) => {
    console.log("Event => " + JSON.stringify(event));
    var params = {
        topic: "MyTopic",
        payload: JSON.stringify(event),
        qos: 0
    };

    return iotdata.publish(params, function(err, data) {
        if (err) {
            console.log("ERROR => " + JSON.stringify(err));
        }
        else {
            console.log("Success");
        }
    }).promise();
};

このラムダ関数で使用されるロールにiot:publish権限を追加することを忘れないでください。

0
Chirag Mittal

Node.jsを使用する場合は、mqttライブラリをインストールする必要があります。次の手順は、mqttライブラリをAWS Lambdaにダウンロードしてインストールするのに役立ちます。

  1. Node.jsとnpmをダウンロードしてインストール PCにインストールします。

  2. node.js用のMQTTライブラリーをダウンロード

  3. Node.jsがインストールされているnodejsディレクトリで解凍します。 (Windows 10 x64では、nodejsディレクトリはC:\Program Files\nodejsです)

  4. インストールされたmqttファイルを格納するフォルダーを作成します。たとえば、D:\lambda_functionです。

  5. 管理者としてコマンドプロンプトを実行し、ディレクトリをnodejsディレクトリに変更します。

  6. MqttライブラリをD:\lambda_functionにインストールします。

    C:\Program Files\nodejs>npm install --prefix "D:\lambda_function” mqtt 
    

これは同様のプロジェクトです

0
Khanh Ho Sy