AWS Lambda 執行環境 - AWS Lambda

AWS Lambda 執行環境

Lambda 會在執行環境中叫用您的函數,該環境可提供安全且隔離的執行時間環境。執行環境會管理執行函式所需的資源。執行環境也會提供函式執行階段的生命週期支援,以及與函式相關聯的任何外部延伸項目

函數的執行時間會使用 Runtime API 與 Lambda 進行通訊。延伸項目會使用 Extensions API 與 Lambda 進行通訊。延伸項目還可以透過使用 Logs API 訂閱日誌,來接收函數的日誌訊息。


            執行環境的架構圖表。

當您建立 Lambda 函數時,您將指定組態資訊,例如您的函數允許的記憶體數量與執行時間上限。Lambda 會使用此資訊來設定執行環境。

函式的執行階段和每個外部延伸項目都是在執行環境中執行的程序。許可、資源、認證和環境變數會在函式和延伸項目之間共用。

Lambda 執行環境生命週期

執行環境的生命週期包含下列階段:

  • Init:在此階段中,Lambda 會使用設定的資源建立或解除凍結執行環境,下載函數程式碼和所有層,初始化所有擴展功能,初始化執行時間,然後執行函數的初始化程式碼 (主處理常式之外的程式碼)。此 Init 階段發生在第一次叫用期間,或者在函數叫用之前發生 (如果您已啟用佈建並行)。

    Init 階段分為三個子階段:Extension initRuntime init 以及 Function init。這些子階段可確保所有擴展功能和執行時間在函數程式碼執行之前完成其設定任務。

  • Invoke:在此階段中,Lambda 會叫用函數處理常式。函數執行完成之後,Lambda 會準備處理另一個函數叫用。

  • Shutdown:如果 Lambda 函數在一段時間內未收到任何叫用,就會觸發此階段。在 Shutdown 階段中,Lambda 會關閉執行時間、警示擴展功能以便它們完全停止,然後移除環境。Lambda 會傳送 Shutdown 事件到每個擴展功能,這會告訴擴展功能環境即將關閉。


            Init 階段後面是一個或多個函數叫用。沒有叫用請求時,Lambda 會啟動 SHutdown 階段。

每個階段都以 Lambda 傳送到執行階段和所有已註冊延伸項目的事件開始。執行時間和每個已註冊延伸項目都會透過傳送 Next API 請求來表示已完成。當執行時間和每個延伸項目已完成且沒有擱置的事件時,Lambda 凍結執行環境。

初始化階段

Init 階段中,Lambda 會執行三項任務:

  • 啟動所有延伸項目 (Extension init)

  • Bootstrap 執行時間 (Runtime init)

  • 執行該函式的靜態代碼 (Function init)

當執行階段和所有延伸項目透過傳送 Next API 請求發出訊號表示它們已準備就緒時,Init 階段便會結束。Init 階段限制為 10 秒。如果所有三項任務都未在 10 秒內完成,Lambda 會在第一次函數叫用時重試 Init 階段。

叫用階段

叫用 Lambda 函數以回應 Next API 請求時,Lambda 會將 Invoke 事件傳送至執行時間和每個延伸項目。

該函式的逾時設定會限制整個 Invoke 階段的持續時間。例如,如果您將函式逾時設定為 360 秒,則函式和所有延伸項目都需要在 360 秒內完成。請注意,沒有獨立的叫用後階段。持續時間是所有叫用時間 (執行階段 + 延伸項目) 的總和,直到函式和所有延伸項目完成執行後才會計算。

叫用階段在執行階段結束,所有延伸項目訊號都透過傳送 Next API 請求完成。

如果 Lambda 函數當機或在 Invoke 階段逾時,Lambda 會重設執行環境。重設的行為會與 Shutdown 事件一樣。首先,Lambda 會關閉執行時間。然後 Lambda 會將 Shutdown 事件傳送給每個已註冊外部延伸項目。事件會包括關閉的原因。如果另一個 Invoke 事件導致系統重複使用此執行環境,Lambda 會初始化執行時間和延伸項目,作為下一次叫用的一部分。

注意

在下一個初始化階段之前,Lambda 重設不會清除 /tmp 目錄內容。這種行為與一般關機階段一致。


            這是我的映像。

關閉階段

當 Lambda 即將關閉執行時間,它會將 Shutdown 事件傳送至每個已註冊外部延伸。延伸項目可以使用此時間進行最終清理工作。Shutdown 事件是對 Next API 請求的回應。

持續時間:整個 Shutdown 階段上限為 2 秒。如果執行時間或任何延伸項目沒有回應,Lambda 會透過訊號 (SIGKILL) 加以終止。

在函數和所有延伸項目完成之後,Lambda 會維護執行環境一段時間,並預期另一個函數叫用。實際上,Lambda 會凍結執行環境。再次叫用該函數時,Lambda 會解凍環境以供重複使用。重複使用執行環境具有下列含義:

  • 在函數處理常式方法外宣告的物件會保持初始化,於再次呼叫函數時提供額外的最佳化。例如,假設您的 Lambda 函數建立資料庫連線,而不是重建連線,那麼在後續呼叫時便會使用原始連線。建議您在程式碼中新增邏輯,在建立連線前先確認是否存在既有連線。

  • 每個執行環境都會在 /tmp 目錄中提供 512 MB 到 10,240 MB 的磁碟空間,增量為 1 MB。執行內容凍結時,目錄環境會凍結,所提供的暫時性可用於多重叫用。您可以新增額外的程式碼,確認快取是否具有您已儲存的資料。如需部署大小限制的詳細資訊,請參閱Lambda 配額

  • 如果 Lambda 重複使用執行環境,則會恢復由 Lambda 函數啟動且在函數結束時沒有完成的背景程序或回呼。請確定程式碼中的任何背景程序或回呼在程式碼存在前已完成。

在編寫函數程式碼時,請勿假設 Lambda 會自動重新使用執行環境以供後續函數叫用。其他因素可能影響對於 Lambda 建立新執行環境的需求,這可能導致未預期的結果,例如資料庫連線失敗。