

终止支持通知：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 控制台或适用于 [Python 的AWS IoT Greengrass 核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) 中查看代码 GitHub。

在此步骤中，您将创建允许 Lambda 函数和交换 MQTT 消息 AWS IoT 的订阅。然后，部署组并测试函数。

1. 在组配置页面上，选择 **订阅**，然后选择**添加**。

1. 在 “**源类型**” 下，选择 **Lambda 函数**，然后选择 **Gre HelloWorld** engrass\$1 \$1Counter。

1. 在**目标类型**下，选择**服务**，选择 **IoT 云**。

1. 对于 **Topic filter (主题筛选条件)**，输入 **hello/world/counter**。

1. 选择**创建订阅**。

   此单一订阅仅朝一个方向发展：从 `Greengrass_HelloWorld_Counter` Lambda 函数到。 AWS IoT要从云中调用（或触发）此 Lambda 函数，您必须创建反方向的订阅。

1. 按照步骤 1 至 5 添加另一个订阅，它使用以下值。此订阅允许 Lambda 函数从 AWS IoT接收消息。当您从 AWS IoT 控制台发送调用该函数的消息时，您可以使用此订阅。
   + 对于源，选择**服务**，然后选择 **IoT 云**。
   + 对于目标，选择 **Lambda 函数，然后选择 **Gre HelloWorld** en** grass\$1 \$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**。
   + 对于**服务质量**，选择 **0**。
   + 对于 **MQTT payload display (MQTT 负载显示)**，选择 **Display payloads as strings (以字符串形式显示负载)**。

1. 选择**订阅**。

   与此模块的[第 1 部分](module3-I.md)不同，在您订阅 `hello/world/counter` 之后，您不应看到任何消息。这是因为发布到 `hello/world/counter` 主题的 `greengrassHelloWorldCounter.py` 代码位于函数处理程序中，该函数处理程序仅在调用函数时才运行。

   在此模块中，您配置了 `Greengrass_HelloWorld_Counter` Lambda 函数，当其收到以 `hello/world/counter/trigger` 为主题的 MQTT 消息时将被调用。

   **Greengrass\$1 \$1Counter t HelloWorld o** Io **T Cloud** 订阅允许该功能向其发送有关该主题的消息。 AWS IoT `hello/world/counter`**物联网云**到 **Greengrass\$1 HelloWorld \$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_cn/greengrass/v1/developerguide/images/gg-get-started-057.png)
**注意**  
 该 `Greengrass_HelloWorld_Counter` 函数会忽略所接收消息的内容。它只运行 `function_handler` 中的代码，该代码会向 `hello/world/counter` 主题发送消息。你可以在上查看适用于 [Python 的AWS IoT Greengrass 核心 SDK](https://github.com/aws/aws-greengrass-core-sdk-python/blob/master/examples/HelloWorldCounter/greengrassHelloWorldCounter.py) 中的这段代码 GitHub。

每次将消息发布到 `hello/world/counter/trigger` 主题时，`my_counter` 变量都会递增。此调用计数显示在从 Lambda 函数发送的消息中。由于函数处理程序包含 20 秒的睡眠周期 (`time.sleep(20)`)，因此反复触发处理程序会使来自 AWS IoT Greengrass 内核的响应排队。

![\[显示“Invocation Count (调用计数)”从 1、2 和最后的 3 递增的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-058.png)
