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