Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
测试长时间生存的 Lambda 函数
长时间生存的 Lambda 函数在 Amazon IoT Greengrass 核心启动时自动启动(并在单个容器/沙盒中运行)。保留在函数处理程序外部定义的所有变量和预处理逻辑,用于函数处理程序的每次调用。函数处理程序的多次调用将排队,直到执行完前面的调用。
此模块中使用的 greengrassHelloWorldCounter.py
代码定义了函数处理程序外部的 my_counter
变量。
注意
您可以在 Amazon Lambda 控制台或 GitHub 上的 适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包
在该步骤中,您将创建允许 Lambda 函数和 Amazon IoT 交换 MQTT 消息的订阅。然后,部署组并测试函数。
-
在组配置页面上,选择 订阅,然后选择添加。
-
在 源类型 下,选择 Lambda 函数,然后选择 Greengrass_HelloWorld_Counter。
-
在目标类型下,选择服务,选择 IoT 云。
-
对于 Topic filter (主题筛选条件),输入
hello/world/counter
。 -
选择创建订阅。
此单个订阅只有一个方向:从
Greengrass_HelloWorld_Counter
Lambda 函数到 Amazon IoT。要从云中调用(或触发)此 Lambda 函数,您必须创建反方向的订阅。 -
按照步骤 1 至 5 添加另一个订阅,它使用以下值。此订阅允许 Lambda 函数从 Amazon IoT 接收消息。当您从调用该函数的 Amazon IoT 控制台发送消息时,您可以使用此订阅。
-
对于源,选择服务,然后选择 IoT 云。
-
对于目标,选择 Lambda 函数,然后选择 Greengrass_HelloWorld_Counter。
-
对于主题筛选条件,输入
hello/world/counter/trigger
。
本主题筛选条件中使用了
/trigger
扩展,因为您创建了两个订阅,不希望它们互相干扰。 -
确保 Greengrass 进程守护程序正在运行,如 将云配置部署到核心设备 中所述。
-
在组配置页面上,选择部署。
-
在您的部署完成后,返回到 Amazon IoT 控制台主页并选择 测试。
-
配置以下字段:
-
对于 Subscription topic (订阅主题),输入
hello/world/counter
。 -
对于服务质量,选择 0。
-
对于 MQTT payload display (MQTT 负载显示),选择 Display payloads as strings (以字符串形式显示负载)。
-
-
选择订阅。
与此模块的第 1 部分不同,在您订阅
hello/world/counter
之后,您不应看到任何消息。这是因为发布到hello/world/counter
主题的greengrassHelloWorldCounter.py
代码位于函数处理程序中,该函数处理程序仅在调用函数时才运行。在此模块中,您配置了
Greengrass_HelloWorld_Counter
Lambda 函数,当其收到以hello/world/counter/trigger
为主题的 MQTT 消息时将被调用。Greengrass_HelloWorld_Counter 到 IoT Cloud 的订阅允许该函数以
hello/world/counter
为主题向 Amazon IoT 发送消息。IoT 云到 Greengrass_HelloWorld_Counter 的订阅允许 Amazon IoT 以hello/world/counter/trigger
为主题向该函数发送消息。 -
要测试较长的生命周期,请通过向
hello/world/counter/trigger
主题发布消息来调用 Lambda 函数。您可以使用默认消息。注意
该
Greengrass_HelloWorld_Counter
函数会忽略所接收消息的内容。它只运行function_handler
中的代码,该代码会向hello/world/counter
主题发送消息。您可以从 GitHub 的 适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包查看此代码。
每次将消息发布到 hello/world/counter/trigger
主题时,my_counter
变量都会递增。此调用计数显示在从 Lambda 函数发送的消息中。由于函数处理程序包含 20 秒休眠周期 (time.sleep(20)
),反复触发处理程序队列将需要排队等候来自 Amazon IoT Greengrass 核心的响应。
