Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AWS IoT-调用lambda函数失败_Amazon Web Services_Aws Lambda_Aws Iot - Fatal编程技术网

Amazon web services AWS IoT-调用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; }; 我已经设置了我的物联网规则,

我正试图让我的物联网设备启动Lambda功能。我试了几个小时都没用

我的lambda函数很简单:

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的字符串。