AWS Serverless Application Model (SAM) is a framework for building serverless applications on AWS. SAM provides a simplified way of defining the Amazon API Gateway APIs, AWS Lambda functions, and Amazon DynamoDB tables needed by your serverless application. SAM also provides a command-line interface (CLI) for deploying and managing your serverless application on AWS.
In this guide, we will use SAM for serverless applications and AWS CloudFormation for all other deployments using templates for reusable resources.
Before we get started, you’ll need the following:
- An AWS account
- AWS CLI installed on your local machine
- Basic understanding of AWS Lambda and AWS CloudFormation
Using SAM for Serverless Applications
To get started with SAM, follow these steps:
- Create a new SAM application using the
sam initcommand. This will create a new directory with the basic structure of a SAM application.
- Define the AWS resources needed for your serverless application in the
template.yamlfile. This can include AWS Lambda functions, Amazon API Gateway APIs, and Amazon DynamoDB tables.
- Write the code for your AWS Lambda functions in the
- Test your application locally using the
sam localcommand. This will spin up a local environment that mimics AWS Lambda and API Gateway.
- Once you’re happy with your application, use the
sam deploycommand to deploy your application to AWS. This will create the necessary AWS resources defined in your
Using CloudFormation for All Other Deployments
For deployments that don’t use SAM, we recommend using AWS CloudFormation. CloudFormation provides a way to define infrastructure as code using templates, which can be versioned and reused.
To use CloudFormation for your deployments, follow these steps:
- Define the AWS resources needed for your deployment in a CloudFormation template. This can include Amazon S3 buckets, Amazon EC2 instances, and Amazon RDS databases.
- Use the
aws cloudformation create-stackcommand to create a new stack based on your CloudFormation template. This will create the necessary AWS resources defined in your template.
- Once your stack is created, you can update it using the
aws cloudformation update-stackcommand. This will update the AWS resources in your stack based on any changes made to your CloudFormation template.
- You can also delete your stack using the
aws cloudformation delete-stackcommand. This will delete all AWS resources created by your CloudFormation template.
Here’s how to set up your CodeBuild pipeline to use SAM and CloudFormation:
- In your CodeBuild project, add the necessary IAM permissions to deploy resources to AWS. This includes permissions for CloudFormation and SAM.
- Add a build step to your CodeBuild project that uses SAM to build and package your serverless application. You can use the
sam packagecommands to do this.
- Add a build step to your CodeBuild project that uses CloudFormation to deploy your resources. You can use the
aws cloudformation deploycommand to do this.
- Update your buildspec.yml file to include the SAM and CloudFormation build steps. Here’s an example buildspec.yml file:
phases: build: commands: - sam build - sam package --output-template-file packaged.yaml --s3-bucket my-bucket - aws cloudformation deploy --template-file packaged.yaml --stack-name my-stack --capabilities CAPABILITY_IAM
- Save and commit your buildspec.yml file to your source code repository.
- Start a build in CodeBuild to deploy your resources. Once the build is complete, you can view the deployed resources in the AWS Management Console.
By integrating SAM and CloudFormation into your CodeBuild pipeline, you can automate the deployment of your serverless applications and infrastructure using templates for reusable resources. This makes it easy to version and deploy your resources consistently across your AWS account.
Using SAM for serverless applications and CloudFormation for all other deployments using templates for reusable resources is a great way to streamline your deployment process on AWS. With SAM, you can easily define your serverless application resources and deploy them using a simple CLI. With CloudFormation, you can define your infrastructure as code using templates, which can be versioned and reused.