
AWS Lambda 完全使用指南:從零搭建Serverless 函數運算架構
某出海SaaS 公司的後端團隊曾告訴我們:他們每月為一批」0 點到6 點幾乎無請求」的API 服務支付固定的EC2 費用。換算下來,這些伺服器有效利用率不到15%,卻一直燒錢。
遷移到AWS Lambda 後,同樣的業務邏輯,每月帳單從 2,400降到2,400降到180——Lambda 只在請求到達時計費,空閒時不產生任何費用。
一、什麼是AWS Lambda? Serverless 的核心邏輯
1.1 傳統伺服器vs Serverless 的本質區別
| 維度 | 傳統EC2 伺服器 | AWS Lambda (Serverless) |
|---|---|---|
| 計費方式 | 按小時/月付費,無論是否有請求 | 按呼叫次數+ 執行時長計費 |
| 擴容方式 | 手動或預設規則擴容,有延遲 | 自動瞬時擴容,可併發數千 |
| 維運負擔 | 需管理OS、修補程式、安全性群組 | 零伺服器管理,專注業務代碼 |
| 冷啟動 | 無(進程常駐) | 存在冷啟動延遲(首次100~500ms) |
| 適用場景 | 穩定持續的工作負載 | 間歇性、事件驅動的工作負載 |
核心思想:Lambda 讓你只寫”函數”,AWS 負責運行環境、擴容、監控的一切——你只為程式碼真正運行的時間付費。
1.2 Lambda 的定價邏輯(2026 年最新)
Lambda 的免費額度非常慷慨:
- 免費請求數:每月100 萬次調用(永久免費)
- 免費計算時長:每月40 萬GB-秒
- 超出後的費用:
- 請求:$0.20 / 100 萬次
- 計算長度:$0.0000166667 / GB-秒
舉例計算:每天被呼叫10 萬次、平均執行200ms、記憶體512MB 的函數:
- 月調用次數:300 萬次→ 超過免費額度200 萬次→ 費用:$0.40
- 月計算時間:300 萬× 0.2s × 0.5GB = 30 萬GB-秒→ 全在免費額度內
- 每月總費用:約$0.40
二、Lambda 核心概念速覽
2.1 函數(Function)
Lambda 的基本執行單元,支援以下執行時間:
| 語言 | 支援版本 |
|---|---|
| Python | 3.9、3.10、3.11、3.12 |
| Node.js | 18.x、20.x |
| Java | 11、17、21 |
| Go | 1.x(via provided.al2023) |
| .NET | 6、8 |
| 自訂運行時 | 任何語言(透過Runtime API) |
2.2 觸發器(Trigger)
Lambda 函數本身是被動的-它需要觸發器來調用。常見觸發器:
| 觸發器類型 | 使用場景 |
|---|---|
| API Gateway / ALB | HTTP API 接口,最常見 |
| S3 事件 | 文件上傳時觸發處理(圖片壓縮、格式轉換) |
| DynamoDB Streams | 資料變更時觸發下游邏輯 |
| SQS 佇列 | 非同步訊息處理,削峰填谷 |
| EventBridge | 定時任務(類似Cron) |
| SNS | 訊息通知觸發處理 |
| Cognito | 使用者註冊/登入事件觸發 |
2.3 執行環境與生命週期
請求到達↓ [冷啟動階段] 僅首次或實例回收後觸發├── 初始化執行環境(下載程式碼、啟動運行時) ├── 執行初始化程式碼(import、連線池等handler 外的程式碼) └── 約100~500ms 延遲[熱執行階段] 絕大多數請求├──直接執行函數├——執行環境保留約5~15 分鐘,等待下次再利用
三、第一個Lambda 函數:實戰搭建流程
3.1 透過AWS 控制台創建(5分鐘上手)
Step 1:進入Lambda 控制台→ 點擊”創建函數”
Step 2:選擇”從頭開始創作”,填寫:
- 函數名稱:
my-first-function - 運行時:Python 3.12
- 架構:x86_64(ARM/Graviton2 可降低約20% 成本)
Step 3:編寫handler 程式碼(控制台內嵌編輯):
import json
def lambda_handler(event, context):
# event: 觸發器傳入的數據
# context: 函數運行時資訊(剩餘時間、請求ID等)
name = event.get('名', 'World')
return {
'statusCode': 200,
'body': json.dumps({
'message': f'Hello, {name}!',
'requestId': context.aws_request_id }) }
Step 4:配置測試事件→ 執行測試,驗證輸出
Step 5:新增觸發器(以API Gateway 為例):
- 選擇”API Gateway” → 建立新API → REST API
- 部署後取得公開HTTPS 端點,即可透過HTTP 呼叫函數
3.2 使用AWS SAM 進行本地開發(建議生產環境)
AWS Serverless Application Model(SAM)是官方推薦的IaC 工具
本地測試命令:
# 安裝SAM CLI
pip install aws-sam-cli
# 本機啟動API
sam local start-api
# 運行單一函數測試
sam local invoke ProcessOrderFunction --event events/test_event.json
四、效能優化:解決冷啟動問題
冷啟動是Lambda 使用中最常被質疑的問題,以下是系統性解決方案:
4.1 減少冷啟動時間
| 優化手段 | 效果 | 實操方法 |
|---|---|---|
| 選擇輕量運行時 | 顯著 | Python/Node.js 冷啟動遠快於Java |
| 減小部署包體積 | 明顯 | 只打包必要依賴,使用Lambda Layer 共享庫 |
| 使用ARM 架構 | 輕微 | Graviton2 處理器,冷啟動快約10% |
| 程式碼最佳化 | 明顯 | 將DB 連線、SDK 初始化移到handler 外部,利用實例重複使用 |
# ✅ 建議:初始化程式碼放在handler 外(只在冷啟動時執行一次)
import boto3
# 這裡的程式碼只在冷啟動時運行
dynamodb = boto3.resource('dynamodb') table = dynamodb.Table('orders')
def lambda_handler(event, context):
# 這裡直接重複使用已初始化的table 對象
response = table.get_item(Key={'order_id': event['order_id']})
return response['Item']
4.2 Provisioned Concurrency(預置並發)
對於延遲敏感型應用(如即時API),可以預先初始化指定數量的執行環境:
# 為函數配置10 個預置並發實例
aws lambda put-provisioned-concurrency-config \ --function-name my-api-function \ --qualifier production \ --provisioned-concurrent-executions 10
成本提示:預置並發按小時收費($0.0000646 / GB-小時),適合高流量關鍵路徑,不適合所有函數全量配置。
五、生產環境最佳實踐
5.1 記憶體配置策略
Lambda 的記憶體直接影響CPU 算力和費用。找到最優記憶體的方法:
- Lambda Power Tuning 工具:AWS 開源工具,自動測試不同記憶體配置的效能/成本比
- 經驗規則:記憶體翻倍,CPU 也翻倍;如果執行時間減少50%+,升記憶體反而更省錢
5.2 並發限制與帳戶配額
| 並發類型 | 預設限制 | 說明 |
|---|---|---|
| 帳戶並發上限 | 1000(可申請提升) | 整個帳戶所有函數共享 |
| 預留並發 | 按函數配置 | 保障關鍵函數不被其他函數搶佔 |
| 爆發並發(Burst Limit) | 500~3000(按區域) | 突發流量時的瞬時擴容上限 |
六、Lambda 與其他AWS 服務的黃金組合
最常見的Serverless 架構模式
使用者請求↓ API Gateway(HTTPS 端點) ↓ Lambda(業務邏輯處理) ├──→ DynamoDB(資料持久化) ├──→ S3(檔案儲存) ├──→ SQS(非同步任務佇列) └──→ SNS(訊息通知)
典型出海業務場景:
| 場景 | Lambda 用途 | 搭配服務 |
|---|---|---|
| 獨立站訂單處理 | 接收訂單、校驗、寫庫 | API GW + DynamoDB + SQS |
| 圖片/影片處理 | 上傳後自動壓縮、打浮水印 | S3 觸發+ S3 存儲 |
| 定時數據報告 | 每日拉取廣告數據匯總 | EventBridge 定時觸發+ S3/郵件 |
| AI 推理接口 | 呼叫Bedrock/SageMaker | API GW + Bedrock |
結論:Lambda 適合你的業務嗎?
Lambda 不是萬能的,但對於以下特徵的工作負載,它是最佳解:
✅ 適合Lambda:
- 請求量波動大(低谷幾乎為零)
- 單次執行時間短(< 15 分鐘)
- 無狀態處理邏輯
- 事件驅動型任務
❌ 不適合Lambda:
- 需要維持長連線(WebSocket 需配合API Gateway)
- 執行時間> 15 分鐘(以ECS Fargate 取代)
- 需要大量本機磁碟I/O(/tmp 上限10GB)
☁️ 想把現有後端遷移到Serverless 架構?
aws-oncloudai.com 提供免費的AWS 架構評估,協助出海企業找到最合適的雲端原生方案,實現成本降低與彈性提升。
本文由OnCloud AI 技術團隊撰寫| aws-oncloudai.com 專注於協助出海企業建構高效、低成本的AWS 雲端架構

