🗂
IoTCoreのテストクライアントを使用してトピックからLambdaを実行してみる
IoTCoreのルールを作成する
ルールアクションから実行されるLambdaを作成する
responseトピックにメッセージをPublishする関数を作成
import json
import boto3
iot = boto3.client('iot-data')
def lambda_handler(event, context):
try:
print(str(event))
print(event["testData"])
res_topic = event["topic"] + "/response"
payload = {
"message": "Publishテスト成功"
}
iot.publish(
topic=res_topic,
qos=0,
payload=json.dumps(payload, ensure_ascii=False)
)
return {
"code": 200,
"message": "OK"
}
except Exception as e:
print(e)
return {
"code": 500,
"message": "error"
}
Subscribeする
LambdaからPublishするレスポンストピックをSubscribeしておく。
テストクライアントから作成したトピックへメッセージをPublishする
レスポンストピックをSubscribeしてメッセージが受信できることを確認する
メモ:ルールアクションで起動されたLambdaのreturnについて
returnでコードとかを返す記載をしているが、ルールアクションから起動されたらそのまま投げっぱなしで結果を受け取る場所がないので意味がないらしい。
今回のように別トピックにPublishを行うか、キューとかを使うとかLambda処理中に行わないと処理結果が必要な場合は受け取れなくなってしまう。
Discussion