AWS SAM (Serverless Application Model)
- SAM is an extension to CloudFormation used to define serverless applications
- Simplified syntax for defining serverless roesources:
- APIs
- Lambda Functions
- DynamoDB Tables etc.
- Use the SAM CLI to package your deployment code, upload it to S3 and deploy your serverless application
SAM CLI Commands
sam package \
--template-file ./mytemplate.yml \
--output-template-fil sam-template.yml \
--s3-bucket s3-bucket-name
sam deploy \
--template-file sam-template.yml \
--stack-name mystack \
--capabilities CAPABILITY_IAM
Exam Tips
- SAM is the Serverless Application Model
- Allows you to define and provision serverless applications using CloudFormation
- Uses the SAM CLI commands to package and deploy:
- sam package - packages your applicaiton and uploads to S3
- sam deploy - deploys your serverless app using CloudFormation
Lab Notes
# 1) Pre-requisties: After installing Python 3.x, install pip and the SAC CLI:
easy_install pip
pip install aws-sam-cli
# validate the IAM user your using -> ensure has S3FullAccess Policy
aws iam get-user
# 2) Create an S3 bucket:
aws s3 mb s3://cfsambucket --region eu-west-2 #use the bucket name and region name of your choice
# 3) Package your deployment:
sam package \
--template-file ./lambda.yml \
--output-template-file sam-template.yml \
--s3-bucket cfsambucket
#use the bucket name you used in the previous step
#Windows users: replace \ with ^ (use Shift + 6) for line continuation
#4) Deploy your package:
sam deploy \
--template-file sam-template.yml \
--stack-name mystack \
--capabilities CAPABILITY_IAM
#Windows users: replace \ with ^ (use Shift + 6) for line continuation
index.js Lambda function
exports.handler = (event, context, callback) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify('Hello Cloud Gurus, This Lambda Function was deployed using SAM!')
};
callback(null, response);
};
CloudFormation Lambda (Transform clarifies its SAM)
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
TestFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs8.10
Environment:
Variables:
S3_BUCKET: cfsambucket