測試長期的 Lambda 函數 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 於 2023 年 6 月 30 日進入延長使用壽命階段。如需詳細資訊,請參閱AWS IoT Greengrass V1 維護政策。在此日期之後, AWS IoT Greengrass V1 將不會發行提供功能、增強功能、錯誤修正或安全性修補程式的更新。在上運行的設備 AWS IoT Greengrass V1 不會中斷,並將繼續運行並連接到雲。我們強烈建議您移轉至 AWS IoT Greengrass Version 2,這會增加重要的新功能,並支援其他平台

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

測試長期的 Lambda 函數

一個長期的Lambda 函數會自動啟動時AWS IoT Greengrasscore 在單一的容器 (或沙盒) 中持續運作。在函數處理常式外定義的任何變數或預先處理的邏輯,每次呼叫函數處理常式時都會保留下來。多個函數處理常式的呼叫已排入佇列,直到已執行舊的呼叫。

在此單元中使用的 greengrassHelloWorldCounter.py 程式碼可在函數處理常式外定義 my_counter 變數。

注意

您可以檢視中的程式碼AWS Lambda控制台或AWS IoT Greengrass適用於 Python 的核心 SDK上 GitHub。

在此步驟中,您建立訂閱,以允許 Lambda 函數和AWS IoT以交換 MQTT 訊息。然後,您部署群組和測試函數。

  1. 在群組組態頁面上,選擇訂閱(下一步),然後選擇Add

  2. UNTER來源類型,選擇Lambda 函數(下一步),然後選擇格蘭格拉斯 _HelloWorld_ 櫃檯

  3. UNTERTarget type (目標類型),選擇Service (服務),選擇IoT Cloud (IoT 雲端)

  4. 針對 Topic filter (主題篩選條件),輸入 hello/world/counter

  5. 選擇 Create subscription (建立訂閱)。

    此單一訂閱方向為單向:來自Greengrass_HelloWorld_CounterLambda 函數AWS IoT。若要從雲端叫用 (或觸發) 此 Lambda 函數,您必須在反方向建立訂閱。

  6. 按照步驟 1 — 5,新增使用以下值的另一個訂閱。此訂閱會允許 Lambda 函數接收來自的訊息AWS IoT。當您從傳送訊息時,您會使用此訂閱AWS IoT主控台,用於叫用函數的主控台。

    • 對於來源,選擇Service (服務)(下一步),然後選擇IoT Cloud (IoT 雲端)

    • 對於目標,選擇Lambda 函數(下一步),然後選擇格蘭格拉斯 _HelloWorld_ 櫃檯

    • 針對主題篩選條件,輸入 hello/world/counter/trigger

    此主題篩選條件中使用 /trigger 延伸部分,因為您已建立兩個訂閱,並且不希望它們互相影響。

  7. 請確認 Greengrass 協助程式正在運作,如所述部署雲端組態到核心裝置

  8. 在群組組態頁面上,選擇部署

  9. 部署完成後,返回AWS IoT主控台首頁,並選擇測試

  10. 設定下列欄位:

    • 針對 Subscription topic (訂閱主題),輸入 hello/world/counter

    • 針對 Quality of Service (服務品質),選擇 0

    • 針對 MQTT payload display (MQTT 承載顯示),選擇 Display payloads as strings (將承載顯示為字串)

  11. 選擇 Subscribe (訂閱)

    與此模組的第 1 部分不同,您應該不會在訂閱 hello/world/counter 之後看到任何訊息。這是因為發佈到該 hello/world/counter 主題的 greengrassHelloWorldCounter.py 程式碼是在函數處理常式中,該處理常式僅會在叫用該函數時執行。

    在本單元中,您已設定Greengrass_HelloWorld_CounterLambda 函數當收到的 MQTT 訊息時受到叫用。hello/world/counter/trigger主題。

    所以此格蘭格拉斯 _HelloWorld_ 櫃檯IoT Cloud (IoT 雲端)訂閱會允許函數將訊息傳送至AWS IoT在hello/world/counter主題。所以此IoT Cloud (IoT 雲端)格蘭格拉斯 _HelloWorld_ 櫃檯訂閱會允許AWS IoT將訊息傳送至函數hello/world/counter/trigger主題。

  12. 若要測試長期的生命週期,請透過將訊息發佈到hello/world/counter/trigger主題。您可以使用預設的訊息。

    預設的 HelloAWS IoT主控台訊息傳送至 hello/world/counter/trigger,其 [發佈至主題] 按鈕反白顯示。
    注意

    Greengrass_HelloWorld_Counter 函數會忽略接收訊息的內容。它只需在 function_handler 中執行程式碼,這會將訊息傳送到 hello/world/counter 主題。您可以從中檢視此程式碼AWS IoT Greengrass適用於 Python 的核心 SDK上 GitHub。

每次將訊息發佈給 hello/world/counter/trigger 主題時,my_counter 變數會增加。此叫用計數會顯示在 Lambda 函數傳送的訊息中。由於函數處理常式包含 20 秒的睡眠週期 (time.sleep(20)),重複觸發處理常式會導致來自的回應佇列越積越多。AWS IoT Greengrass核心。

螢幕擷取畫面顯示呼叫計數從 1、2 和 3 開始增加。