测试长时间生存的 Lambda 函数 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

测试长时间生存的 Lambda 函数

一个长时间生存的Lambda 函数在以下情况下自动启动Amazon IoT Greengrasscore 在单个容器(或沙盒)中启动和运行。保留在函数处理程序外部定义的所有变量和预处理逻辑,用于函数处理程序的每次调用。函数处理程序的多次调用将排队,直到执行完前面的调用。

此模块中使用的 greengrassHelloWorldCounter.py 代码定义了函数处理程序外部的 my_counter 变量。

注意

您可以在中查看代码Amazon Lambda控制台或在Amazon IoT Greengrass适用于 Python 的核心上 GitHub.

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

  1. 在组配置页面上,选择订阅,然后选择Add.

  2. UNDER源类型,选择Lambda 函数,然后选择绿草_HelloWorld_计数器.

  3. UNDERTarget type,选择服务,选择IoT 云.

  4. 对于 Topic filter (主题筛选条件),输入 hello/world/counter

  5. 选择 Create subscription(创建订阅)。

    此单个订阅仅在一个方向:Greengrass_HelloWorld_CounterLambda 函数到Amazon IoT. 要从云中调用(或触发)此 Lambda 函数,您必须创建反方向的订阅。

  6. 按照步骤 1 至 5 添加另一个订阅,它使用以下值。此订阅允许 Lambda 函数从接收消息Amazon IoT. 当您从发送消息时,您可以使用此订阅Amazon IoT调用该函数的控制台。

    • 对于源,选择服务,然后选择IoT 云.

    • 对于目标,选择Lambda 函数,然后选择绿草_HelloWorld_计数器.

    • 对于主题筛选条件,输入 hello/world/counter/trigger

    本主题筛选条件中使用了 /trigger 扩展,因为您创建了两个订阅,不希望它们互相干扰。

  7. 确保 Greengrass 守护进程正在运行,如中所述将云配置部署到核心设备.

  8. 在组配置页面上,选择部署.

  9. 在您的部署成功完成后,返回到Amazon IoT控制台主页,然后选择测试.

  10. 配置以下字段:

    • 对于 Subscription topic (订阅主题),输入 hello/world/counter

    • 对于服务质量,选择 0

    • 对于 MQTT payload display (MQTT 负载显示),选择 Display payloads as strings (以字符串形式显示负载)

  11. 选择 Subscribe

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

    在本模块中,您配置了Greengrass_HelloWorld_CounterLambda 函数在上收到 MQTT 消息时将被调用hello/world/counter/trigger主题。

    这些区域有:绿草_HelloWorld_计数器IoT 云订阅允许函数将消息发送到Amazon IoT在hello/world/counter主题。这些区域有:IoT 云绿草_HelloWorld_计数器订阅允许Amazon IoT将消息发送到hello/world/counter/trigger主题。

  12. 要测试较长的生命周期 Lambda 通过将消息发布到hello/world/counter/trigger主题。您可以使用默认消息。

    
                            默认Amazon IoT控制台消息发送到 hello/world/counter/trigger,并突出显示了 “Publish to to
    注意

    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核心。


                    显示“Invocation Count (调用计数)”从 1、2 和最后的 3 递增的屏幕截图。