我试图通过步骤函数推送DynamoDB记录,同时设置一个条件表达式,但由于某种原因,我得到错误:
状态机定义中存在Amazon状态语言错误。修复错误以继续。字段"Item"是必需的,但是缺少了(在/States/MyStep/Parameters)
我不想推一个Item
。我想使用一个更新表达式。
下面是我的代码:
{
"StartAt": "MyStep",
"States": {
"MyStep": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Parameters": {
"TableName.$": "$.table_name",
"Key": {
"test_id_path_method_executor_id": {"S.$": "$.update_key.test_id_path_method_executor_id"},
"result_timestamp": {"S.$": "$.update_key.result_timestamp"}
},
"ConditionExpression": "#max_db < :max_values",
"ExpressionAttributeValues": {
":max_values": {"N.$": "$.result_value"}
},
"ExpressionAttributeNames": {
"#max_db": "max"
},
"UpdateExpression": "SET #max_db = :max_values"
},
"Next": "EndSuccess"
},
"EndSuccess": {
"Type":"Succeed"
}
}
}
有什么问题吗?
有两个主要的DynamoDB api用于修改项:
PutItem
UpdateItem
简而言之,PutItem
通过替换它来"更新"项&因此,它需要通过替换项。这是您正在使用的API调用,也是您获得The field 'Item' is required but was missing
的原因。这是正确的,Item
是使用PutItem
时必需的。
相反,您需要使用UpdateItem
,它不需要完整的新项目&将基于更新表达式(这是您所拥有的)修改项的属性。
在您的阶跃函数定义中,替换为:
"Resource": "arn:aws:states:::dynamodb:putItem",
:
"Resource": "arn:aws:states:::dynamodb:updateItem",