我有一个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”}]
答案 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列表类型的转换: