【发布时间】:2020-05-15 20:07:25
【问题描述】:
我正在尝试使用规则将来自 AWS IoT MQTT 主题的数据导入 DynamoDB。
一个示例主题是cooler/cooler42/sensors 和示例消息
{
"waterTemp": 10,
"timestamp": 1580370731383
}
我已经这样定义查询,从主题中提取deviceName(例如cooler42)并将其插入JSON:
SELECT *, topic(2) AS deviceName FROM 'cooler/+/sensors'
这似乎确实有效,好像我将消息重新发布到另一个主题我现在看到添加了 deviceName 的相同 JSON:
{
"waterTemp": 10,
"timestamp": 1580370731383,
"deviceName": "cooler42"
}
我的理解是,所有 3 个字段现在都应该可以在我的 DynamoDB 规则中使用,如下所示:
但是,我可以从 CloudWatch 看到该规则因错误而失败
One or more parameter values were invalid: An AttributeValue may not contain an empty string (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException 和分区键(又名哈希键)是空的:
{
"ItemRangeKeyValue":"1580370731383",
"IsPayloadJSON":"true",
"ItemHashKeyField":"deviceName",
"Operation":"Insert",
"ItemRangeKeyField":"timestamp",
"Table":"SensorDataTest2",
"ItemHashKeyValue":"" <--- Empty
}
我不能使用我刚刚从规则中的主题名称中选择的deviceName 吗?如果没有,还有其他方法可以提取吗?
注意,如果我手动将消息发布到已经包含 deviceName 的主题上,那么它确实可以正常工作,但我在受限环境中工作并且不希望额外的有效负载大小。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb aws-iot