如何使用IoT规则将数据从AWS IoT发送到AWS DynamoDB v2

时间:2017-10-11 10:30:24

标签: amazon-web-services amazon-dynamodb amazon-iam aws-iot

我想将个人数据值发送到从AWS IoT收到AWS DynamoDB的各个列。

我的设备发送此有效负载:

    {
    "state": {
    "desired": {
        "DeviceId" : "Device101",
        "DateTime" : now,
        "Room1 Temperature" : m_t,
        "Room2 Temperature": b_t
        },
    "reported": {
        "Item": {
            "DeviceId" : "Device101",
            "DateTime" : now,
            "Room1 Temperature" : m_t,
            "Room2 Temperature": b_t
            }
        }
    }
}

我在Shadow Link上收到此有效负载作为影子更新:

  

$ AWS /东西/阴影/更新

我创建了一个示例DynamoDB表,并将其与AWS IoT规则链接,以便每当数据传入上述主题时,它将由SQL查询触发:

  

SELECT * FROM'$ aws / things / shadow / update'

  • 此数据反映在我的影子更新
  • 此数据不会转发到DynamoDB表
  • 有什么问题?!

任何帮助将不胜感激。感谢。

2 个答案:

答案 0 :(得分:3)

首先,启用Cloudwatch日志应该可以帮助您调试此问题。

通常,这些类型的静默失败表示您没有正确格式化数据以便插入DynamoDB。

要检查的事项:

  • 您的SELECT语句无法正常工作,因为它需要提取您要插入的内容。在您的情况下,这将是SELECT desired。*或SELECT reported.Item。*
  • 主分区键必须是您引入的键之一,否则DynamoDB插入将失败。您的主分区键是什么?确保在SELECT语句的键列表中有这个。
  • 确保主分区键的数据类型与您传入的类型相匹配 - 例如,如果主分区键是DeviceId,则它应该是字符串类型(例如,不是整数)

CloudWatch日志将提供更详细的信息以帮助您。有关如何执行此操作的信息,请参阅http://docs.aws.amazon.com/iot/latest/developerguide/cloud-watch-logs.html

您也可以从IoT控制台启用它,方法是从左侧导航栏中选择设置(cog),然后更新Logging下的设置。

答案 1 :(得分:0)

对于我来说,经过许多小时的误导性信息后,这篇文章使我最终获得了成果:

https://forums.aws.amazon.com/thread.jspa?messageID=931485