Bird
Raised Fist0
DynamoDBquery~20 mins

Lambda trigger on stream events in DynamoDB - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stream Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ query_result
intermediate
2:00remaining
What is the output of this Lambda event record processing?

Given a DynamoDB stream event with the following record snippet, what will the Lambda function log for the NewImage attribute?

{
  "Records": [
    {
      "eventID": "1",
      "eventName": "INSERT",
      "dynamodb": {
        "NewImage": {
          "UserId": {"S": "123"},
          "Score": {"N": "42"}
        }
      }
    }
  ]
}

Assume the Lambda code logs event.Records[0].dynamodb.NewImage.UserId.S and event.Records[0].dynamodb.NewImage.Score.N.

A"UserId: 123, Score: 42"
B"UserId: S, Score: N"
C"UserId: UserId, Score: Score"
D"UserId: null, Score: null"
Attempts:
2 left
💡 Hint

Remember DynamoDB stream records store attribute values as objects with type keys like S for string and N for number.

🧠 Conceptual
intermediate
1:30remaining
Which event types trigger a Lambda from DynamoDB Streams?

Which of the following DynamoDB stream event types can trigger a Lambda function?

AINSERT, MODIFY, REMOVE
BCREATE, UPDATE, DELETE
CADD, REPLACE, DELETE
DPUT, PATCH, DELETE
Attempts:
2 left
💡 Hint

Think about the standard DynamoDB stream event names.

📝 Syntax
advanced
1:30remaining
Identify the syntax error in this Lambda handler for DynamoDB stream

Which option contains a syntax error in this Lambda function snippet that processes DynamoDB stream events?

exports.handler = async (event) => {
  for (const record of event.Records) {
    console.log('Event ID:', record.eventID);
    console.log('Event Name:', record.eventName);
    console.log('New Image:', record.dynamodb.NewImage);
  }
}
AMissing semicolon after console.log statements
BArrow function missing parentheses around event parameter
CIncorrect use of >= instead of => in arrow function
DNo syntax error; code is valid
Attempts:
2 left
💡 Hint

Check the arrow function syntax and console.log usage.

❓ optimization
advanced
2:00remaining
Best practice to handle batch size in Lambda triggered by DynamoDB Streams

You want to optimize your Lambda function triggered by DynamoDB Streams to process records efficiently without timing out. Which approach is best?

ASet batch size to 1 to process each record individually
BSet a moderate batch size (e.g., 100) and process records asynchronously with error handling
CSet batch size to 1000 and process all records synchronously in one invocation
DDisable batch processing and poll the stream manually
Attempts:
2 left
💡 Hint

Consider balancing throughput and Lambda execution time.

🔧 Debug
expert
2:30remaining
Why does this Lambda triggered by DynamoDB Streams fail to process some records?

Consider this Lambda function snippet triggered by DynamoDB Streams:

exports.handler = async (event) => {
  event.Records.forEach(async (record) => {
    await processRecord(record);
  });
};

Why might some records not be processed before the Lambda finishes?

AEvent object is missing Records array
BLambda times out before processing starts
CUsing forEach with async functions does not wait for promises to resolve
DprocessRecord function is not awaited properly inside forEach
Attempts:
2 left
💡 Hint

Think about how async functions behave inside forEach loops.

Practice

(1/5)
1. What is the main purpose of a Lambda trigger on DynamoDB stream events?
easy
A. To backup the DynamoDB table data to S3
B. To manually update the DynamoDB table from the Lambda console
C. To disable the DynamoDB stream temporarily
D. To automatically run code when data in the DynamoDB table changes

Solution

  1. Step 1: Understand DynamoDB streams

    DynamoDB streams capture data changes like inserts, updates, and deletes.
  2. Step 2: Role of Lambda triggers

    Lambda triggers run code automatically when these stream events occur.
  3. Final Answer:

    To automatically run code when data in the DynamoDB table changes -> Option D
  4. Quick Check:

    Lambda triggers = auto-run code on data change [OK]
Hint: Lambda triggers run code automatically on data changes [OK]
Common Mistakes:
  • Thinking Lambda triggers require manual execution
  • Confusing stream enabling with backup
  • Assuming Lambda disables streams
2. Which of the following is the correct way to specify a Lambda trigger for a DynamoDB stream in AWS Console?
easy
A. Enable stream on the table, then add Lambda as a trigger on the stream
B. Create Lambda function first, then enable stream on the table
C. Enable stream on the table and Lambda separately without linking
D. Add Lambda trigger before enabling the stream on the table

Solution

  1. Step 1: Enable stream on DynamoDB table

    Streams must be enabled first to capture data changes.
  2. Step 2: Add Lambda as a trigger on the enabled stream

    Lambda triggers are linked to the stream to react to events.
  3. Final Answer:

    Enable stream on the table, then add Lambda as a trigger on the stream -> Option A
  4. Quick Check:

    Enable stream first, then add Lambda trigger [OK]
Hint: Enable stream first, then attach Lambda trigger [OK]
Common Mistakes:
  • Trying to add Lambda trigger before enabling stream
  • Not linking Lambda to the stream
  • Enabling stream and Lambda separately without connection
3. Given this Lambda function snippet triggered by a DynamoDB stream event:
def lambda_handler(event, context):
    for record in event['Records']:
        if record['eventName'] == 'INSERT':
            print(record['dynamodb']['NewImage']['id']['S'])

What will this code output when a new item with id '123' is inserted?
medium
A. It prints '123' to the logs
B. It prints the old image of the item
C. It raises a KeyError because 'NewImage' is missing
D. It prints nothing because eventName is 'MODIFY'

Solution

  1. Step 1: Check eventName condition

    The code checks if eventName is 'INSERT', which matches new item insertion.
  2. Step 2: Access NewImage id value

    It accesses 'NewImage' dictionary and prints the 'id' string value '123'.
  3. Final Answer:

    It prints '123' to the logs -> Option A
  4. Quick Check:

    INSERT event prints new id '123' [OK]
Hint: INSERT event uses NewImage to get new item data [OK]
Common Mistakes:
  • Confusing NewImage with OldImage
  • Assuming eventName is MODIFY instead of INSERT
  • Not accessing nested dictionary keys correctly
4. You wrote this Lambda code to process DynamoDB stream events but it throws a runtime error:
def lambda_handler(event, context):
    for record in event['Records']:
        print(record['dynamodb']['NewImage']['id']['S'])

What is the likely cause of the error?
medium
A. The 'id' attribute is always an integer, not a string
B. The event may contain DELETE events without NewImage data
C. The event['Records'] key is missing
D. Lambda functions cannot access DynamoDB streams

Solution

  1. Step 1: Understand stream event types

    DELETE events do not have 'NewImage', only 'OldImage'.
  2. Step 2: Accessing NewImage without check causes error

    Trying to access 'NewImage' on DELETE events causes a KeyError.
  3. Final Answer:

    The event may contain DELETE events without NewImage data -> Option B
  4. Quick Check:

    DELETE events lack NewImage causing runtime error [OK]
Hint: Check event type before accessing NewImage [OK]
Common Mistakes:
  • Assuming all events have NewImage
  • Ignoring DELETE event structure
  • Believing Lambda can't access streams
5. You want your Lambda triggered by DynamoDB streams to process only UPDATE events where the attribute 'status' changed to 'completed'. Which approach is best?
hard
A. Filter events in DynamoDB stream settings to only send UPDATE events with 'completed' status
B. Use a separate Lambda for each event type and status value
C. In Lambda, check if eventName is 'MODIFY' and compare OldImage and NewImage 'status' values
D. Enable stream with only KEYS_ONLY to reduce data size

Solution

  1. Step 1: Understand stream filtering limits

    DynamoDB streams cannot filter by attribute values, only event types.
  2. Step 2: Use Lambda code to check eventName and compare status

    Lambda can check if eventName is 'MODIFY' and compare OldImage and NewImage 'status' to detect change to 'completed'.
  3. Final Answer:

    In Lambda, check if eventName is 'MODIFY' and compare OldImage and NewImage 'status' values -> Option C
  4. Quick Check:

    Filter in Lambda by event and attribute change [OK]
Hint: Filter attribute changes inside Lambda, not in stream settings [OK]
Common Mistakes:
  • Trying to filter by attribute in stream settings
  • Using KEYS_ONLY which lacks attribute data
  • Creating multiple Lambdas unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard