如何使用步进功能将数组放入Dynamo Db中

时间:2020-08-14 20:56:52

标签: node.js amazon-web-services aws-lambda aws-step-functions

我有一个lambda函数,可将输入值传递给step函数。以下是Step功能正在接受的输入。我的步进功能是假设将这些字段写入Dynamo表。我在步骤功能中遇到有关ENTITIES的问题。我只是想从输入中获取实体数组,并将其放入发电机表中。我尝试使用项目路径和数组参数,但是失败了。任何帮助将不胜感激。 //输入到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"
    }
  }
}

我能够存储除实体之外保存的所有其他值。我希望Dynamo Table中的Entity列存储如下的值 [{“ S”:“ Test1”},{“ S”:“ Test8”},{“ S”:“ Test8”}]

1 个答案:

答案 0 :(得分:1)

对于第一个代码块,定义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"
}

对于帖子第二个代码块中的状态机定义,您将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列表类型的转换:

Successful result of DynamoDB PutItem with List of strings executed via Amazon States Language