终止支持通知:2026 年 10 月 7 日, AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后,您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息,请访问迁移自 AWS IoT Greengrass Version 1。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
测试长时间生存的 Lambda 函数
当核心启动并在单个容器(或沙箱)中运行时 AWS IoT Greengrass ,长寿命的 Lambda 函数会自动启动。保留在函数处理程序外部定义的所有变量和预处理逻辑,用于函数处理程序的每次调用。函数处理程序的多次调用将排队,直到执行完前面的调用。
此模块中使用的 greengrassHelloWorldCounter.py 代码定义了函数处理程序外部的 my_counter 变量。
注意
你可以在 AWS Lambda 控制台或适用于 Python 的AWS IoT Greengrass 核心 SDK
在此步骤中,您将创建允许 Lambda 函数和交换 MQTT 消息 AWS IoT 的订阅。然后,部署组并测试函数。
-
在组配置页面上,选择 订阅,然后选择添加。
-
在 “源类型” 下,选择 Lambda 函数,然后选择 Gre HelloWorld engrass_ _Counter。
-
在目标类型下,选择服务,选择 IoT 云。
-
对于 Topic filter (主题筛选条件),输入
hello/world/counter。 -
选择创建订阅。
此单一订阅仅朝一个方向发展:从
Greengrass_HelloWorld_CounterLambda 函数到。 AWS IoT要从云中调用(或触发)此 Lambda 函数,您必须创建反方向的订阅。 -
按照步骤 1 至 5 添加另一个订阅,它使用以下值。此订阅允许 Lambda 函数从 AWS IoT接收消息。当您从 AWS IoT 控制台发送调用该函数的消息时,您可以使用此订阅。
-
对于源,选择服务,然后选择 IoT 云。
-
对于目标,选择 Lambda 函数,然后选择 Gre HelloWorld en grass_ _Counter。
-
对于主题筛选条件,输入
hello/world/counter/trigger。
本主题筛选条件中使用了
/trigger扩展,因为您创建了两个订阅,不希望它们互相干扰。 -
确保 Greengrass 进程守护程序正在运行,如 将云配置部署到核心设备 中所述。
-
在组配置页面上,选择部署。
-
部署完成后,返回 AWS 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_CounterLambda 函数,当其收到以hello/world/counter/trigger为主题的 MQTT 消息时将被调用。Greengrass_ _Counter t HelloWorld o Io T Cloud 订阅允许该功能向其发送有关该主题的消息。 AWS IoT
hello/world/counter物联网云到 Greengrass_ HelloWorld _Counter 订阅允许 AWS IoT 向该功能发送有关该主题的消息。hello/world/counter/trigger -
要测试较长的生命周期,请通过向
hello/world/counter/trigger主题发布消息来调用 Lambda 函数。您可以使用默认消息。
注意
该
Greengrass_HelloWorld_Counter函数会忽略所接收消息的内容。它只运行function_handler中的代码,该代码会向hello/world/counter主题发送消息。你可以在上查看适用于 Python 的AWS IoT Greengrass 核心 SDK中的这段代码 GitHub。
每次将消息发布到 hello/world/counter/trigger 主题时,my_counter 变量都会递增。此调用计数显示在从 Lambda 函数发送的消息中。由于函数处理程序包含 20 秒的睡眠周期 (time.sleep(20)),因此反复触发处理程序会使来自 AWS IoT Greengrass 内核的响应排队。