本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行AWS Lambda函數
注意
AWS IoT Greengrass目前在 Windows 核心裝置上不支援此功能。
您可以將AWS Lambda函數匯入為AWS IoT Greengrass核心裝置上執行的元件。在以下情況下,您可能需要執行此操作:
-
您在 Lambda 函數中擁有要部署到核心裝置的應用程式程式碼。
-
您有想要在AWS IoT Greengrass V2核心裝置上執行的 AWS IoT Greengrass V1 應用程式。如需詳細資訊,請參閱 步驟 2:建立和部署 AWS IoT Greengrass V2 元件以移轉 AWS IoT Greengrass V1 應用程式。
Lambda 函數包括下列元件的相依性。當您匯入函數時,您不需要將這些元件定義為相依性。當您部署 Lambda 函數元件時,部署會包含這些 Lambda 元件相依性。
-
Lambda 啟動器元件 (
aws.greengrass.LambdaLauncher
) 會處理程序和環境組態。 -
Lambda 管理員元件 (
aws.greengrass.LambdaManager
) 會處理處理序間通訊和擴充。 -
Lambda 執行階段元件 (
aws.greengrass.LambdaRuntimes
) 會為每個受支援的 Lambda 執行階段提供成品。
要求
您的核心裝置和 Lambda 函數必須符合下列需求,才能在AWS IoT Greengrass核心軟體上執行函數:
-
您的核心裝置必須符合執行 Lambda 函數的需求。如果您希望核心裝置執行容器化 Lambda 函數,裝置必須符合要求才能執行。如需詳細資訊,請參閱 Lambda 函數需求。
-
您必須在核心裝置上安裝 Lambda 函數使用的程式設計語言。
提示
您可以建立安裝程式設計語言的元件,然後將該元件指定為 Lambda 函數元件的相依性。Greengrass 支持所 Lambda 支持的 Python,Node.js 和 Java 運行時的版本。Greengrass 不會對已淘汰的 Lambda 執行階段版本套用任何其他限制。您可以在上執行使用這些已取代執行階段的 Lambda 函數AWS IoT Greengrass,但無法在中AWS Lambda建立它們。如需 Lambda 執行階段AWS IoT Greengrass支援的詳細資訊,請參閱執行AWS Lambda函數。
設定函 Lambda 生命週期
Greengrass Lambda 函數生命週期會決定函數的啟動時間,以及它如何建立和使用容器。生命週期也決定AWS IoT Greengrass核心軟體如何保留函數處理常式之外的變數和預處理邏輯。
AWS IoT Greengrass支援隨需 (預設) 和長壽命週期:
-
隨需函數在調用時啟動,並在沒有任務要運行時停止。每次呼叫函式都會建立個別容器 (也稱為沙箱) 來處理呼叫,除非現有的容器可供重複使用。任何容器都可能會處理您傳送至函數的資料。
隨需函數的多個調用可以同時運行。
建立新容器時,不會保留您在函數處理常式外部定義的變數和預處理邏輯。
-
長壽命 (或固定) 功能會在AWS IoT Greengrass核心軟體啟動並在單一容器中執行時啟動。同一個容器會處理您傳送至函數的所有資料。
多個調用排隊,直到 AWS IoT Greengrass Core 軟件運行較早的調用。
每次呼叫處理常式時,都會保留您在函數處理常式外部定義的變數和預處理邏輯。
當您需要在沒有任何初始輸入的情況下開始工作時,請使用長壽命的 Lambda 函數 例如,長期使用的函數可以載入並開始處理機器學習模型,以便在函數接收裝置資料時準備就緒。
注意
長壽命函數具有與其處理程序的每次調用相關聯的超時。如果要叫用無限期執行的程式碼,您必須在處理常式之外啟動它。請確定處理常式之外沒有封鎖程式碼,可能會阻止函式初始化。
除非AWS IoT Greengrass核心軟體停止 (例如在部署或重新開機期間),否則這些功能會執行。如果函數遇到未捕獲的異常,超過其內存限制或進入錯誤狀態(例如處理程序超時),這些函數將不會運行。
如需容器重複使用的詳細資訊,請參閱了解 AWSCompute 部落格AWS Lambda中的容器重複使用
設定 Lambda 函數容器化
根據預設,Lambda 函數會在AWS IoT Greengrass容器內部執行。Greengrass 容器在您的函數和主機之間提供隔離。這種隔離可增加主機和容器中功能的安全性。
我們建議您在 Greengrass 容器中執行 Lambda 函數,除非您的使用案例要求它們在沒有容器化的情況下執行。透過在 Greengrass 容器中執行 Lambda 函數,您可以更好地控制限制對資源存取的方式。
在下列情況下,您可以在不使用容器化的情況下執行 Lambda 函數:
-
您想要AWS IoT Greengrass在不支援容器模式的裝置上執行。一個例子是,如果你想使用一個特殊的 Linux 發行版,或者有一個過期的早期內核版本。
-
您想要使用自己的 OverlayFS 函式在另一個容器環境中執行 Lambda 函數,但是在 Greengrass 容器中執行時,會遇到覆寫檔案衝突。
-
您需要存取具有無法在部署時判斷路徑的本機資源,或部署後路徑可能變更的路徑。此資源的一個例子是可插拔的設備。
-
您有一個較早的應用程序被編寫為進程,並且在 Greengrass 容器中運行它時遇到問題。
容器化 | 備註 |
---|---|
Greengrass 容器 |
|
沒有容器 |
|
如果您在部署 Lambda 函數時變更其容器化,則該函數可能無法如預期般運作。如果 Lambda 函數使用新容器化設定無法再使用的本機資源,部署會失敗。
-
當您將 Lambda 函數從在 Greengrass 容器中執行變更為在沒有容器化的情況下執行時,會捨棄函數的記憶體限制。您必須直接存取檔案系統,而不是使用連接的本機資源。在部署 Lambda 函數之前,您必須先移除所有連接的資源。
-
當您將 Lambda 函數從沒有容器化的情況下執行變更為在容器中執行時,Lambda 函數會失去檔案系統的直接存取權。您必須為每個功能定義記憶體限制,或接受預設的 16 MB 記憶體限制。您可以在部署每個 Lambda 函數時為其設定這些設定。
若要變更 Lambda 函數元件的容器化設定,請在部署元件時將containerMode
組態參數的值設定為下列其中一個選項。
-
NoContainer
— 元件不會在隔離的執行階段環境中執行。 -
GreengrassContainer
— 元件在AWS IoT Greengrass容器內的隔離執行階段環境中執行。
如需如何部署和設定元件的詳細資訊,請參閱將AWS IoT Greengrass元件部署到裝置和更新零組件組態。