返回首頁AWS

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

20 min 分鐘閱讀

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.js18.x, 20.x, 22.x最熱門選擇
Python3.9, 3.10, 3.11, 3.12資料處理常用
Java11, 17, 21企業應用
.NET6, 8C# 開發者
Go1.x高效能需求
Ruby3.2, 3.3Ruby 開發者
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 MB10 秒
資料處理1024-2048 MB1-5 分鐘
圖片處理2048-3008 MB1-3 分鐘
機器學習推論4096-10240 MB1-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 秒

減少冷啟動影響:

  1. 使用較輕量的 Runtime(Node.js、Python)
  2. 減少部署套件大小
  3. 使用 Provisioned Concurrency(付費)
  4. 保持函式「溫暖」(定期呼叫)

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 接收端

設定方式:

  1. 建立 API Gateway(REST 或 HTTP API)
  2. 建立路由和方法
  3. 整合後端選 Lambda
  4. 部署 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)
IoTIoT 設備事件
Alexa語音助理技能

Lambda 建立教學

以下是建立第一個 Lambda 函式的完整步驟。

步驟一:登入 AWS Console

  1. 前往 AWS Console
  2. 搜尋「Lambda」,點擊進入

步驟二:建立函式

  1. 點擊「Create function」
  2. 選擇「Author from scratch」

基本資訊:

  • Function name:my-first-lambda
  • Runtime:Python 3.12
  • Architecture:x86_64

權限:

  • 選擇「Create a new role with basic Lambda permissions」
  1. 點擊「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」儲存變更。

步驟四:測試函式

  1. 點擊「Test」標籤
  2. 建立測試事件:
{
  "queryStringParameters": {
    "name": "CloudInsight"
  }
}
  1. 點擊「Test」執行
  2. 查看執行結果:
{
  "statusCode": 200,
  "headers": {
    "Content-Type": "application/json"
  },
  "body": "{\"message\": \"Hello, CloudInsight!\"}"
}

步驟五:設定觸發器(API Gateway)

  1. 點擊「Add trigger」
  2. 選擇「API Gateway」
  3. 選擇:
    • API type:HTTP API
    • Security:Open
  4. 點擊「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 冷啟動怎麼解決?

  1. 選擇較輕量的 Runtime(Python、Node.js)
  2. 減少依賴套件大小
  3. 使用 Provisioned Concurrency(付費)
  4. 定期呼叫保持「溫暖」(非正式做法)

Lambda 可以跑超過 15 分鐘嗎?

不行。如果任務需要更長時間:

  • 拆分成多個 Lambda(Step Functions 協調)
  • 改用 EC2 或 Fargate
  • 使用 AWS Batch

Lambda 如何存取 VPC 資源?

在 Lambda 設定 VPC、子網路和安全群組。但注意:

  • 冷啟動時間會增加
  • 需要 NAT Gateway 才能存取網際網路
  • 考慮使用 VPC Endpoint 存取 AWS 服務

下一步

Lambda 開啟了無伺服器架構的大門。掌握 Lambda,你就能建構更有彈性、更省成本的雲端應用。

建議的學習路徑:

  1. 實作:建立一個簡單的 API(API Gateway + Lambda + DynamoDB)
  2. 事件驅動:設定 S3 觸發 Lambda 處理檔案
  3. 排程任務:用 EventBridge 定時執行 Lambda
  4. 進階:學習 Step Functions 協調多個 Lambda

Serverless 架構規劃需要協助?

從 Lambda 函式設計、觸發器選擇到成本優化,Serverless 架構有很多細節需要考量。CloudInsight 團隊幫助過多家企業設計和優化無伺服器架構。

預約免費架構諮詢,讓我們幫你規劃最適合的 Serverless 方案。


延伸閱讀


插圖:無伺服器概念對比圖

場景描述: 無伺服器概念對比圖。左邊顯示傳統架構(用戶需管理的伺服器圖示,標示「你管理」),右邊顯示 Lambda 架構(只有程式碼圖示,伺服器部分標示「AWS 管理」)。中間用虛線分隔,強調責任分界。使用簡潔的圖示風格。

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: lambda-serverless-concept

插圖:Lambda 費用計算示意圖

場景描述: Lambda 費用計算示意圖。以公式視覺化呈現:請求數 × 單價 + GB-秒 × 單價 = 總費用。下方用三個範例情境(輕量 API、資料處理、高流量 API)展示實際計算結果。強調 Free Tier 的額度。

視覺重點:

  • 主要內容清晰呈現

必須出現的元素:

  • 依據描述中的關鍵元素

需要顯示的中文字:

顏色調性: 專業、清晰

避免元素: 抽象圖形、齒輪、發光特效

Slug: lambda-pricing-calculator


需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章