aws-sam-cli
CLI tool to build, test, debug, and deploy Serverless applications using AWS SAM
Top Related Projects
⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.
Pulumi - Infrastructure as Code in any programming language 🚀
Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.
OpenFaaS - Serverless Functions Made Simple
Quick Overview
AWS SAM CLI (Serverless Application Model Command Line Interface) is an open-source tool for building, testing, and deploying serverless applications on AWS. It provides a simplified way to define and manage serverless resources, allowing developers to focus on writing code rather than managing infrastructure.
Pros
- Simplifies serverless application development and deployment on AWS
- Provides local testing and debugging capabilities for Lambda functions
- Integrates well with existing AWS services and tools
- Supports multiple programming languages and runtimes
Cons
- Limited to AWS ecosystem, not suitable for multi-cloud or non-AWS deployments
- Learning curve for developers new to serverless concepts or AWS
- Some advanced features may require additional configuration or workarounds
- Local testing environment may not perfectly replicate AWS production environment
Code Examples
- Initializing a new SAM project:
sam init --runtime python3.9 --name my-sam-app
This command creates a new SAM project with Python 3.9 runtime.
- Building the SAM application:
sam build
This command builds the application and prepares it for deployment.
- Deploying the SAM application:
sam deploy --guided
This command deploys the application to AWS, with an interactive guided deployment process.
Getting Started
To get started with AWS SAM CLI:
-
Install AWS SAM CLI:
pip install aws-sam-cli
-
Configure AWS credentials:
aws configure
-
Create a new SAM project:
sam init
-
Build and deploy your application:
sam build sam deploy --guided
For more detailed instructions, refer to the AWS SAM CLI documentation.
Competitor Comparisons
⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.
Pros of Serverless
- Multi-cloud support (AWS, Azure, GCP, etc.)
- Extensive plugin ecosystem
- More flexible and customizable deployment options
Cons of Serverless
- Steeper learning curve
- Potentially more complex configuration
- Less integrated with AWS-specific features
Code Comparison
Serverless:
service: my-service
provider:
name: aws
runtime: nodejs14.x
functions:
hello:
handler: handler.hello
SAM CLI:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HelloFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs14.x
Key Differences
- Serverless supports multiple cloud providers, while SAM CLI is AWS-specific
- SAM CLI uses AWS CloudFormation syntax, Serverless uses its own configuration format
- Serverless offers more extensive customization options, but SAM CLI provides tighter AWS integration
- SAM CLI is better suited for AWS-focused projects, while Serverless is more versatile for multi-cloud deployments
- Both tools support local testing and debugging, but SAM CLI's integration with AWS services is more seamless
Use Cases
- Choose Serverless for multi-cloud projects or when extensive customization is required
- Opt for SAM CLI when working exclusively with AWS and prefer native AWS tooling and integration
Pulumi - Infrastructure as Code in any programming language 🚀
Pros of Pulumi
- Supports multiple cloud providers, not limited to AWS
- Uses familiar programming languages (Python, JavaScript, etc.) instead of YAML
- Offers more flexibility and control over infrastructure as code
Cons of Pulumi
- Steeper learning curve for those familiar with YAML-based templates
- Requires more setup and configuration compared to SAM CLI
- May be overkill for simple serverless applications
Code Comparison
SAM CLI (YAML):
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Runtime: nodejs14.x
CodeUri: ./src
Pulumi (JavaScript):
const lambda = new aws.lambda.Function("myFunction", {
code: new pulumi.asset.AssetArchive({
".": new pulumi.asset.FileArchive("./src"),
}),
handler: "index.handler",
runtime: "nodejs14.x",
});
Both SAM CLI and Pulumi are powerful tools for infrastructure as code, but they cater to different needs. SAM CLI is more focused on AWS serverless applications, while Pulumi offers a broader scope for multi-cloud deployments. The choice between them depends on your specific project requirements, team expertise, and desired level of control over infrastructure.
Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.
Pros of Terraform
- Multi-cloud support, allowing infrastructure management across various providers
- More extensive ecosystem with a larger community and wider range of available modules
- Declarative syntax for defining infrastructure as code, promoting consistency and reusability
Cons of Terraform
- Steeper learning curve, especially for those new to infrastructure as code
- Requires manual state management, which can be complex in team environments
- Less tightly integrated with AWS-specific features compared to SAM CLI
Code Comparison
SAM CLI (template.yaml):
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Handler: index.handler
Terraform (main.tf):
resource "aws_lambda_function" "my_function" {
filename = "lambda_function_payload.zip"
function_name = "my_function"
role = aws_iam_role.lambda_role.arn
handler = "index.handler"
}
Both tools use declarative syntax to define infrastructure, but Terraform's HCL (HashiCorp Configuration Language) is more verbose and flexible, while SAM CLI's YAML-based templates are more concise and AWS-specific. SAM CLI is tailored for serverless applications on AWS, whereas Terraform offers a broader scope for managing various types of infrastructure across multiple cloud providers.
OpenFaaS - Serverless Functions Made Simple
Pros of faas
- Platform-agnostic: Works with any cloud provider or on-premises infrastructure
- Supports multiple programming languages and frameworks
- Active community and extensive ecosystem of templates and functions
Cons of faas
- Steeper learning curve compared to SAM CLI
- Less integrated with cloud provider-specific services
- May require more setup and configuration for complex deployments
Code Comparison
SAM CLI (Python):
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Properties:
Handler: app.lambda_handler
faas (YAML):
version: 1.0
provider:
name: openfaas
gateway: http://127.0.0.1:8080
functions:
hello-world:
lang: python3
handler: ./hello-world
image: hello-world:latest
Both frameworks use YAML for configuration, but SAM CLI is more tightly integrated with AWS services, while faas offers a more flexible, cloud-agnostic approach. SAM CLI's template focuses on AWS-specific resources, whereas faas configuration is centered around function definitions and deployment settings applicable to various platforms.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
AWS SAM CLI
Installation | Blogs | Videos | AWS Docs | Roadmap | Try It Out | Slack Us
The AWS Serverless Application Model (SAM) CLI is an open-source CLI tool that helps you develop serverless applications containing Lambda functions, Step Functions, API Gateway, EventBridge, SQS, SNS and more. Some of the features it provides are:
- Initialize serverless applications in minutes with AWS-provided infrastructure templates with
sam init
- Compile, build, and package Lambda functions with provided runtimes and with custom Makefile workflows, for zip and image types of Lambda functions with
sam build
- Locally test a Lambda function and API Gateway easily in a Docker container with
sam local
commands on SAM and CDK applications - Sync and test your changes in the cloud with
sam sync
in your developer environments - Deploy your SAM and CloudFormation templates using
sam deploy
- Quickly create pipelines with prebuilt templates with popular CI/CD systems using
sam pipeline init
- Tail CloudWatch logs and X-Ray traces with
sam logs
andsam traces
Recent blogposts and workshops
-
Speeding up incremental changes with AWS SAM Accelerate and Nested Stacks - Read blogpost here.
-
Develop Node projects with SAM CLI using esbuild - and use SAM Accelerate on Typescript projects. Read blogpost here.
-
Speed up development with SAM Accelerate - quickly test your changes in the cloud. Read docs here.
-
AWS Serverless Developer Experience Workshop: A day in a life of a developer - This advanced workshop provides you with an immersive experience as a serverless developer, with hands-on experience building a serverless solution using AWS SAM and SAM CLI.
-
The Complete SAM Workshop - This workshop is a great way to experience the power of SAM and SAM CLI.
-
Getting started with CI/CD? SAM pipelines can help you get started - This workshop walks you through the basics.
-
Get started with Serverless Application development using SAM CLI - This workshop walks you through the basics.
Get Started
To get started with building SAM-based applications, use the SAM CLI. SAM CLI provides a Lambda-like execution environment that lets you locally build, test, debug, and deploy AWS serverless applications.
- Install SAM CLI
- Build & Deploy a "Hello World" Web App
- Install AWS Toolkit to use SAM with your favorite IDEs
- Tutorials and Workshops
- Powertools for AWS Lambda is a developer toolkit to implement Serverless best practices and increase developer velocity. Available for Python, Java, TypeScript and .NET.
Next Steps: Learn to build a more complex serverless application.
- Extract text from images and store it in a database using Amazon S3 and Amazon Rekognition services.
- Detect when records are added to a database using Amazon DynamoDB database and asynchronous stream processing.
- Explore popular patterns
What is this Github repository? ð»
This Github repository contains source code for SAM CLI. Here is the development team talking about this code:
SAM CLI code is written in Python. Source code is well documented, very modular, with 95% unit test coverage. It uses this awesome Python library called Click to manage the command line interaction and uses Docker to run Lambda functions locally. We think you'll like the code base. Clone it and run
make pr
or./Make -pr
on Windows!
Related Repositories and Resources
- SAM Transform Open source template specification that provides shorthand syntax for CloudFormation
- SAM CLI application templates Get started quickly with predefined application templates for all supported runtimes and languages, used by
sam init
- Lambda Builders Lambda builder tools for supported runtimes and custom build workflows, used by
sam build
- Build and local emulation images for CI/CD tools Build container images to use with CI/CD tasks
Contribute to SAM
We love our contributors â¤ï¸ We have over 100 contributors who have built various parts of the product. Read this testimonial from @ndobryanskyy to learn more about what it was like contributing to SAM.
Depending on your interest and skill, you can help build the different parts of the SAM project;
Enhance the SAM Specification
Make pull requests, report bugs, and share ideas to improve the full SAM template specification. Source code is located on Github at aws/serverless-application-model. Read the SAM Specification Contributing Guide to get started.
Strengthen SAM CLI
Add new commands, enhance existing ones, report bugs, or request new features for the SAM CLI. Source code is located on Github at aws/aws-sam-cli. Read the SAM CLI Contributing Guide to get started.
Update SAM Developer Guide
SAM Developer Guide provides a comprehensive getting started guide and reference documentation. Source code is located on Github at awsdocs/aws-sam-developer-guide. Read the SAM Documentation Contribution Guide to get started.
Join the SAM Community on Slack
Join the SAM developers channel (#samdev) on Slack to collaborate with fellow community members and the AWS SAM team.
Top Related Projects
⚡ Serverless Framework – Effortlessly build apps that auto-scale, incur zero costs when idle, and require minimal maintenance using AWS Lambda and other managed cloud services.
Pulumi - Infrastructure as Code in any programming language 🚀
Terraform enables you to safely and predictably create, change, and improve infrastructure. It is a source-available tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned.
OpenFaaS - Serverless Functions Made Simple
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot