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

标签 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"
    }
  ]
}

数组中可以有数百个对象。我们想使用 Map 步骤将这些数据展平,并将顶级属性与数组中的每个元素相关联,并将该元素插入到 DynamoDB 中。我们的表格设置和 IoT 主题运行良好。

我们遇到的问题是 DynamoDB 在插入数字时需要字符串。但是,由于我们从 IoT 接收此数据作为 JSON 对象,并且数字位于对象数组内,因此我们很难将数字转换为字符串。所以,我们希望 Step Function 以某种方式将数字转换为字符串,但我不知道该怎么做。这里的目标是构建一个简单的管道,用于将 IoT 数据存储到 DynamoDB 中。

我们也没有完全控制可以发送的所有属性,因此我们还在 S3 中存储了 IoT 有效负载的副本(它已经连接到 IoT 规则引擎并且工作得很好),但是这更像是一个备份和包罗万象。我们主要对进入 DynamoDB 的数据感兴趣,以便我们可以实际查询它。我们如何说服 Step Function 将 JSON 有效负载中的数字插入 DynamoDB?

最佳答案

你真的在这里问了两个问题。

  1. Amazon States Language 可以将数字转换为字符串吗?

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

第一个问题的答案是肯定的,您可以像这样使用连接内在函数使用 ASL 将数字转换为字符串。给定单个数字的有效负载

{
  "key.$": "States.Format('{}',$.Payload)"
}

我们可以使用 States 内部函数 Format 为这一步的输出添加引号。

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

在您的情况下,解决方案是使用带有 Document Client 的 Lambda 函数将数据保存到 DynamoDB。 .

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

关于amazon-dynamodb - 有没有办法将数字转换为 DynamoDB 在 Step Functions 中期望的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63386292/

相关文章:

java - 这是检查 DynamoDB 表是否存在的最佳实践吗?

amazon-web-services - 如何将输入传递给多个 ARN(aws step 函数)?

amazon-web-services - Terraform (Yaml) 中的步骤函数定义

amazon-web-services - 如何使用 Http 请求调用 aws step 函数?

amazon-web-services - 无服务器:根配置错误:无法识别的属性 'stepFunctions'

amazon-dynamodb - dynamodb 对不在列表中的值进行过滤

amazon-dynamodb - Terraform + Dynamodb - 了解 aws_appautoscaling_target 和 aws_appautoscaling_policy

java - 在运行时更改 GSI 投影类型

amazon-web-services - MaxConcurrency 属性如何用于 AWS Step Functions 中的 Map 任务?

amazon-dynamodb - DynamoDB 映射器 "batchLoad()"输入