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