AWS Lambda 入門指南:無伺服器運算教學、定價、使用場景【2025】

AWS Lambda 入門指南:無伺服器運算教學、定價、使用場景【2025】
不想管伺服器?用 Lambda。上傳程式碼,AWS 幫你執行。沒有請求就不收錢,有請求自動擴展到幾千個並行。每月 100 萬次請求免費,超過的部分每百萬次只要 0.2 美元。
這篇文章會帶你認識 Lambda——從它是什麼、怎麼收費、支援什麼語言,到實際建立一個 Lambda 函式的完整步驟。
什麼是 AWS Lambda?
Lambda 是 AWS 的無伺服器運算服務。你只要上傳程式碼,Lambda 會在有請求時自動執行,執行完畢就釋放資源。
無伺服器(Serverless)的意思
「無伺服器」不是真的沒有伺服器,而是你不用管伺服器。
| 面向 | 傳統方式(EC2) | 無伺服器(Lambda) |
|---|---|---|
| 伺服器管理 | 你要自己設定、維護 | AWS 全部處理 |
| 擴展 | 手動或設定 Auto Scaling | 自動,無需設定 |
| 付費方式 | 執行個體運行時間 | 實際執行的毫秒數 |
| 閒置成本 | 有(即使沒流量也收錢) | 無(沒請求不收錢) |
| 容量規劃 | 需要預估流量 | 不需要 |
Lambda 的運作原理
觸發事件 → Lambda 啟動容器 → 執行你的程式碼 → 回傳結果 → 釋放資源
│ │ │ │
│ (冷啟動) (計費開始) (計費結束)
│
HTTP 請求、S3 上傳、排程、訊息佇列...
Lambda 在背後使用 AWS 自己的容器技術 Firecracker(也用在 Fargate),可以在毫秒內啟動執行環境。
什麼時候該用 Lambda?
適合 Lambda:
- 事件驅動的任務(檔案上傳處理、webhook)
- API 後端(搭配 API Gateway)
- 排程任務(每天跑一次的 cron job)
- 資料處理管線
- 聊天機器人後端
不適合 Lambda:
- 需要長時間運行的程式(超過 15 分鐘)
- 需要持久連線的應用(WebSocket 伺服器)
- 高效能、低延遲要求極高的應用
- 需要 GPU 的機器學習訓練
Lambda vs EC2:如何選擇?
| 考量因素 | 選 Lambda | 選 EC2 |
|---|---|---|
| 執行時間 | < 15 分鐘 | 可能很長 |
| 請求模式 | 不穩定、有尖峰 | 穩定持續 |
| 維運能力 | 不想管伺服器 | 有能力維運 |
| 成本考量 | 請求量低或不穩定 | 持續高負載 |
| 特殊需求 | 無 | 需要 GPU、特殊硬體 |
經驗法則:
- 如果每月執行時間 < 100 萬 GB-秒,Lambda 通常更便宜
- 如果負載穩定且 CPU 利用率高,EC2 Reserved 可能更划算
Lambda 核心概念
函式與執行環境
Lambda 函式 是你上傳的程式碼,包含:
- Handler:進入點函式
- 程式碼:你的業務邏輯
- 依賴套件:需要的 libraries
執行環境 是 Lambda 用來跑你程式碼的容器,包含:
- 作業系統(Amazon Linux 2)
- Runtime(例如 Python 3.12、Node.js 20)
- 你的程式碼和依賴
支援的程式語言
Lambda 原生支援以下 Runtime:
| Runtime | 版本 | 說明 |
|---|---|---|
| Node.js | 18.x, 20.x, 22.x | 最熱門選擇 |
| Python | 3.9, 3.10, 3.11, 3.12 | 資料處理常用 |
| Java | 11, 17, 21 | 企業應用 |
| .NET | 6, 8 | C# 開發者 |
| Go | 1.x | 高效能需求 |
| Ruby | 3.2, 3.3 | Ruby 開發者 |
| Rust | 透過 Custom Runtime | 極致效能 |
使用其他語言:
- Custom Runtime:任何語言都可以
- Container Image:打包成 Docker 映像檔
記憶體與執行時間配置
記憶體(Memory)
- 範圍:128 MB - 10,240 MB
- CPU 效能與記憶體成正比(1,769 MB ≈ 1 vCPU)
- 記憶體越大,價格越高
執行時間上限(Timeout)
- 範圍:1 秒 - 15 分鐘
- 超過時間會被強制終止
- 建議設定合理的 timeout,避免無限等待
配置建議:
| 場景 | 記憶體 | Timeout |
|---|---|---|
| 簡單 API 回應 | 256-512 MB | 10 秒 |
| 資料處理 | 1024-2048 MB | 1-5 分鐘 |
| 圖片處理 | 2048-3008 MB | 1-3 分鐘 |
| 機器學習推論 | 4096-10240 MB | 1-5 分鐘 |
並行執行(Concurrency)
Lambda 可以同時處理多個請求,每個請求用一個獨立的執行環境。
預設並行上限: 1,000(可申請提高)
Reserved Concurrency: 為特定函式保留並行配額
Provisioned Concurrency: 預先啟動執行環境,避免冷啟動
冷啟動(Cold Start)
當沒有現成的執行環境時,Lambda 需要啟動新環境,這叫「冷啟動」。
冷啟動時間:
- Node.js/Python:~200-500ms
- Java/.NET:~1-3 秒
- Container Image:~1-5 秒
減少冷啟動影響:
- 使用較輕量的 Runtime(Node.js、Python)
- 減少部署套件大小
- 使用 Provisioned Concurrency(付費)
- 保持函式「溫暖」(定期呼叫)
Lambda 定價模式
Lambda 的計費非常細緻,只算實際執行的時間。
計費項目
Lambda 費用 = 請求費 + 運算費 + (Provisioned Concurrency 費)
請求費用
每次呼叫 Lambda 都算一次請求。
價格:$0.20 / 百萬次請求
Free Tier:每月 100 萬次請求免費
運算費用
按「GB-秒」計費,也就是記憶體大小乘以執行時間。
價格:$0.0000166667 / GB-秒
Free Tier:每月 40 萬 GB-秒免費
計算方式:
GB-秒 = (記憶體 MB / 1024) × 執行時間(秒)
費用 = GB-秒 × 單價
費用計算範例
情境一:輕量 API
- 每月 500 萬次請求
- 記憶體 256 MB
- 平均執行時間 100ms
請求費 = (5,000,000 - 1,000,000) × $0.0000002 = $0.80
GB-秒 = 5,000,000 × 0.25 GB × 0.1 秒 = 125,000 GB-秒
運算費 = (125,000 - 400,000) = 0(未超過免費額度)
總計 ≈ $0.80/月
情境二:資料處理
- 每月 100 萬次請求
- 記憶體 1024 MB
- 平均執行時間 2 秒
請求費 = 0(未超過免費額度)
GB-秒 = 1,000,000 × 1 GB × 2 秒 = 2,000,000 GB-秒
運算費 = (2,000,000 - 400,000) × $0.0000166667 = $26.67
總計 ≈ $26.67/月
情境三:高流量 API
- 每月 1 億次請求
- 記憶體 512 MB
- 平均執行時間 200ms
請求費 = (100,000,000 - 1,000,000) × $0.0000002 = $19.80
GB-秒 = 100,000,000 × 0.5 GB × 0.2 秒 = 10,000,000 GB-秒
運算費 = (10,000,000 - 400,000) × $0.0000166667 = $160.00
總計 ≈ $179.80/月
Provisioned Concurrency 費用
如果需要避免冷啟動,可以使用 Provisioned Concurrency:
額外費用:$0.000004646 / GB-秒(持續計費)
以 512 MB、10 個 Provisioned Concurrency 為例:
- 每小時:0.5 × 10 × 3600 × $0.000004646 = $0.084
- 每月約 $60
通常只在對延遲極度敏感的場景使用。
Lambda 觸發器介紹
Lambda 是事件驅動的,需要「觸發器」來啟動執行。
API Gateway
最常見的觸發方式,把 Lambda 變成 HTTP API。
用戶 → HTTP 請求 → API Gateway → Lambda → 回應
使用場景:
- RESTful API
- GraphQL API
- Webhook 接收端
設定方式:
- 建立 API Gateway(REST 或 HTTP API)
- 建立路由和方法
- 整合後端選 Lambda
- 部署 API
S3 Event
當 S3 Bucket 發生事件(上傳、刪除)時觸發 Lambda。
用戶上傳檔案 → S3 → 觸發 Lambda → 處理檔案
使用場景:
- 圖片縮圖產生
- 檔案格式轉換
- 資料匯入處理
- 病毒掃描
可觸發的事件:
s3:ObjectCreated:*(任何建立)s3:ObjectCreated:Put(PUT 上傳)s3:ObjectCreated:Post(POST 上傳)s3:ObjectRemoved:*(任何刪除)
👉 實作範例:AWS S3 完整教學
EventBridge(CloudWatch Events)
排程執行或根據 AWS 服務事件觸發。
使用場景:
- 定時任務(每天備份、每小時清理)
- AWS 服務事件反應(EC2 狀態變更)
- 自訂事件匯流排
排程範例:
rate(5 minutes):每 5 分鐘rate(1 hour):每小時cron(0 8 * * ? *):每天早上 8 點
SQS / SNS
從訊息佇列或通知服務觸發。
SQS(Simple Queue Service):
Producer → SQS Queue → Lambda(批次處理)
SNS(Simple Notification Service):
Publisher → SNS Topic → Lambda(fan-out)
使用場景:
- 非同步任務處理
- 解耦系統元件
- 批次處理大量訊息
DynamoDB Streams
當 DynamoDB 表格有變更時觸發。
應用程式 → 寫入 DynamoDB → Stream → Lambda
使用場景:
- 資料同步到其他系統
- 觸發後續工作流程
- 建立搜尋索引
其他觸發器
| 觸發器 | 使用場景 |
|---|---|
| Kinesis | 即時串流資料處理 |
| Cognito | 用戶認證事件 |
| CloudFront | 邊緣運算(Lambda@Edge) |
| IoT | IoT 設備事件 |
| Alexa | 語音助理技能 |
Lambda 建立教學
以下是建立第一個 Lambda 函式的完整步驟。
步驟一:登入 AWS Console
- 前往 AWS Console
- 搜尋「Lambda」,點擊進入
步驟二:建立函式
- 點擊「Create function」
- 選擇「Author from scratch」
基本資訊:
- Function name:
my-first-lambda - Runtime:
Python 3.12 - Architecture:
x86_64
權限:
- 選擇「Create a new role with basic Lambda permissions」
- 點擊「Create function」
步驟三:撰寫程式碼
在 Code source 區塊,你會看到預設的 Hello World 程式:
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
參數說明:
event:觸發事件的資料(例如 HTTP 請求內容)context:執行環境資訊(剩餘時間、記憶體等)
修改為實用範例:
import json
def lambda_handler(event, context):
# 取得請求參數
name = event.get('queryStringParameters', {}).get('name', 'World')
# 處理邏輯
message = f'Hello, {name}!'
# 回傳結果
return {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps({
'message': message
})
}
點擊「Deploy」儲存變更。
步驟四:測試函式
- 點擊「Test」標籤
- 建立測試事件:
{
"queryStringParameters": {
"name": "CloudInsight"
}
}
- 點擊「Test」執行
- 查看執行結果:
{
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": "{\"message\": \"Hello, CloudInsight!\"}"
}
步驟五:設定觸發器(API Gateway)
- 點擊「Add trigger」
- 選擇「API Gateway」
- 選擇:
- API type:HTTP API
- Security:Open
- 點擊「Add」
完成後會得到一個 API endpoint URL,可以直接在瀏覽器測試:
https://xxxxx.execute-api.us-east-1.amazonaws.com/default/my-first-lambda?name=Test
步驟六:查看監控
在 Monitor 標籤可以看到:
- Invocations(呼叫次數)
- Duration(執行時間)
- Errors(錯誤次數)
- Throttles(節流次數)
Lambda 使用場景
圖片處理
用戶上傳圖片到 S3,Lambda 自動產生縮圖。
架構:
用戶 → S3 (uploads/) → Lambda → S3 (thumbnails/)
程式碼範例(Python):
import boto3
from PIL import Image
import io
s3 = boto3.client('s3')
def lambda_handler(event, context):
# 取得上傳的檔案資訊
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
# 下載原圖
response = s3.get_object(Bucket=bucket, Key=key)
image = Image.open(io.BytesIO(response['Body'].read()))
# 產生縮圖
image.thumbnail((200, 200))
# 上傳縮圖
buffer = io.BytesIO()
image.save(buffer, 'JPEG')
buffer.seek(0)
thumbnail_key = key.replace('uploads/', 'thumbnails/')
s3.put_object(Bucket=bucket, Key=thumbnail_key, Body=buffer)
return {'statusCode': 200}
API 後端
搭配 API Gateway 建立 REST API。
架構:
前端 → API Gateway → Lambda → DynamoDB
優勢:
- 不用管 server
- 自動擴展
- 只為實際請求付費
排程任務
每天定時執行的任務。
範例:每天清理過期資料
EventBridge 排程:cron(0 3 * * ? *)(每天凌晨 3 點)
import boto3
from datetime import datetime, timedelta
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('sessions')
def lambda_handler(event, context):
# 計算過期時間(7 天前)
expiry = datetime.now() - timedelta(days=7)
# 掃描並刪除過期資料
response = table.scan(
FilterExpression='created_at < :expiry',
ExpressionAttributeValues={':expiry': expiry.isoformat()}
)
for item in response['Items']:
table.delete_item(Key={'session_id': item['session_id']})
return {'deleted': len(response['Items'])}
資料處理管線
處理上傳的 CSV 檔案,轉換後存入資料庫。
架構:
用戶上傳 CSV → S3 → Lambda → 處理資料 → DynamoDB
Lambda 最佳實踐
效能優化
1. 減少部署套件大小
- 只包含必要的依賴
- 使用 Lambda Layer 共享依賴
- 考慮使用較小的 Runtime(如 Python)
2. 重用連線
# 在 handler 外初始化,可重用
import boto3
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('my-table')
def lambda_handler(event, context):
# 使用已初始化的連線
table.put_item(Item={...})
3. 選擇適當的記憶體
- 更多記憶體 = 更多 CPU
- 有時增加記憶體反而更便宜(執行更快)
錯誤處理
1. 使用結構化日誌
import json
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info(json.dumps({
'event': 'processing_started',
'request_id': context.aws_request_id
}))
2. 設定死信佇列(DLQ)
- 處理失敗的事件不會遺失
- 可以後續重新處理或分析
3. 實作重試邏輯
import time
def call_external_api(retry=3):
for attempt in range(retry):
try:
# 呼叫外部 API
return response
except Exception as e:
if attempt < retry - 1:
time.sleep(2 ** attempt) # 指數退避
else:
raise
安全性
1. 最小權限原則
- 只給 Lambda 需要的 IAM 權限
- 避免使用
*萬用字元
2. 使用環境變數存機密資訊
import os
api_key = os.environ['API_KEY']
3. 啟用 VPC(如需存取私有資源)
👉 進階設定:AWS VPC 入門教學
無伺服器架構適合你嗎?讓專家幫你評估
Lambda 不是萬能的。什麼時候該用 Lambda、什麼時候該用 EC2、什麼時候該用容器?這需要根據你的具體需求來判斷。
CloudInsight 團隊有豐富的 Serverless 架構經驗,預約免費諮詢,讓我們幫你設計最適合的架構。
常見問題
Lambda 可以連接資料庫嗎?
可以。但要注意連線管理:
- 使用 RDS Proxy 避免連線數過多
- DynamoDB 是更適合 Lambda 的選擇(HTTP 連線)
- 考慮使用 Aurora Serverless
Lambda 冷啟動怎麼解決?
- 選擇較輕量的 Runtime(Python、Node.js)
- 減少依賴套件大小
- 使用 Provisioned Concurrency(付費)
- 定期呼叫保持「溫暖」(非正式做法)
Lambda 可以跑超過 15 分鐘嗎?
不行。如果任務需要更長時間:
- 拆分成多個 Lambda(Step Functions 協調)
- 改用 EC2 或 Fargate
- 使用 AWS Batch
Lambda 如何存取 VPC 資源?
在 Lambda 設定 VPC、子網路和安全群組。但注意:
- 冷啟動時間會增加
- 需要 NAT Gateway 才能存取網際網路
- 考慮使用 VPC Endpoint 存取 AWS 服務
下一步
Lambda 開啟了無伺服器架構的大門。掌握 Lambda,你就能建構更有彈性、更省成本的雲端應用。
建議的學習路徑:
- 實作:建立一個簡單的 API(API Gateway + Lambda + DynamoDB)
- 事件驅動:設定 S3 觸發 Lambda 處理檔案
- 排程任務:用 EventBridge 定時執行 Lambda
- 進階:學習 Step Functions 協調多個 Lambda
Serverless 架構規劃需要協助?
從 Lambda 函式設計、觸發器選擇到成本優化,Serverless 架構有很多細節需要考量。CloudInsight 團隊幫助過多家企業設計和優化無伺服器架構。
預約免費架構諮詢,讓我們幫你規劃最適合的 Serverless 方案。
延伸閱讀
- AWS 完整指南:服務介紹、費用、證照、台灣資源全面解析
- AWS EC2 完整教學:執行個體類型、定價、實作指南
- AWS S3 完整教學:儲存類別、費用計算、實作指南
- AWS VPC 入門教學:虛擬私有雲架設、子網路、安全設定
插圖:無伺服器概念對比圖
場景描述: 無伺服器概念對比圖。左邊顯示傳統架構(用戶需管理的伺服器圖示,標示「你管理」),右邊顯示 Lambda 架構(只有程式碼圖示,伺服器部分標示「AWS 管理」)。中間用虛線分隔,強調責任分界。使用簡潔的圖示風格。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
lambda-serverless-concept
插圖:Lambda 費用計算示意圖
場景描述: Lambda 費用計算示意圖。以公式視覺化呈現:請求數 × 單價 + GB-秒 × 單價 = 總費用。下方用三個範例情境(輕量 API、資料處理、高流量 API)展示實際計算結果。強調 Free Tier 的額度。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述中的關鍵元素
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪、發光特效
Slug:
lambda-pricing-calculator
相關文章
AWS AI 服務完整指南:Bedrock、SageMaker、AI 證照介紹【2025】
AWS AI 服務完整解析,涵蓋 Bedrock 生成式 AI(Claude、Llama 模型)、SageMaker 機器學習平台、Kiro AI 開發工具,以及 AWS AI Practitioner 證照介紹與三大雲 AI 服務比較。
AWSAWS 證照完整攻略:2025 考試指南、準備方法、價值分析
AWS 證照值得考嗎?本文完整解析 2025 年 AWS 證照體系(12 張證照)、各證照適用對象、考試費用、準備方法、薪資影響,以及證照順序建議。
AWSAWS 完整指南:服務介紹、費用、證照、台灣資源全面解析【2025】
AWS 是什麼?本文完整解析 Amazon Web Services 核心服務(EC2、S3、Lambda)、費用計算、證照考試、台灣代理商與資源,以及與 Azure、GCP 的比較。