

支援終止通知：2026 年 10 月 7 日 AWS 將停止 的支援 AWS IoT Greengrass Version 1。2026 年 10 月 7 日之後，您將無法再存取 AWS IoT Greengrass V1 資源。如需詳細資訊，請造訪[從 遷移 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 測試長期 Lambda 函數
<a name="long-testing"></a>

當 AWS IoT Greengrass 核心在單一容器 （或沙盒） 中啟動和執行時，*[長期](lambda-functions.md#lambda-lifecycle)* Lambda 函數會自動啟動。在函數處理常式外定義的任何變數或預先處理的邏輯，每次呼叫函數處理常式時都會保留下來。多個函數處理常式的呼叫已排入佇列，直到已執行舊的呼叫。

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

**注意**  
您可以在 AWS Lambda 主控台或 GitHub 上[AWS IoT Greengrass 適用於 Python 的 Core SDK](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) 中檢視程式碼。

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

1. 在群組組態頁面上，選擇**訂閱**，然後選擇**新增**。

1. 在**來源類型**下，選擇 **Lambda 函數**，然後選擇 **Greengrass\$1HelloWorld\$1Counter**。

1. 在**目標類型**下，選擇**服務**，選擇 **IoT 雲端**。

1. 針對 **Topic filter (主題篩選條件)**，輸入 **hello/world/counter**。

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

   此單一訂閱僅朝一個方向進行：從 `Greengrass_HelloWorld_Counter` Lambda 函數到 AWS IoT。若要從雲端叫用 （或觸發） 此 Lambda 函數，您必須以相反方向建立訂閱。

1. 請依照步驟 1 - 5 新增另一個使用下列值的訂閱。此訂閱允許 Lambda 函數接收來自 的訊息 AWS IoT。當您從叫用 函數的 AWS IoT 主控台傳送訊息時，您會使用此訂閱。
   + 針對來源，選擇**服務**，然後選擇 **IoT 雲端**。
   + 針對目標，選擇 **Lambda 函數**，然後選擇 **Greengrass\$1HelloWorld\$1Counter**。
   + 針對主題篩選條件，輸入 **hello/world/counter/trigger**。

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

1. 請確定 Greengrass 協助程式正在執行，如 中所述[部署雲端組態到核心裝置](configs-core.md)。

1. <a name="console-actions-deploy"></a>在群組組態頁面上，選擇**部署**。

1. <a name="console-test-after-deploy"></a>部署完成後，返回 AWS IoT 主控台首頁，然後選擇**測試**。

1. 設定下列欄位：
   + 針對 **Subscription topic (訂閱主題)**，輸入 **hello/world/counter**。
   + 針對 **Quality of Service (服務品質)**，選擇 **0**。
   + 針對 **MQTT payload display (MQTT 承載顯示)**，選擇 **Display payloads as strings (將承載顯示為字串)**。

1. 選擇 **Subscribe (訂閱)**。

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

   在此模組中，您設定 `Greengrass_HelloWorld_Counter` Lambda 函數在接收`hello/world/counter/trigger`有關主題的 MQTT 訊息時被叫用。

   **Greengrass\$1HelloWorld\$1Counter** 對 **IoT Cloud (IoT 雲端)** 的訂閱允許函數將訊息傳送至 `hello/world/counter` 主題的 AWS IoT 。**IoT 雲端**至 **Greengrass\$1HelloWorld\$1Counter** 訂閱允許 AWS IoT 傳送訊息至`hello/world/counter/trigger`主題上的 函數。

1. 若要測試長期生命週期，請發佈訊息至 `hello/world/counter/trigger` 主題來叫用 Lambda 函數。您可以使用預設的訊息。  
![\[預設來自 AWS IoT 主控台的 Hello 訊息傳送至 hello/world/counter/trigger，並反白顯示發佈至主題按鈕。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-057.png)
**注意**  
 `Greengrass_HelloWorld_Counter` 函數會忽略接收訊息的內容。它只需在 `function_handler` 中執行程式碼，這會將訊息傳送到 `hello/world/counter` 主題。您可以從 GitHub 上的[AWS IoT Greengrass 適用於 Python 的核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) 檢閱此程式碼。

每次將訊息發佈給 `hello/world/counter/trigger` 主題時，`my_counter` 變數會增加。此調用計數會顯示在從 Lambda 函數傳送的訊息中。由於函數處理常式包含 20 秒的休眠週期 (`time.sleep(20)`)，因此重複觸發處理常式會將 AWS IoT Greengrass 核心的回應排入佇列。

![\[螢幕擷取畫面顯示呼叫計數從 1、2 和 3 開始增加。\]](http://docs.aws.amazon.com/zh_tw/greengrass/v1/developerguide/images/gg-get-started-058.png)
