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

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 消息的订阅。然后,部署组并测试函数。

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

  2. 源类型 下,选择 Lambda 函数,然后选择 Greengrass_HelloWorld_Counter

  3. 目标类型下,选择服务,选择 IoT 云

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

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

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

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

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

    • 对于目标,选择 Lambda 函数,然后选择 Greengrass_HelloWorld_Counter

    • 对于主题筛选条件,输入 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_Counter Lambda 函数,当其收到以 hello/world/counter/trigger 为主题的 MQTT 消息时将被调用。

    Greengrass_HelloWorld_CounterIoT Cloud 的订阅允许该函数以 hello/world/counter 为主题向 Amazon IoT 发送消息。IoT 云Greengrass_HelloWorld_Counter 的订阅允许 Amazon IoT 以 hello/world/counter/trigger 为主题向该函数发送消息。

  12. 要测试较长的生命周期,请通过向 hello/world/counter/trigger 主题发布消息来调用 Lambda 函数。您可以使用默认消息。

    
                            发送到 hello/world/counter/trigger 的默认“Hello from Amazon IoT console”消息,并突出显示了“发布到主题”按钮。
    注意

    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 核心的响应。


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