Home > front end >  Why do I get 'Item is required' when updating an item in DynamoDB using AWS Step Functions
Why do I get 'Item is required' when updating an item in DynamoDB using AWS Step Functions

Time:05-27

I'm trying to push a DynamoDB record through Step Functions while setting up a conditional expression but for some reason, I'm getting the error:

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)

I don't want to push an Item. I want to use an update expression.

Here's my code:

{
  "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"
    }
  }
}

What's the issue?

CodePudding user response:

There are 2 main DynamoDB APIs for modifying items:

  1. PutItem
  2. UpdateItem

In a nutshell, PutItem 'updates' the item by replacing it & because of this, it requires the replacement item to be passed. This is the API call you're using and is why you're getting The field 'Item' is required but was missing. It's correct, Item is required when using PutItem.

Instead, you need to use UpdateItem which does not require the new item in full & will modify the attributes of an item based on an update expression (which is what you have).

In your step function definition, replace:

"Resource": "arn:aws:states:::dynamodb:putItem",

With:

"Resource": "arn:aws:states:::dynamodb:updateItem",
  • Related