AWS - SAM
SAM(Serverless Application Model)
SAM Serverless Application Model 是一套 serverless IaC 框架,擴充 Cloud Formation,讓編寫與部署 Serverless Services 更簡單
支援 Serverless 服務
- Lambda
- API Gateway
- DynamoDB
- SQS
- EventBridge
- Step Functions
- SAM Pipelines(CI/CD)
SAM 主要功能
- sam build: 打包程式碼與依賴
- sam local: 本地執行 Lambda/API (使用 Docker 模擬 Lambda Runtime)
- sam deploy: 以 CloudFormation Template 形式部署到 AWS
SAM Template Example
1 | Transform: AWS::Serverless-2016-10-31 |
AWS::Serverless::Function 自動轉成 CloudFormation + Lambda + API Gateway
SAM 與 CloudFormation 關係
| CloudFormation | SAM |
|---|---|
| 很多 YAML/JSON | 更簡短,有很多預設 |
| 需要手動建立 Event Trigger | 自動將事件與 Lambda 綁定 |
| 靈活但頻繁 | Serverless 最佳化 |
SAM 是 CloudFormation 的抽象與增強
SAM 指令
SAM Init
- sam init 建立新的 Serverless 專案(模板可選 API/Event/HelloWorld 等)
SAM Build
- sam build: 打包 Lambda Function Code + Dependencies
- sam build –use-container: 使用 Docker 模擬 Lambda Layer 打包
SAM Local
- sam local invoke: 本地執行單一 lambda
- sam local start-api: 模擬 API Gateway
- sam local start-lambda: 外部呼叫 lambda endpoint
- sam local generate-event: 自動生成 Lambda 觸發事件範例(S3/SQS/API 等 Payload)
- sam logs: 抓 CloudWatch logs
開發迭代非常快
Docker 容器完整模擬 Lambda Runtime
SAM Deploy
- sam deploy –guided: 第一次部署,寫入參數為 defaults
- sam deploy: 依照現有設定快速部署
- sam sync: 熱部署,極快,進行 code-only 更新(無需整套 CloudFormation)
- sam delete: 刪除整套部署資源
sam sync 是近代最重要提升 > 適合快速開發 Lambda + API
SAM Pipeline
- sam pipeline init: 產生 CI/CD 工作流程(Code Pipeline/GitHub Actions)
- sam pipeline bootstrap: 初始化 pipeline 環境(IAM/S3/ECR/KMS)
- sam pipeline deploy: 透過 Pipeline 部署
SAM Management
- sam validate: 驗證 template 格式與資源設定
- sam list: 列出服務與堆疊資訊
- sam get: 下載範例資源
- sam publish: 將 App 發佈到 SAR(Serverless App Repository)
- sam traces: 查詢 X-Ray traces
- sam accelerate: 與 sync 搭配改善 loop time
CI/CD: SAM Pipeline
SAM 內建自動化
- CodeBuild
- CodePipeline
- GitHub/GitLan
- Gradually Deployment: Dev > Staging > Prod
適合團隊共同開發部署
Obersevability
內建最佳化
- AWS X-Ray
- CloudWatch Logs + Metrics
- Tracing
- 統一 Log format(lambda Powertools)
Reference
- AWS - Introduction to testing with the sam local command
- AWS - AWS SAM template anatomy
- AWS - sam deploy
- AWS - What is the AWS Serverless Application Model (AWS SAM)?
