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

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

测试长时间生存的 Lambda 函数

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

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

注意

您可以在Amazon Lambda控制台或Amazon IoT Greengrass适用于 Python 的核心软件软件(位于 GitHub 上)。

 

在此步骤中,您将创建允许 Lambda 函数和Amazon IoT以交换 MQTT 消息。然后,部署组并测试函数。

  1. 在组配置页面中,选择 Subscriptions (订阅),然后选择 Add Subscription (添加订阅)

  2. Select a source (选择源) 下,选择 Lambda,然后选择 Greengrass_HelloWorld_Counter

  3. Select a target (选择目标) 下,依次选择 Services (服务)IoT Cloud (IoT 云)Next (下一步)

    
                            突出显示了“Greengrass_HelloWorld_Counter”、“IoT Cloud (IoT 云)”和“Next (下一步)”按钮的“Select your source and target (选择您的源和目标)”屏幕截图。
  4. 对于 Topic filter (主题筛选条件),输入 hello/world/counter。选择下一步,然后选择完成

    
                            突出显示了“hello/world/counter”和“Next (下一步)”按钮的屏幕截图。

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

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

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

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

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

     

    
                            突出显示了“IoT Cloud (IoT 云)”、“hello/world/counter/trigger”、“Greengrass_HelloWorld_Counter”和“Finish (完成)”的“Confirm and save your Subscription (确认并保存您的订阅)”页面的屏幕截图。

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

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

  7. 在组配置页面上,从 Actions (操作) 中选择 Deploy (部署)

    
                突出显示了“Deploy action”(部署操作) 的“Group”(组) 页面的屏幕截图。

    这会将组配置部署到您的Amazon IoT Greengrass核心设备。有关问题排查帮助,请参阅Amazon IoT Greengrass 故障排除

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

  9. 配置以下字段:

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

    • 对于服务质量,选择 0

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

     

    
                            突出显示了“hello/world/counter”、“0”、“以字符串形式显示负载”和“订阅主题”按钮的“订阅”屏幕截图。
  10. 选择 Subscribe

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

    在本模块中,您配置了Greengrass_HelloWorld_Counter当它在接收 MQTT 消息时将被调用的 Lambda 函数。hello/world/counter/trigger主题。您可以通过检查相关订阅来查看它:

    
                            显示 greengrass_HelloWorld_Counter 相关订阅的“Subscriptions (订阅)”网页。

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

  11. 要测试较长的生命周期,请通过向hello/world/counter/trigger主题。您可以使用默认消息。

    
                            默认 HelloAmazon IoT发送到 hello/world/counter/trigger 的控制台消息,并突出显示了 “Publish to topic” 按钮。
    注意

    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 递增的屏幕截图。