如何使用步进函数将数组放入 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 列表类型的转换:
我有一个 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 列表类型的转换: