Bird
Raised Fist0
DynamoDBquery~30 mins

Event-driven architecture patterns in DynamoDB - Mini Project: Build & Apply

Choose your learning style10 modes available
Event-driven Architecture with DynamoDB Streams
📖 Scenario: You are building a simple inventory system that tracks product stock levels. When a product's stock changes, you want to capture this event and store it separately for auditing and analytics.
🎯 Goal: Create a DynamoDB table to store products, enable DynamoDB Streams to capture changes, and write a simple event handler function that processes these change events.
📋 What You'll Learn
Create a DynamoDB table named Products with ProductID as the primary key.
Enable DynamoDB Streams on the Products table to capture item modifications.
Create a variable called stream_arn to hold the stream ARN of the Products table.
Write a function called process_event that takes a DynamoDB stream event record and extracts the ProductID and Stock values.
Add a final step to simulate processing a sample event record.
💡 Why This Matters
🌍 Real World
Event-driven architectures are common in modern cloud applications to react to data changes in real time, such as updating dashboards or triggering workflows.
💼 Career
Understanding how to use DynamoDB Streams and process events is valuable for backend developers and cloud engineers working with AWS services.
Progress0 / 4 steps
1
Create the DynamoDB Products table
Create a variable called products_table that represents a DynamoDB table named Products with ProductID as the primary key.
DynamoDB
Hint

Define products_table as a dictionary with keys TableName, KeySchema, and AttributeDefinitions.

2
Enable DynamoDB Streams on the Products table
Add a key StreamSpecification to products_table with StreamEnabled set to True and StreamViewType set to NEW_AND_OLD_IMAGES. Then create a variable called stream_arn and set it to the string 'arn:aws:dynamodb:region:account-id:table/Products/stream/2024-06-01T00:00:00.000'.
DynamoDB
Hint

Update StreamSpecification inside products_table and create stream_arn as a string variable.

3
Write the event processing function
Write a function called process_event that takes one parameter record. Inside the function, extract ProductID and Stock from record['dynamodb']['NewImage'] assuming they are strings and numbers respectively, and return them as a tuple (product_id, stock).
DynamoDB
Hint

Use dictionary keys to access NewImage data and convert stock to integer.

4
Simulate processing a sample event record
Create a variable called sample_record that mimics a DynamoDB stream event record with ProductID set to 'P123' and Stock set to 50. Then call process_event(sample_record) and assign the result to a variable called result.
DynamoDB
Hint

Define sample_record as a nested dictionary matching DynamoDB stream format and call process_event.

Practice

(1/5)
1. What is the main purpose of using DynamoDB Streams in an event-driven architecture?
easy
A. To capture and record changes in the DynamoDB table as events
B. To store backup copies of the DynamoDB table
C. To increase the read capacity of the DynamoDB table
D. To encrypt data stored in DynamoDB

Solution

  1. Step 1: Understand DynamoDB Streams role

    DynamoDB Streams capture data modification events like inserts, updates, and deletes.
  2. Step 2: Identify the purpose in event-driven architecture

    These captured events trigger other processes automatically, enabling real-time reactions.
  3. Final Answer:

    To capture and record changes in the DynamoDB table as events -> Option A
  4. Quick Check:

    DynamoDB Streams = capture changes [OK]
Hint: Streams capture table changes as events for triggers [OK]
Common Mistakes:
  • Confusing Streams with backups
  • Thinking Streams increase capacity
  • Assuming Streams encrypt data
2. Which of the following is the correct way to enable DynamoDB Streams on a table using AWS CLI?
easy
A. aws dynamodb set-stream --table MyTable --enabled true
B. aws dynamodb enable-stream --table MyTable --type NEW_IMAGE
C. aws dynamodb create-stream --table-name MyTable --view-type KEYS_ONLY
D. aws dynamodb update-table --table-name MyTable --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES

Solution

  1. Step 1: Recall AWS CLI command for enabling streams

    The correct command uses 'update-table' with '--stream-specification' to enable streams.
  2. Step 2: Verify syntax and parameters

    aws dynamodb update-table --table-name MyTable --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES correctly sets StreamEnabled=true and specifies StreamViewType as NEW_AND_OLD_IMAGES.
  3. Final Answer:

    aws dynamodb update-table --table-name MyTable --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES -> Option D
  4. Quick Check:

    Enable streams = update-table + stream-specification [OK]
Hint: Use update-table with stream-specification to enable streams [OK]
Common Mistakes:
  • Using non-existent commands like enable-stream
  • Incorrect parameter names
  • Confusing create-stream with enabling streams
3. Given a DynamoDB Stream enabled with StreamViewType=NEW_IMAGE, what will an AWS Lambda function receive when an item is updated?
medium
A. Only the keys of the updated item
B. The entire item before and after the update
C. Only the new version of the item after the update
D. No data, only a notification that an update occurred

Solution

  1. Step 1: Understand StreamViewType NEW_IMAGE meaning

    NEW_IMAGE sends only the new version of the item after the change.
  2. Step 2: Determine what Lambda receives on update

    Lambda gets the updated item data, not the old version or just keys.
  3. Final Answer:

    Only the new version of the item after the update -> Option C
  4. Quick Check:

    NEW_IMAGE = new item data only [OK]
Hint: NEW_IMAGE sends only updated item data to Lambda [OK]
Common Mistakes:
  • Confusing NEW_IMAGE with NEW_AND_OLD_IMAGES
  • Assuming keys only are sent
  • Thinking Lambda gets no data
4. You wrote a Lambda function triggered by DynamoDB Streams but it never executes. What is the most likely cause?
medium
A. The DynamoDB table does not have Streams enabled
B. The Lambda function is not subscribed to the stream
C. The Lambda function code has syntax errors
D. The DynamoDB table has no data

Solution

  1. Step 1: Check if Streams are enabled

    If Streams were not enabled, no events would be generated, but question implies setup.
  2. Step 2: Verify Lambda subscription to the stream

    Without subscribing Lambda to the stream, it won't trigger on events.
  3. Final Answer:

    The Lambda function is not subscribed to the stream -> Option B
  4. Quick Check:

    Lambda must be subscribed to stream to trigger [OK]
Hint: Ensure Lambda is subscribed to DynamoDB Stream [OK]
Common Mistakes:
  • Assuming syntax errors stop invocation
  • Thinking empty table stops Lambda trigger
  • Ignoring subscription setup
5. You want to build a real-time notification system using DynamoDB and Lambda. Which event-driven architecture pattern best fits this use case?
hard
A. Use DynamoDB Streams to capture changes and trigger Lambda to send notifications
B. Use periodic polling of DynamoDB to check for changes and send notifications
C. Use DynamoDB Global Tables to replicate data and notify users
D. Use DynamoDB backups to trigger notifications on data changes

Solution

  1. Step 1: Identify real-time event-driven pattern

    Real-time notifications require immediate reaction to data changes.
  2. Step 2: Match pattern with DynamoDB Streams and Lambda

    Streams capture changes as events; Lambda processes them instantly to notify users.
  3. Final Answer:

    Use DynamoDB Streams to capture changes and trigger Lambda to send notifications -> Option A
  4. Quick Check:

    Streams + Lambda = real-time notifications [OK]
Hint: Streams trigger Lambda for instant notifications [OK]
Common Mistakes:
  • Choosing polling which is not real-time
  • Confusing replication with notifications
  • Using backups which are not event triggers
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