有没有办法将数字转换为 DynamoDB 在 Step Functions 中期望的字符串?

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 中?

Nic*_*ckC 4

你在这里确实问了两个问题。

  1. 亚马逊国家语言可以将数字转换为字符串吗?

  2. 如何让 Step Functions 在不指定数据类型的情况下将内容添加到 Dynamo DB。

第一个问题的答案是,是的,您可以使用 ASL 使用串联内部函数将数字转换为字符串,如下所示。给定单个数字的有效负载

{
  "key.$": "States.Format('{}',$.Payload)"
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用 States 内部函数Format在此步骤的输出周围添加引号。

然而,这对您的用例没有帮助,因为您可能有数百个数字,它们可能并不总是遵循设定的格式。

对于您的情况,解决方案是使用 Lambda 函数和Document Client将数据保存到 DynamoDB 。

如果他们可以选择直接在 Step Functions 中使用文档客户端,那就太好了,但截至撰写本文时,情况并非如此。您只需使用文档客户端在 Lambda 函数中手动执行操作即可。相同的结果。