本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda 受管執行個體的 Python 執行時間
Lambda 執行時間使用多個 Python 程序來處理並行請求。每個並行請求會在單獨的程序中執行,具有自己的記憶體空間和初始化。每個程序一次可同步處理一個請求。程序不會直接共用記憶體,因此全域變數、模組層級快取和單調物件會在並行請求之間隔離。
並行組態
Lambda 傳送至每個執行環境的並行請求數目上限是由函數組態中的 PerExecutionEnvironmentMaxConcurrency設定所控制。這是選用設定,預設值會根據執行時間而有所不同。對於 Python 執行時間,預設值為每個 vCPU 16 個並行請求,或者您可以設定自己的值。此值也會決定 Python 執行時間所使用的程序數目。Lambda 會根據每個執行環境的容量,自動調整並行請求的數量,直到設定的最大值為止,以吸收這些請求。
重要
使用程序型並行表示每個執行期工作者程序都會執行自己的初始化。總記憶體用量等於每個程序的記憶體乘以並行程序的數量。如果您要載入大型程式庫或資料集並具有高並行性,則記憶體使用量會很大。根據您的工作負載,您可能需要調整 CPU-to-memory的比率,或使用較低的並行設定,以避免超過可用的記憶體。您可以使用 CloudWatch 中的 MemoryUtilization 指標來追蹤記憶體耗用量。
為多並行建置函數
由於以程序為基礎的多並行模型,使用 Python 執行時間的 Lambda 受管執行個體函數不會從多個調用同時存取記憶體內資源。您不需要為記憶體內並行安全性套用編碼實務。
共用 /tmp 目錄
/tmp 目錄會在執行環境中所有並行請求之間共用。同時寫入相同檔案可能會導致資料損毀,例如,如果另一個程序覆寫檔案。若要解決此問題,請實作共用檔案的檔案鎖定,或針對每個程序或每個請求使用唯一的檔案名稱,以避免衝突。請記得清除不需要的檔案,以避免耗盡可用空間。
日誌
日誌交錯 (來自在日誌中交錯之不同請求的日誌項目) 在多並行系統中是正常的。
使用 Lambda 受管執行個體的函數一律使用進階記錄控制所引進的結構化 JSON 日誌格式。此格式包含 requestId,允許日誌項目與單一請求相關聯。當您從 Lambda 中的 Python 標準程式庫使用logging模組時, requestId 會自動包含在每個日誌項目中。如需詳細資訊,請參閱搭配 Python 使用 Lambda 進階記錄控制。
請求內容
使用 context.aws_request_id 存取目前請求的請求 ID。
透過 Python 執行時間,您可以使用 _X_AMZN_TRACE_ID環境變數,透過 Lambda 受管執行個體存取 X-Ray 追蹤 ID。使用 AWS SDK 時,會自動傳播 X-Ray 追蹤 ID。
初始化和關閉
每個程序會初始化一次函數。如果您的函數在初始化期間發出日誌,您可能會看到重複的日誌項目。
對於具有擴充功能的 Lambda 函數,執行環境會在關閉期間發出 SIGTERM 訊號。延伸項目使用此訊號來觸發清除任務,例如排清緩衝區。您可以訂閱 SIGTERM 事件來觸發函數清除任務,例如關閉資料庫連線。若要進一步了解執行環境生命週期,請參閱了解 Lambda 執行環境生命週期。
相依性版本
Lambda 受管執行個體需要下列最低套件版本:
-
適用於 AWS Lambda (Python) 的 Powertools:3.23.0 版或更新版本
Lambda 的 Powertools AWS (Python)
Powertools for AWS Lambda (Python) 與 Lambda 受管執行個體相容,並提供用於記錄、追蹤、指標等的公用程式。如需詳細資訊,請參閱 Powertools for AWS Lambda (Python)