設定 Lambda 函式

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

Claudio Canales

Senior DevOps Engineer

為何設定很重要

  • 同樣的程式碼,在不同設定下表現大不同。
  • 設定影響效能、成本與安全。
  • 目標是在開發與生產環境都有可預期的行為。

相同程式碼,不同設定

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

程式碼 vs. 設定

程式碼套件

  • 程式碼套件
  • 處理器邏輯+相依套件。
  • 變更需重新部署。

函式設定

  • 函式設定
  • 記憶體、逾時、環境變數。
  • 執行角色+ Layers。
使用 AWS Lambda 的無伺服器應用程式

你可控的設定旋鈕

  • Runtime+handler:Lambda 執行的程式碼。
  • 記憶體+逾時:影響效能、成本與安全。
  • 環境變數:不硬編於程式的設定。
  • 執行角色:存取 AWS API 的權限。
  • Layers:跨函式共用相依項。

Lambda 設定旋鈕

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

Runtime 與 handler 基礎

  • Runtime=語言環境(例如 Python)。
  • Handler=Lambda 呼叫的進入點。
  • Handler 格式:file.function
  • 範例:lambda_function.lambda_handler

處理器字串解析

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

Handler 字串:可能出錯的點

# lambda_function.py
def lambda_handler(event, context):
    return {"statusCode": 200}

先匯入再呼叫 handler

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

執行角色(IAM)

  • IAM=Identity and Access Management(權限)。
  • 執行角色決定你的函式能做什麼。
  • 它控制你的程式碼可呼叫哪些 AWS API。

執行角色如門禁卡

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

什麼是 Lambda layer?

  • Layer 是你附加到函式的 ZIP。
  • Lambda 會在執行時將 layer 檔案提供於 /opt
  • 用於共用函式庫與常用工具。
  • Layer 更新一次,多個函式可重複使用。

Layer 掛載於 /opt

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

執行時層的位置

  • 你的函式程式碼掛載於 /var/task
  • 你附加的 layers 掛載於 /opt
  • Lambda 也提供暫存資料夾 /tmp

執行時資料夾:/var/task、/opt、/tmp

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

記憶體也影響 CPU

  • 記憶體增加 → CPU 也增加。
  • 可縮短 CPU 受限任務的時間。
  • 總成本取決於時間×記憶體。

記憶體提升帶動 CPU

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

用量測調校記憶體

  • 先用合理預設(例如 256 MB)。
  • 以真實事件測試。
  • 比較不同記憶體下的時間與成本。

記憶體掃描:量測時間與成本

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

逾時與安全執行

  • 逾時可停止失控的執行。
  • 長任務前先檢查剩餘時間。
  • 適當時快速失敗並重試。

逾時如安全計時器

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

示範:檢查剩餘時間

def lambda_handler(event, context):
    time_left = context.get_remaining_time_in_millis()
    if time_left < 500:
        raise TimeoutError("Not enough time left")
    return {"statusCode": 200}

以剩餘時間做保護

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

環境變數

  • 設定與程式碼分離。
  • 區分 dev/test/prod 設定。
  • 機密值用 Secrets Manager 管理。

以環境變數調整行為

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

示範:讀取環境變數

import os

STAGE = os.getenv("STAGE", "dev")
LOG_LEVEL = os.getenv(
    "LOG_LEVEL", "INFO"
)

預設值讓本機測試更安全

  • 匯入 os 以存取環境變數。
  • os.getenv 回傳值或預設值。
使用 AWS Lambda 的無伺服器應用程式

常見設定陷阱

  • 在程式中硬編 stage 值。
  • 逾時過低或缺少 IAM 權限。
  • 將機密放在純環境變數。

常見陷阱與經驗法則

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

一起來練習吧!

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

Preparing Video For Download...