AWS IoT DynamoDB 规则无法读取从 topic() 函数中 SELECT 的值。

0

【以下的问题经过翻译处理】 我正在尝试使用规则将数据从 AWS IoT MQTT 主题获取到 DynamoDB。示例主题是 cooler/cooler42/sensors 和示例消息

{
  “水温”:10,
  “时间戳”:1580370731383
}

我已经像这样定义了查询,以从主题中提取设备名称(例如 cooler42)并将其插入到 JSON 中:

SELECT *, topic(2) AS deviceName FROM 'cooler/+/sensors'

这似乎确实有效,就和我将消息重新发布到另一个主题一样,我现在看到添加了 deviceName 的相同 JSON:

{
  “水温”:10,
  “时间戳”:1580370731383,
  “设备名称”:“cooler42”
}

我的理解是所有 3 个字段现在都可以在我的 DynamoDB 规则中使用,如下所示:

https://i.stack.imgur.com/gO9SG.png

但是我在 CloudWatch 中看到规则失败并出现错误一个或多个参数值无效:AttributeValue 可能不包含空字符串(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException 和分区键(又名哈希key) 是空的:

{
   "ItemRangeKeyValue":"1580370731383",
   "IsPayloadJSON":"真",
   "ItemHashKeyField":"设备名称",
   "操作":"插入",
   "ItemRangeKeyField":"时间戳",
   “表”:“传感器数据测试2”,
   “ItemHashKeyValue”:“” <--- 空
}

我不能使用我刚刚从规则中的主题名称中选择的设备名称吗?如果不可以,还有另一种提取方法吗?

注意:如果我手动将消息发布到已经包含 deviceName 的主题上,那么它确实可以正常工作,但我在受限环境中工作并且不想要额外的有效负载大小。

注意我也将这个问题发布到 SO:https://stackoverflow.com/questions/59982125/aws-iot-dynamodb-rule-not-able-to-read-value-selected-from-topic-function

profile picture
专家
已提问 5 个月前55 查看次数
1 回答
0

【以下的回答经过翻译处理】 这个问题在https://stackoverflow.com/questions/59982125/aws-iot-dynamodb-rule-not-able-to-read-value-selected-from-topic-function上已经得到解答(感谢Ben T.)。

简单来说:

您不能在Action替换模板中引用使用AS子句创建的别名(即deviceName)。但是,您可以在Action替换模板中使用相同的操作 - 在这种情况下为DDB分区键值使用${topic(2)}。

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则