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
EXPERTE
gefragt vor 5 Monaten60 Aufrufe
1 Antwort
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
EXPERTE
beantwortet vor 5 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen