如何使用步进函数将数组放入 Dynamodb

How to put array in Dynamo Db using step function

我有一个 lambda 函数,可将输入值传递给阶跃函数。下面是 Step 函数正在接收的输入,这是好的。我的步骤函数假设将这些字段写入 Dynamo table。我在 STEP 函数中遇到 ENTITIES 问题。我只是想从输入中获取实体数组并放入发电机 table。我尝试使用项目路径和数组参数但失败了。任何帮助将不胜感激。 // 输入到 Step 函数

{
  "CLIENT_ID": "fa1188",
  "CLIENT_NAME": "Country Village 1188",
  "SOURCE_IDENTIFIER": "abc-123-Country_Village 1188",
  "ENTITIES": {
    "L": [
      {
        "S": "Test1"
      },
      {
        "S": "Test8"
      },
      {
        "S": "Test8"
      }
    ]
  },
  "CREATED_TIMESTAMP": "1597436891604"
}

//步进函数

{
  "Comment": "PutItem into DynamoDB",
  "StartAt": "1st",
  "States": {
    "1st": {
  "Type": "Task",
  "Resource": "arn:aws:states:::dynamodb:putItem",
  "Parameters": {
    "TableName": "CLIENTS",
    "Item": {
      "CLIENT_ID": {
        "S.$": "$.CLIENT_ID"
      },
      "CLIENT_NAME": {
        "S.$": "$.CLIENT_NAME"
      },
      "SOURCE_IDENTIFIER": {
        "S.$": "$.SOURCE_IDENTIFIER"
      },
    "CREATED_TIMESTAMP": {
        "S.$": "$.CREATED_TIMESTAMP"
    },
     **"ENTITIES": {         
        "S.$":"$.ENTITIES.L"
     }**
    }
    },
    "End":true,
    "ResultPath":"$.DynamoDB"
    }
  }
}

我能够存储除 entity.I 以外的所有其他值,希望 Dynamo 中的实体列 Table 存储如下所示的值 [{“S”:“测试 1”},{“S”:“测试 8”},{“S”:“测试 8”}]

对于您的第一个代码块,在定义 ENTITIES 属性时不需要额外的语法,因为这只是对 Item 部分的常规 PutItem API 调用。一个普通的 JavaScript 数组就可以了。这是由 DynamoDB API PutItem Request Syntax

以及对您的第一个代码块的修改:

{
  "CLIENT_ID": "fa1188",
  "CLIENT_NAME": "Country Village 1188",
  "SOURCE_IDENTIFIER": "abc-123-Country_Village 1188",
  "ENTITIES": ["Test1", "Test8", "Test8"],
  "CREATED_TIMESTAMP": "1597436891604"
}

对于 post 的第二个代码块中的状态机定义,您将 ENTITIES 属性定义为具有 "S.$":"$.ENTITIES.L" 的字符串类型,并且 .L 最后是不必要的。只需将列表类型的类型定义从 S 更改为 L

这是修改原始第二个代码块后的样子:

{
  "Comment": "PutItem into DynamoDB",
  "StartAt": "1st",
  "States": {
    "1st": {
  "Type": "Task",
  "Resource": "arn:aws:states:::dynamodb:putItem",
  "Parameters": {
    "TableName": "CLIENTS",
    "Item": {
      "CLIENT_ID": {
        "S.$": "$.CLIENT_ID"
      },
      "CLIENT_NAME": {
        "S.$": "$.CLIENT_NAME"
      },
      "SOURCE_IDENTIFIER": {
        "S.$": "$.SOURCE_IDENTIFIER"
      },
    "CREATED_TIMESTAMP": {
        "S.$": "$.CREATED_TIMESTAMP"
    },
     "ENTITIES": {         
        "L.$":"$.ENTITIES"
     }
    }
    },
    "End":true,
    "ResultPath":"$.DynamoDB"
    }
  }
}

已测试并按预期工作。 PutItem API 处理从 JS 数组类型到 DynamoDB 列表类型的转换: