为什么我在使用 AWS Step Functions 更新 DynamoDB 中的项目时得到 'Item is required'?
Why do I get 'Item is required' when updating an item in DynamoDB using AWS Step Functions?
我试图在设置条件表达式时通过 Step Functions 推送 DynamoDB 记录,但出于某种原因,我收到了错误:
There are Amazon States Language errors in your state machine definition. Fix the errors to continue.
The field 'Item' is required but was missing (at /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"
}
}
}
有什么问题?
有 2 个主要的 DynamoDB APIs 用于修改项目:
简而言之,PutItem
'updates' 通过替换项目 & 因此,它需要传递替换项目。这是您正在使用的 API 调用,也是您获得 The field 'Item' is required but was missing
的原因。没错,Item
在使用PutItem
时是。
相反,您需要使用 UpdateItem
,它不需要完整的新项目,并且会根据更新表达式(这是您拥有的)修改项目的属性。
在您的步进函数定义中,替换:
"Resource": "arn:aws:states:::dynamodb:putItem",
有:
"Resource": "arn:aws:states:::dynamodb:updateItem",
我试图在设置条件表达式时通过 Step Functions 推送 DynamoDB 记录,但出于某种原因,我收到了错误:
There are Amazon States Language errors in your state machine definition. Fix the errors to continue. The field 'Item' is required but was missing (at /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"
}
}
}
有什么问题?
有 2 个主要的 DynamoDB APIs 用于修改项目:
简而言之,PutItem
'updates' 通过替换项目 & 因此,它需要传递替换项目。这是您正在使用的 API 调用,也是您获得 The field 'Item' is required but was missing
的原因。没错,Item
在使用PutItem
时是。
相反,您需要使用 UpdateItem
,它不需要完整的新项目,并且会根据更新表达式(这是您拥有的)修改项目的属性。
在您的步进函数定义中,替换:
"Resource": "arn:aws:states:::dynamodb:putItem",
有:
"Resource": "arn:aws:states:::dynamodb:updateItem",