設定 AWS Lambda 的生產環境

在 AWS 上部署應用程式

Dunieski Otano

Amazon Web Services Solutions Architect

測試環境可行

  • 函式通過所有測試
  • 上線後逾時並被節流
  • 程式碼沒問題,設定才是關鍵

無伺服器函式在測試中通過,但在生產受阻,正在調整記憶體與逾時計量表

在 AWS 上部署應用程式

生產環境關鍵的 Lambda 設定

中央是 Lambda 標誌,向外連到四個生產設定:記憶體含 CPU 比例調整、逾時鐘圖、暫存儲存空間、並行度顯示平行執行個體

  • Memory:同時按比例提升 CPU 與網路
  • Timeout:達到秒數上限就終止函式
  • Ephemeral storage:/tmp 的暫存空間
  • Concurrency:同時可執行的數量
在 AWS 上部署應用程式

記憶體規模與 CPU 的關聯

  • 記憶體越多=CPU 成比例提高
  • CPU 受限的函式在較高記憶體下可更快
  • 執行更快可能代表成本更低
  • 用測試來找最適配置,而非猜測

記憶體對成本曲線:記憶體增加時持續時間大幅下降後趨緩,總成本呈 U 形,中間標示最便宜點

在 AWS 上部署應用程式

並行度:保留 vs 預置


保留並行度

  • 限制同時執行的最大值
  • 保護下游系統與其他函式

預置並行度

  • 預先暖機執行個體,避免冷啟動
  • 適用低延遲、面向使用者的函式
在 AWS 上部署應用程式

封裝設定與共用程式碼

  • Environment variables:依環境設定參數
  • Layers:跨函式共用程式與相依項
  • Extensions:伴隨函式執行的工具
  • 設定不要放進部署套件

Lambda 封裝選項:環境變數保存外部設定、layers 供多個函式共用函式庫、extensions 伴隨處理常式執行以供監控或機密管理

在 AWS 上部署應用程式

將 Lambda 連接到 VPC

Lambda 透過私有子網中的 ENI 連到私有 VPC,由安全性群組控管對外連線,並透過 NAT 閘道取得網際網路連通

  • 將 Lambda 附掛到私有子網以存取內部資源
  • Lambda 會在你的 VPC 建立ENI
  • 安全性群組決定可連到哪些目標
  • 對外需經由 NAT 或 VPC 端點
在 AWS 上部署應用程式

用 destinations 與 DLQ 處理失敗

  • 非同步呼叫失敗時會自動重試
  • Lambda Destinations:依 onSuccess/onFailure 分流
  • Dead-letter queue:收集最終仍失敗的事件
  • 失敗事件不可悄悄丟棄

Lambda 非同步失敗處理:重試迴圈後導向 Lambda Destinations 的 onSuccess 與 onFailure 分支,並以 dead-letter queue 收納用盡重試的事件

在 AWS 上部署應用程式

一起來練習吧!

在 AWS 上部署應用程式

Preparing Video For Download...