[tutorial] 使用 AWS SAM 建立與執行 Lambda 函數
📌 Introduction
主要介紹如何使用 AWS SAM 建立與執行 Lambda 函數,包含基本安裝、專案結構說明,以及在本地端執行 Lambda 的操作流程
🚀 Quick Start
AWS CLI
1  | brew install awscli  | 
AWS SAM (Serverless Application Model) CLI
1  | brew install aws-sam-cli  | 
初始化 SAM project
1  | sam init  | 
介紹專案架構
1  | .  | 
events/- 放置模擬事件(Event Payload)的 Json 檔,用來測試 Lambda 函數hello_world/- Application 的放置處,與 Lambda 有關的函數,包含 handler 函式(例如 app.py)以及依賴(例如 requirements.txt)tests/- 單元測試的資料夾samconfig.toml- 儲存 SAM CLI 執行參數(如部署區域、Stack 名稱、S3 bucket 等),用來簡化sam deploy時的設定流程template.yaml- 定義所有 Lambda 函數,IaC 的主要核心檔案(主要會用到哪些服務,互相的相依關係),是基於 AWS CloudFormation 的擴充語法
template.yaml
可使用 CloudFormation Linter 工具
cfn-lint對檔案偵測格式、屬性錯誤
Header
1  | AWSTemplateFormatVersion: '2010-09-09'  | 
- AWSTemplateFormatVersion - AWS CloudFormation 的版本號
 - Transform - 告訴 CloudFormation 這個模板要額外使用 SAM 來擴充語法
 - Description - 專案介紹
 
Content
- Globals - 預設設定,提供給 Resources 使用
 - Resources - 建立的 AWS 資源,可參考 AWS resource and property types reference、AWS SAM resources and properties
 - Outputs - 在部署完後預期印出的結果(你需要知道哪些資訊)
 
samconfig.toml
可參考 AWS SAM CLI configuration file、Configuring the AWS SAM CLI、AWS SAM CLI command reference
目的是為了簡化使用 sam 指令時的複雜度
| Original | Optimized with samconfig | 
|---|---|
sam build --cached --parallel --use-containers | 
sam build | 
sam local invoke --env-vars locals.json | 
sam local invoke | 
sam local start-api --env-vars locals.json --warm-containers EAGER | 
sam local start-api | 
Local Invoke
1  | sam local invoke  | 
1  | No current session found, using default AWS::AccountId  | 
🔁 Recap
- 安裝指令
 - 理解 AWS SAM 的專案架構
 - 知道特定檔案 
template.yaml、samconfig.toml檔案用途以及欄位的官方相關文件 - 在地端 Invoke 一個簡單的 
Hello WorldLambda Function 
🔗 References
[tutorial] 使用 AWS SAM 建立與執行 Lambda 函數
https://hsiangjenli.github.io/blog/tutorial_chinese_aws_sam_install_and_lambda/