Ell*_*dil 5 amazon-dynamodb aws-step-functions
我有一个物联网主题从设备接收数据。每个 IoT 负载都包含一些属性和对象数组,如下所示。
{
"batchId": "someBatchId",
"prop1": "someProp1",
"objArray": [
{
"arrString1": "someArrString1",
"arrString2": "someArrString2",
"arrNum1": 1,
"arrNum2": 2,
"arrString3": "someArrString3"
},
{
"arrString1": "someArrString4",
"arrString2": "someArrString5",
"arrNum1": 3,
"arrNum2": 4,
"arrString3": "someArrString6"
}
]
}
Run Code Online (Sandbox Code Playgroud)
该数组中可以包含数百个对象。我们希望使用一个Map步骤来展平这些数据,并将顶级属性与数组中的每个元素相关联,并将该元素插入到 DynamoDB 中。我们的桌子设置和物联网主题运行得很好。
我们遇到的问题是 DynamoDB 在插入数字时需要字符串。但是,由于我们从 IoT 以 JSON 对象的形式接收这些数据,并且数字位于对象数组内部,因此我们很难将数字转换为字符串。因此,我们希望 Step Function 以某种方式将数字转换为字符串,但我不知道该怎么做。这里的目标是构建一个简单的管道,用于将 IoT 数据存储到 DynamoDB 中。
我们也不能完全控制可以发送的所有属性,因此我们还在 S3 中存储 IoT 有效负载的副本(它已经与 IoT 规则引擎连接并且工作得很好),但这更多的是备份和包罗万象。我们最感兴趣的是进入 DynamoDB 的数据,以便我们可以实际查询它。我们如何说服 Step Function 将 JSON 有效负载中的数字插入 DynamoDB 中?
你在这里确实问了两个问题。
亚马逊国家语言可以将数字转换为字符串吗?
如何让 Step Functions 在不指定数据类型的情况下将内容添加到 Dynamo DB。
第一个问题的答案是,是的,您可以使用 ASL 使用串联内部函数将数字转换为字符串,如下所示。给定单个数字的有效负载
{
"key.$": "States.Format('{}',$.Payload)"
}
Run Code Online (Sandbox Code Playgroud)
我们可以使用 States 内部函数Format在此步骤的输出周围添加引号。
然而,这对您的用例没有帮助,因为您可能有数百个数字,它们可能并不总是遵循设定的格式。
对于您的情况,解决方案是使用 Lambda 函数和Document Client将数据保存到 DynamoDB 。
如果他们可以选择直接在 Step Functions 中使用文档客户端,那就太好了,但截至撰写本文时,情况并非如此。您只需使用文档客户端在 Lambda 函数中手动执行操作即可。相同的结果。
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |