AWS IoT Greengrass
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

创建并打包 Lambda 函数

要在 AWS IoT Greengrass Core 上运行,Python Lambda 函数需要 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。在本教程中,您将 greengrasssdk 文件夹包含在 Lambda 函数部署程序包中。

注意

如果您正在运行 Python Lambda 函数,则也可使用 pip 在核心设备上安装适用于 Python 的 AWS IoT Greengrass Core 开发工具包。然后,您可以在 Lambda 函数部署程序包中部署您的函数而不包括开发工具包。有关更多信息,请参阅 greengrasssdk

在本节中,您将执行以下操作:

  • 将 适用于 Python 的 AWS IoT Greengrass Core 开发工具包 下载到您的计算机(而不是 AWS IoT Greengrass Core 设备)。在本教程中,您将从 AWS IoT Greengrass Core 开发工具包 下载 页面下载 GitHub 软件开发工具包。

  • 从下载的软件开发工具包中获取 Python Lambda 函数(名为 greengrassHelloWorld.py)。

  • 创建一个名为 hello_world_python_lambda.zip 的 Lambda 函数部署程序包,其中包含 greengrassHelloWorld.pygreengrasssdk 文件夹。

  • 使用 Lambda 控制台上传 hello_world_python_lambda.zip 软件包。

  • 使用 AWS IoT 控制台将软件包传输到 AWS IoT Greengrass Core设备(在组部署期间)。

  1. AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。

  2. 解压缩下载的程序包以获取 Lambda 函数代码和软件开发工具包。

    本模块中的 Lambda 函数使用:

    • examples\HelloWorld 中的 greengrassHelloWorld.py 文件。这是您的 Lambda 函数代码。

    • greengrasssdk 文件夹。这是开发工具包。

    以下代码来自 greengrassHelloWorld.py。(为节省空间,所有代码注释都已删除。) 请注意,该函数每 5 秒将两条可能的消息之一发布到 hello/world 主题一次。

    import greengrasssdk import platform from threading import Timer import time client = greengrasssdk.client('iot-data') my_platform = platform.platform() def greengrass_hello_world_run(): if not my_platform: client.publish(topic='hello/world', payload='Hello world! Sent from Greengrass Core.') else: client.publish(topic='hello/world', payload='Hello world! Sent from Greengrass Core running on platform: {}'.format(my_platform)) Timer(5, greengrass_hello_world_run).start() greengrass_hello_world_run() def function_handler(event, context): return
  3. greengrasssdk 复制到包含 greengrassHelloWorld.pyHelloWorld 文件夹。

  4. 要创建 Lambda 函数部署程序包,请将 greengrassHelloWorld.py 文件和 greengrasssdk 文件夹保存到名为 hello_world_python_lambda.zip 的压缩 .zip 文件。.py 文件和开发工具包文件夹必须位于该目录的根目录中。

    
                            显示 hello_word_python_lambda.zip 的压缩内容的屏幕截图。

    对于类 UNIX 系统(包括 Mac 终端),您可以使用以下命令打包文件和文件夹:

    sudo zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py

    注意

    根据您的发行版,可能需要先安装 zip(例如,通过运行 sudo apt-get install zip)。您的发行版的安装命令可能不同。

    现在您已准备好创建您的 Lambda 函数和上传部署程序包。

  5. 打开 Lambda 控制台,选择 Create function (创建函数)

  6. 选择 Author from scratch

  7. 将您的函数命名为 Greengrass_HelloWorld 并设置其余字段,如下所示:

    • 对于 Runtime (运行时),选择 Python 2.7

    • 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)

    选择创建函数

    
                            “Basic information (基本信息)”部分,其中“Function name (函数名称)”字段设置为“Greengrass_HelloWorld”,“Runtime (运行时)”字段设置为“Python 2.7”。
  8. 上传您的 Lambda 函数部署软件包:

    1. 配置选项卡上的函数代码下,设置以下字段:

      • 对于 代码输入种类,选择上传 .zip 文件

      • 对于 Runtime (运行时),选择 Python 2.7

      • 对于 Handler (处理程序),输入 greengrassHelloWorld.function_handler

    2. 选择上传,然后选择 hello_world_python_lambda.zip。(您的 hello_world_python_lambda.zip 文件的大小可能与此处显示的大小不同。)

      
                                    突出显示了“上传 .zip 文件”、“Python 2.7”、“greengrassHelloWorld.function_handler”和“上传”的“配置”选项卡的屏幕截图。
    3. 选择 Save

      
                                    突出显示了“Save (保存)”按钮的屏幕截图。

      注意

      AWS Lambda 控制台上的测试键不可与该函数一同使用。AWS IoT Greengrass 核心 SDK 不包含在 AWS Lambda 控制台中独立运行 Greengrass Lambda 函数所需的模块。这些模块(例如 greengrass_common)会在被部署到您的 Greengrass 核心之后提供给这些函数。

      提示

      要查看您上传的代码,请从代码输入种类中选择在线编辑

  9. 发布 Lambda 函数:

    1. 操作中,选择发布新版本

      
                                    突出显示了“Publish new version (发布新版本)”的“Actions (操作)”菜单的屏幕截图。
    2. 对于 Version description (版本描述),输入 First version,然后选择 Publish (发布)

      
                            “Version description (版本描述)”字段设置为“First version (第一个版本)”并且突出显示了“Publish (发布)”按钮的屏幕截图。
  10. 为 Lambda 函数版本创建别名

    注意

    Greengrass 组可以按别名 (推荐) 或版本引用 Lambda 函数。通过使用别名,可以更轻松地管理代码更新,因为您在更新函数代码时无需更改订阅表或组定义。相反,您只是将别名指向新的函数版本。

    1. 操作中,选择创建别名

      
                            “Actions (操作)”菜单设置为“Create alias (创建别名)”的屏幕截图。
    2. 将别名命名为 GG_HelloWorld,将版本设置为 1(对应于您刚刚发布的版本),然后选择 Create (创建)

      注意

      AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。

       

      
                            “Name (名称)”字段设置为“GG_HelloWorld”、“Version (版本)”字段设置为 1 并且突出显示了“Create (创建)”按钮的“Create a new alias (创建新别名)”的屏幕截图。