📖 Scenario: You are building a serverless REST API for a product catalog. Instead of using Lambda functions, you want API Gateway to connect directly to DynamoDB to reduce latency and cost. You need to create the request and response mapping templates for GET and POST operations.
🎯 Goal: Write the VTL mapping templates that transform HTTP requests into DynamoDB API calls and DynamoDB responses into clean JSON for the client.
📋 What You'll Learn
Create a GetItem request mapping template
Create a PutItem request mapping template
Write a response mapping for GetItem that strips DynamoDB type descriptors
Add error handling for missing items
💡 Why This Matters
🌍 Real World
Direct API Gateway to DynamoDB integration is used in high-performance serverless APIs where simple CRUD operations don't need Lambda compute overhead.
💼 Career
AWS developers use this pattern to build cost-effective APIs for catalogs, configurations, and metadata services that need sub-50ms response times.
Progress0 / 4 steps
1
GetItem request mapping template
Create a JSON request mapping template for GET /products/{id}. Set TableName to "Products" and Key to an object with "id" of type "S" using $input.params('id') to read the path parameter.
DynamoDB
Hint
DynamoDB GetItem needs TableName and Key. The key value uses type descriptor S for strings.
2
PutItem request mapping template
Create a JSON request mapping template for POST /products. Set TableName to "Products" and Item with three fields: "id" (type "S") from $input.path('$.id'), "name" (type "S") from $input.path('$.name'), and "price" (type "N") from $input.path('$.price').
DynamoDB
Hint
Use $input.path('$.field') to read JSON body fields. Numbers use type N, strings use S.
3
GetItem response mapping template
Write a VTL response mapping template that extracts the item from $input.path('$.Item') into a variable $item using #set, then returns a JSON object with id from $item.id.S, name from $item.name.S, and price from $item.price.N (without quotes for the number).
DynamoDB
Hint
Use #set to assign the item, then access typed values like $item.id.S. Leave numbers unquoted.
4
Add error handling for missing items
Wrap the response template in a VTL conditional. Check if $input.path('$.Item') is empty using #if($input.path('$.Item') == ''). If empty, set the response status to 404 with #set($context.responseOverride.status = 404) and return {"error": "Product not found"}. Otherwise return the normal mapped response from step 3.
DynamoDB
Hint
Use #if/#else/#end for conditional logic. Override the HTTP status with $context.responseOverride.status.
Practice
(1/5)
1. What is the primary role of API Gateway when used with DynamoDB?
easy
A. To replace DynamoDB as a database
B. To store data directly in DynamoDB
C. To securely expose DynamoDB operations over HTTP
D. To perform complex data analytics on DynamoDB data
Solution
Step 1: Understand API Gateway's function
API Gateway acts as a secure interface that translates HTTP requests into backend service calls.
Step 2: Identify its role with DynamoDB
It exposes DynamoDB operations securely over HTTP, enabling controlled access and monitoring.
Final Answer:
To securely expose DynamoDB operations over HTTP -> Option C
Quick Check:
API Gateway = Secure HTTP access to DynamoDB [OK]
Hint: API Gateway acts as a secure HTTP front for DynamoDB [OK]
Common Mistakes:
Thinking API Gateway stores data
Confusing API Gateway with DynamoDB itself
Assuming API Gateway performs data analytics
2. Which of the following is the correct way to define a GET method in API Gateway to fetch an item from DynamoDB?
easy
A. Use HTTP GET with a path parameter for the key and integrate with DynamoDB GetItem action
B. Use HTTP POST with a JSON body containing the key and integrate with DynamoDB PutItem action
C. Use HTTP DELETE with query parameters and integrate with DynamoDB DeleteItem action
D. Use HTTP PUT with path parameters and integrate with DynamoDB UpdateItem action
Solution
Step 1: Match HTTP method to DynamoDB action
GET method is used to retrieve data, so it should map to DynamoDB's GetItem action.
Step 2: Use path parameter for key
The key identifying the item is passed as a path parameter in the GET request.
Final Answer:
Use HTTP GET with a path parameter for the key and integrate with DynamoDB GetItem action -> Option A
Quick Check:
GET + path key = GetItem [OK]
Hint: GET method fetches data; use path parameter for key [OK]
Common Mistakes:
Using POST instead of GET for fetching
Confusing PutItem with GetItem
Using wrong HTTP methods for actions
3. Given this API Gateway integration request mapping template snippet:
What DynamoDB operation does this template prepare for?
medium
A. PutItem to insert a new user
B. GetItem to fetch a user by UserId
C. DeleteItem to remove a user
D. UpdateItem to modify user attributes
Solution
Step 1: Analyze the template structure
The template specifies a TableName and a Key with UserId, which matches the input for a GetItem request.
Step 2: Match to DynamoDB operation
GetItem requires TableName and Key to fetch an item; PutItem or UpdateItem would include Item or UpdateExpression fields.
Final Answer:
GetItem to fetch a user by UserId -> Option B
Quick Check:
TableName + Key = GetItem [OK]
Hint: TableName + Key in template means GetItem [OK]
Common Mistakes:
Confusing GetItem with PutItem
Assuming DeleteItem without DeleteExpression
Ignoring the Key field meaning
4. You configured API Gateway to integrate with DynamoDB PutItem but receive a 400 Bad Request error. Which of these is the most likely cause?
medium
A. Missing required 'Item' field in the request mapping template
B. Using HTTP GET method instead of POST
C. Incorrect table name in the DynamoDB action
D. Not enabling CORS on API Gateway
Solution
Step 1: Understand PutItem requirements
PutItem requires an 'Item' field specifying the data to insert; missing it causes a bad request.
Step 2: Evaluate other options
Using GET instead of POST may cause issues but usually not 400 if mapping is correct; wrong table name causes 500 errors; CORS issues cause client-side errors, not 400 from API Gateway.
Final Answer:
Missing required 'Item' field in the request mapping template -> Option A
Quick Check:
PutItem needs 'Item' field [OK]
Hint: PutItem must include 'Item' in request template [OK]
Common Mistakes:
Confusing HTTP method errors with mapping errors
Ignoring required fields in request templates
Assuming CORS causes 400 errors
5. You want to design a scalable API Gateway to DynamoDB system that supports thousands of requests per second with minimal latency. Which combination of design choices is best?
hard
A. Use API Gateway without caching, DynamoDB with provisioned capacity, and open access without authentication
B. Use API Gateway with caching disabled, DynamoDB with manual scaling, and no monitoring enabled
C. Use API Gateway with throttling disabled, DynamoDB with global tables disabled, and API keys for access control
D. Use API Gateway with caching enabled, DynamoDB with on-demand capacity mode, and IAM roles for secure access
Solution
Step 1: Choose scalable DynamoDB capacity mode
On-demand capacity mode automatically scales to handle high request volumes without manual intervention.
Step 2: Enable API Gateway caching and secure access
Caching reduces latency and load on DynamoDB; IAM roles provide secure, managed access.
Step 3: Avoid options that disable throttling or monitoring
Disabling throttling or monitoring risks overload and lack of visibility; open access is insecure.
Final Answer:
Use API Gateway with caching enabled, DynamoDB with on-demand capacity mode, and IAM roles for secure access -> Option D
Quick Check:
Caching + on-demand + IAM = scalable & secure [OK]
Hint: Enable caching and on-demand capacity for scalability [OK]
Common Mistakes:
Disabling throttling causing overload
Using provisioned capacity without scaling
Ignoring security best practices
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.