如何解决使用 AWS IoT Core 规则和 AWS Lambda 处理嵌套的 JSON 消息
我们正在使用 AWS IoT 规则将所有消息从事物转发到 Lambda 函数,并在途中使用此查询附加一些属性:
SELECT *,topic(2) AS deviceid,timestamp() AS RoutedAt FROM 'devices/+/message'
发送到主题的消息是嵌套的 JSON:
{
version: 1,type: "string",payload: {
property1: "foo",nestedPayload: {
nestedProperty: "bar"
}
}
}
当我们对另一个规则使用相同的查询并将消息路由到 S3 存储桶而不是 Lambda 时,存储桶中的结果 JSON 文件符合预期:
{
deviceid: "test",RoutedAt:1618311374770,version: 1,nestedPayload: {
nestedProperty: "bar"
}
}
}
但是当路由到一个 lambda 函数时,“nestedPayload”的属性被拉高了一层:
{
deviceid: "test",nestedProperty: "bar"
}
}
但是,在使用 VS Code 在本地调试 Lambda 时,提供 JSON 文件(换句话说:未连接到 AWS IoT Core),JSON 结构符合预期,这就是为什么我假设错误不是与JSON 序列化器/反序列化器,但有规则。
有人遇到过同样的问题吗?
解决方法
事实证明,问题出在规则的 SQL 版本上。
我们使用 CDK 创建了到 Lambda 的规则路由,默认情况下将版本设置为“2015-10-08”。路由到 S3 的规则没有显示错误,是手动创建并使用版本“2016-03-23”。将规则路由更新到 Lambda 以同时使用“2016-03-23”修复了该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。