为什么在使用 AWS Step Functions 更新 DynamoDB 中的项目时出现"项目是必需的"?



我试图通过步骤函数推送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用于修改项:

  1. PutItem
  2. 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",

最新更新