設定函數的預留並行 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定函數的預留並行

在 Lambda 中,並行是函數目前正在處理的傳輸中請求數目。有兩種類型的並行控制項可用:

  • 預留並行 – 它是分配給函數的並行執行個體數量上限。當某個函數具有預留並行時,其他函數都無法使用該並行。預留並行有助於確保最重要的函數始終有足夠的並行數量來處理傳入請求。設定函數的預留並行不會產生額外費用。

  • 佈建並行 – 它是您分配給函數的預先初始化執行環境數目。這些執行環境已準備好立即回應傳入的函數請求。佈建並行有助於減少函數的冷啟動延遲。設定佈建並行會對您的 AWS 帳戶 帳戶產生額外費用。

本主題詳細說明如何管理及設定預留並行。如需這兩種並行控制項的概念性概觀,請參閱預留並行與佈建並行。如需有關設定佈建並行的資訊,請參閱 設定函數的佈建並行

注意

連結至 Amazon MQ 事件來源映射的 Lambda 函數具有預設並行上限。若使用 Apache Active MQ,並行執行個體數量上限為 5 個。若使用 ARabbit MQ,並行執行個體數量上限為 1 個。為函數設定保留或佈建並行不會改變這些上限。若要在使用 Amazon MQ 時要求增加預設的並行上限,請聯絡 支援。

設定預留並行

您可以使用 Lambda 主控台或 Lambda API 設定函數的預留並行設定。

預留函數並行的方式 (主控台)
  1. 開啟 Lambda 主控台中的函數頁面

  2. 選擇要預留並行的函數。

  3. 選擇 Configuration (組態),然後選擇 Concurrency (並行)

  4. Concurrency (並行) 下,選擇 Edit (編輯)

  5. 選擇 Reserve concurrency (預留並行)。輸入要為函式預留的並行數量。

  6. 選擇儲存

您最多可以預留的數量為未預留帳戶並行數量減去 100 的值。剩餘的 100 個並行單位會用於未使用預留並行的函數。例如,如果您帳戶的並行上限為 1,000,則您無法為單一函數預留全部 1,000 個並行單位。

如果您嘗試預留過多的並行,系統就會發生錯誤。

為函數預留並行會影響其他函數可用的並行集區。例如,如果您為 function-a 預留 100 個並行單位,則帳戶中的其他函數必須共用剩餘的 900 個並行單位 (即使 function-a 未使用全部 100 個預留並行單位也一樣)。

若要刻意節流函數,請將其預留並行設為 0。此動作會防止函數處理任何事件,直到您移除限制為止。

若要透過 Lambda API 設定預留並行,請使用下列 API 操作。

例如,若要透過 AWS Command Line Interface (CLI) 來設定預留並行,請使用 put-function-concurrency 命令。下列命令會為名為 my-function 的函數預留 100 個並行單位:

aws lambda put-function-concurrency --function-name my-function \ --reserved-concurrent-executions 100

您應該會看到類似以下的輸出:

{ "ReservedConcurrentExecutions": 100 }

準確估計函數所需的預留並行

如果函數目前正在為處理流量,您可以使用 CloudWatch 指標輕鬆檢視其並行指標。具體而言,ConcurrentExecutions 指標會顯示帳戶中每個函數的並行調用次數。

本圖顯示函數的並行隨時間變化的情形。

前一張圖表顯示此函數一天平均可處理 5 到 10 個並行請求,峰值時段則為 20 個請求。假設帳戶中還有很多其他函數。如果此函數對您的應用程式很重要,且您不想要捨棄任何請求,則請將預留並行設為 20 (或以上)。

或者,回想一下您也可以使用以下公式計算並行

Concurrency = (average requests per second) * (average request duration in seconds)

將每秒平均請求乘以平均請求持續時間 (以秒為單位),可讓您粗略估計需要預留多少並行。您可以使用 Invocation 指標來預估每秒平均請求數,並使用 Duration 指標預估平均請求持續時間 (以秒為單位)。如需詳細資訊,請參閱將 CloudWatch 指標與 Lambda 搭配使用

您應熟悉您的上游和下游輸送量限制。雖然 Lambda 函數可隨負載進行無縫擴展,但上游和下游相依性可能不具有相同的輸送量能力。如果您需要限制函數可擴展的高度,可以在函數中設定預留並行。