Amazon web services AWS IoT-调用lambda函数失败
我正试图让我的物联网设备启动Lambda功能。我试了几个小时都没用 我的lambda函数很简单:Amazon web services AWS IoT-调用lambda函数失败,amazon-web-services,aws-lambda,aws-iot,Amazon Web Services,Aws Lambda,Aws Iot,我正试图让我的物联网设备启动Lambda功能。我试了几个小时都没用 我的lambda函数很简单: exports.handler = async (event) => { // TODO implement const response = { statusCode: 200, body: JSON.stringify(event.message), }; return response; }; 我已经设置了我的物联网规则,
exports.handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(event.message),
};
return response;
};
我已经设置了我的物联网规则,通过从“物联网/触发lambda”中选择*来触发lambda函数。。当我从AWS iot的测试功能向iot/trigger lambda
主题发布消息时,lambda功能成功触发。但是,当我从我的设备发布消息时,出现以下错误:
{
"ruleName": "ruleTriggerLambda",
"topic": "iot/trigger-lambda",
"cloudwatchTraceId": "xxx-yyy-zzz",
"clientId": "ABC123",
"base64OriginalPayload": "eydvcGVyYGTpb24nOiAncHV0T2JqZWN0JywgJ2J1Y2tldCc6ICdyZWR3YXZlLWFwcC1kZXYnLCAna2V5JzogJ3JlYWNoYmFjay56aXAnLQWncmVwbHlUbyc6ICdpb3QvdGhyGHT0aWQtMDAwMS9wcmUtc2lnbmVkLBNzLXVybC1yBBNwb25zZXMnfSBbMV0=",
"failures": [
{
"failedAction": "LambdaAction",
"failedResource": "arn:aws:lambda:us-east-1:xxx:function:lambdaTriggerLambda",
"errorMessage": "Failed to invoke lambda function. Received Server error from Lambda. The error code is 400"
}
]
}
当我将lambda函数添加到规则中时,AWS表示它将创建更正权限。我还尝试更新lambda函数的权限
有没有关于如何解决这个问题的建议?非常感谢您提供的任何帮助/信息
编辑:4小时后或将我的头发剪掉 它原来是我从IoT设备作为有效载荷发送的数据格式。让我解释一下,如果有人能告诉我原因,我很想知道 我使用mac作为我的设备,并从AWS IoT Python SDK实现。我的信息如下:
message = {"message": "test message"}
mqtt_connection.publish(
topic=args.topic,
payload=args.message,
qos=mqtt.QoS.AT_LEAST_ONCE)
{'message': 'test message'} [1]
这看起来很直截了当
发布消息的代码如下所示:
message = {"message": "test message"}
mqtt_connection.publish(
topic=args.topic,
payload=args.message,
qos=mqtt.QoS.AT_LEAST_ONCE)
{'message': 'test message'} [1]
AWS物联网核心接收的有效载荷如下所示:
message = {"message": "test message"}
mqtt_connection.publish(
topic=args.topic,
payload=args.message,
qos=mqtt.QoS.AT_LEAST_ONCE)
{'message': 'test message'} [1]
并伴随着这样一条错误消息:我们不能将消息显示为JSON,而是将其显示为UTF-8字符串
我想我没有把这些点连在一起有点傻,但事实证明我必须对我的代码执行以下操作:
mqtt_connection.publish(
topic=args.topic,
payload=json.dumps(args.message).replace("\"", '').replace("[1]", '').replace("'", '"'),
qos=mqtt.QoS.AT_LEAST_ONCE)
希望这个解释能对将来的人有所帮助。看起来你可以使用
JSON.stringify({message:“testmessage”})
。它是一个内置的JS函数,接受JS对象并将其转换为字符串。物联网消息应为可转换为json的字符串。