📖 Scenario: You are creating a simple serverless API to handle user requests without managing servers. AWS SAM helps you define and deploy this API easily.
🎯 Goal: Build an AWS SAM template that defines a Lambda function triggered by an API Gateway HTTP GET request.
📋 What You'll Learn
Create a SAM template with AWS::Serverless::Function resource
Define a Lambda function named UserFunction
Set the runtime to python3.12
Add an API Gateway event trigger for HTTP GET on path /users
Specify the handler as app.lambda_handler
💡 Why This Matters
🌍 Real World
Serverless applications let you run code without managing servers. AWS SAM simplifies building and deploying these applications.
💼 Career
Understanding AWS SAM is essential for cloud developers and architects working with serverless architectures on AWS.
Progress0 / 4 steps
1
Create the basic SAM template structure
Create a SAM template starting with AWSTemplateFormatVersion set to '2010-09-09' and Transform set to 'AWS::Serverless-2016-10-31'. Also add an empty Resources section.
AWS
Hint
Start with the SAM template header and an empty Resources dictionary.
2
Add the Lambda function resource
Inside Resources, add a resource named UserFunction of type AWS::Serverless::Function. Set the Runtime to python3.12 and the Handler to app.lambda_handler.
AWS
Hint
Define the Lambda function resource with the correct runtime and handler.
3
Add API Gateway event trigger
Under UserFunction properties, add an Events section. Define an event named UserApi with Type set to Api. Set the Properties of this event to have Path as /users and Method as get.
AWS
Hint
Add the API Gateway event trigger under the Lambda function properties.
4
Add function memory size and timeout
Under UserFunction properties, add MemorySize set to 128 and Timeout set to 10 seconds to optimize the function configuration.
AWS
Hint
Set memory size and timeout to control function resources and execution time.
Practice
(1/5)
1. What is the main purpose of AWS Serverless Application Model (SAM)?
easy
A. To simplify building and deploying serverless applications using a single template
B. To manage virtual machines in the cloud
C. To create relational databases automatically
D. To monitor network traffic in AWS
Solution
Step 1: Understand SAM's role
SAM is designed to help developers define serverless functions and their triggers in one file.
Step 2: Compare options
Options A, B, and C describe unrelated AWS services or functions, while D correctly describes SAM's purpose.
Final Answer:
To simplify building and deploying serverless applications using a single template -> Option A
Quick Check:
SAM purpose = Simplify serverless apps [OK]
Hint: SAM = single template for serverless apps [OK]
Common Mistakes:
Confusing SAM with EC2 or database services
Thinking SAM manages infrastructure like VMs
Assuming SAM is for monitoring
2. Which of the following is the correct syntax to define a Lambda function in a SAM template?
easy
A. MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: python3.8
B. MyFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Runtime: python3.8
C. MyFunction:
Type: AWS::EC2::Instance
Properties:
Handler: index.handler
Runtime: python3.8
D. MyFunction:
Type: AWS::S3::Bucket
Properties:
Handler: index.handler
Runtime: python3.8
Solution
Step 1: Identify SAM Lambda function resource type
SAM uses the resource type AWS::Serverless::Function to define Lambda functions.
Step 2: Check other options
MyFunction:
Type: AWS::Lambda::Function
Properties:
Handler: index.handler
Runtime: python3.8 uses AWS::Lambda::Function which is CloudFormation but not SAM shorthand. Options C and D are unrelated resource types.
Final Answer:
MyFunction with Type AWS::Serverless::Function and correct properties -> Option A
Quick Check:
SAM Lambda function type = AWS::Serverless::Function [OK]
Hint: SAM Lambda uses AWS::Serverless::Function type [OK]
Common Mistakes:
Using AWS::Lambda::Function instead of AWS::Serverless::Function
Confusing resource types like EC2 or S3 for Lambda
Missing required properties like Handler or Runtime
3. Given this SAM template snippet, what event triggers the Lambda function?
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: app.lambda_handler
Runtime: python3.8
Events:
ApiEvent:
Type: Api
Properties:
Path: /hello
Method: get
medium
A. A scheduled timer triggers the Lambda
B. An S3 file upload triggers the Lambda
C. A DynamoDB table update triggers the Lambda
D. An HTTP GET request to /hello triggers the Lambda
Solution
Step 1: Identify event type in template
The event type is Api with Path /hello and Method get, meaning an HTTP GET request triggers the function.
Step 2: Eliminate other event types
S3 upload, scheduled timer, and DynamoDB update are different event types not shown here.
Final Answer:
An HTTP GET request to /hello triggers the Lambda -> Option D
Quick Check:
Api event with GET /hello = HTTP trigger [OK]
Hint: Api event with Method get means HTTP GET trigger [OK]
Common Mistakes:
Confusing Api event with S3 or timer events
Ignoring the Method and Path properties
Assuming default triggers without checking Events
4. You wrote this SAM template but deployment fails. What is the error?
C. The Events property under S3Event should be a list, not a string
D. The Bucket name cannot be hardcoded
Solution
Step 1: Check S3 event syntax
The Events property for S3 event must be a list of event types, but here it is a string.
Step 2: Verify other properties
Handler is present, python3.8 is supported, and bucket names can be hardcoded in SAM templates.
Final Answer:
The Events property under S3Event should be a list, not a string -> Option C
Quick Check:
S3 Events property = list, not string [OK]
Hint: S3 Events must be a list, not a single string [OK]
Common Mistakes:
Using string instead of list for S3 Events
Removing required Handler property
Assuming runtime version is invalid without checking
5. You want to deploy a serverless app with two Lambda functions triggered by different events: one by HTTP GET /users and another by S3 file upload to bucket 'data-bucket'. Which SAM template snippet correctly defines both functions?