为什么我在使用 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 用于修改项目:

  1. PutItem
  2. UpdateItem

简而言之,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",