撰寫與測試 Lambda 程式碼

使用 AWS Lambda 的無伺服器應用程式

Claudio Canales

Senior DevOps Engineer

為何測試與記錄日誌很重要

  • 真實事件雜亂又多樣。
  • 測試可先於使用者抓出錯誤。
  • 日誌是除錯的「黑盒子」。

測試就像消防演練

使用 AWS Lambda 的無伺服器應用程式

一個要記住的流程

核心流程工具組

  • 事件進來 → 處理器執行 → 回應出去。
  • 用日誌與測試事件來除錯。

Lambda 觸發流程

使用 AWS Lambda 的無伺服器應用程式

日誌去哪裡:CloudWatch Logs

  • Lambda 預設會把 print() 輸出與錯誤寫到那裡。
  • CloudWatch Logs 是 AWS 的服務日誌儲存。
  • 日誌群組形式如 /aws/lambda/<function-name>

處理器寫入 CloudWatch Logs

使用 AWS Lambda 的無伺服器應用程式

處理器契約

  • event 是輸入的負載。
  • context 提供執行時中繼資料。
  • 傳回值會成為函式回應。

處理器契約:event + context -> response

使用 AWS Lambda 的無伺服器應用程式

逐步講解:event 與 context

def lambda_handler(event, context):
    request_id = context.aws_request_id
    time_left = context.get_remaining_time_in_millis()
    return {"statusCode": 200}

event 與 context 標註

使用 AWS Lambda 的無伺服器應用程式

安全解析輸入

  • 選用欄位用 event.get()
  • 必要輸入要及早驗證。
  • 對遺漏欄位回傳清楚錯誤。

安全解析並及早驗證

使用 AWS Lambda 的無伺服器應用程式

逐步講解:驗證必要輸入

def lambda_handler(event, context):
    if not event.get("name"):
        return {"statusCode": 400, "body": "Missing: name"}
    return {"statusCode": 200, "body": f"Hello, {event.get('name')}!"}

驗證分支:400 與 200

使用 AWS Lambda 的無伺服器應用程式

要測試的邊界情況

  • 遺漏欄位(空 JSON)。
  • 型別錯誤(name 是數字)。
  • 多餘欄位或超大負載。

邊界情況負載範例

使用 AWS Lambda 的無伺服器應用程式

回傳可預期的回應

  • 保持一致的回應結構。
  • statusCode 表示成功或錯誤。
  • 回應本文用 JSON 編碼。

回應外層:statusCode + JSON body

使用 AWS Lambda 的無伺服器應用程式

逐步講解:回傳 JSON

import json

def lambda_handler(event, context):
    body = {"message": "ok"}
    return {"statusCode": 200, "body": json.dumps(body)}

json.dumps:dict 轉 JSON 文字

使用 AWS Lambda 的無伺服器應用程式

記錄與追蹤

  • 記錄關鍵欄位(必要時用 JSON)。
  • 加入 context.aws_request_id 便於追蹤。
  • 避免記錄機密或個資。
  • 預設 Lambda 日誌會進到 CloudWatch Logs。

記錄最佳實務

使用 AWS Lambda 的無伺服器應用程式

逐步講解:結構化記錄

import json

def lambda_handler(event, context):
    print(json.dumps({"request_id": context.aws_request_id, "event": event}))
    return {"statusCode": 200}

結構化記錄的 JSON 行

使用 AWS Lambda 的無伺服器應用程式

用主控台事件進行測試

  • 建立具名測試事件。
  • 測試順利路徑與邊界情況。
  • 每次執行後檢視回應與日誌。

主控台測試事件

使用 AWS Lambda 的無伺服器應用程式

簡單的除錯循環

  • 做小幅程式碼變更。
  • 部署後執行測試事件。
  • 讀取回應與 CloudWatch Logs。

除錯循環

使用 AWS Lambda 的無伺服器應用程式

一起來練習吧!

使用 AWS Lambda 的無伺服器應用程式

Preparing Video For Download...