使用 Lambda 擴充功能擴充功能擴充 - AWS Lambda

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

使用 Lambda 擴充功能擴充功能擴充

您可以使用 Lambda 擴展功能來增強 Lambda 函數。例如,使用 Lambda 擴展將函數與您偏好的監控、可觀度、安全性和治理工具整合。您可以從 AWS Lambda 合作夥伴提供的廣泛工具集中選擇,也可以建立自己的 Lambda 擴展

Lambda 支援外部和內部擴展。外部延伸項目會在執行環境中作為獨立的處理序執行,並在完全處理函式叫用之後繼續執行。由於延伸項目會以單獨的程序執行,因此您可以使用與函數不同的語言來撰寫。所有 Lambda 執行期 支援延伸。

內部延伸項目會執行作為執行階段程序的一部分。您的函式透過使用包裝函式指令碼或進行中的機制存取內部延伸項目,例如 JAVA_TOOL_OPTIONS。如需詳細資訊,請參閱修改執行階段環境

您可以使用 Lambda 主控台、() 或基礎架構即程式碼 AWS Command Line Interface (IaC AWS CLI) 服務和工具 (例如 AWS CloudFormation、 AWS Serverless Application Model (AWS SAM) 和 Terraform,將擴充功能新增至函數。

您需要依據延伸項目所耗用的執行時間付費 (以 1 毫秒為單位)。安裝自己的延伸項目不需花費任何費用。如需延伸項目的定價資訊,請參閱AWS Lambda 定價。如需合作夥伴延伸項目的定價資訊,請參閱合作夥伴的網站。如需官方合作夥伴擴充功能清單,請參閱 AWS Lambda 擴充功能合

如需擴充功能的教學課程以及如何搭配 Lambda 函數來使用,請參閱 AWS Lambda 擴充功能研討會

執行環境

Lambda 會在執行環境中叫用您的函數,該環境可提供安全且隔離的執行時間環境。執行環境會管理執行函數所需的資源,並為函數的執行時間和延伸項目提供生命週期支援。

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

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

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

    Lambda SnapStart 啟動的情況下,發佈函數版本時會發生 Init 階段。Lambda 會儲存初始化執行環境的記憶體和磁碟狀態快照、保留加密的快照,並快取以進行低延遲存取。如果您有 beforeCheckpoint 執行階段掛鉤,那麼程式碼會在 Init 階段結束時執行。

  • Restore(SnapStart 僅限):當您第一次叫用SnapStart函數且函數擴充時,Lambda 會從持續快照繼續新的執行環境,而不是從頭開始初始化函數。如果您有 afterRestore() 執行階段掛鉤,程式碼會在 Restore 階段結束時執行。您需支付 afterRestore() 執行階段掛鉤期間的費用。執行階段 (JVM) 必須載入,而afterRestore()執行階段掛接必須在逾時限制 (10 秒) 內完成。否則,你會得到一個 SnapStartTimeoutException. Restore 階段完成時,Lambda 會調用函數處理常式 (調用階段)。

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

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

Init 階段期間,Lambda 會將包含擴展功能的圖層擷取到執行環境中的 /opt 目錄。Lambda 在 /opt/extensions/ 目錄中尋找擴展功能,將每個檔案解譯為啟動擴展的可執行引導程序,並平行啟動所有擴展。

對效能和資源的影響

函式延伸項目的大小會計入部署套件的大小限制。針對 .zip 封存檔,函數和所有延伸項目解壓縮後的總大小不能超過解壓縮後 250 MB 的部署套件大小限制。

擴充功能可能會影響函數的效能,因為它們會共用函數資源CPU,例如記憶體和儲存。例如,如果延伸項目執行運算密集的作業,您可能會看到函數的執行持續時間增加。

在 Lambda 叫用函數之前,每個擴展必須完成其初始化。因此,耗用大量初始化時間的延伸可能會增加函式叫用的延遲。

若要測量延伸項目在函式執行後所花費的額外時間,您可以使用 PostRuntimeExtensionsDuration 函式指標。若要測量使用的記憶體的增加情況,您可以使用 MaxMemoryUsed 指標。若要了解特定延伸項目的影響,您可以並排執行不同版本的函式。

許可

延伸項目可存取與函式相同的資源。因為延伸項目是在與函式相同的環境中執行的,所以許可會在函式和延伸項目之間共用。

對於 .zip 檔案封存,您可以建立 AWS CloudFormation 範本,以簡化將相同副檔名組態 AWS Identity and Access Management (包括 (IAM) 權限 — 附加至多個函數的工作。