

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 创建并打包 Lambda 函数
<a name="create-lambda"></a>

此模块中的 Python Lambda 函数示例使用适用于 Python 的 [AWS IoT Greengrass 核心开发工具包](lambda-functions.md#lambda-sdks-core)发布 MQTT 消息。

在此步骤中，您：
+ 将适用于 Python 的 AWS IoT Greengrass 核心 SDK 下载到你的电脑（不是 AWS IoT Greengrass 核心设备）。
+ 创建包含函数代码和依赖项的 Lambda 函数部署程序包。
+ 使用 Lambda 控制台创建 Lambda 函数和上传部署程序包。
+ 发布 Lambda 函数的版本并创建指向该版本的别名。

要完成本模块，必须在核心设备上安装 Python 3.7。

 <a name="create-lambda-procedure"></a>

1. <a name="download-ggc-sdk"></a> 从[AWS IoT Greengrass 核心软件开发工具包](what-is-gg.md#gg-core-sdk-download)下载页面，将适用于 Python 的 AWS IoT Greengrass 酷睿 SDK 下载到你的电脑上。

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

   本模块中的 Lambda 函数使用：
   + `examples\HelloWorld` 中的 `greengrassHelloWorld.py` 文件。这是您的 Lambda 函数代码。该函数每 5 秒将两条可能的消息之一发布到 `hello/world` 主题一次。
   + `greengrasssdk` 文件夹。这是软件开发工具包。

1. 将 `greengrasssdk` 文件夹复制到包含 `greengrassHelloWorld.py` 的 `HelloWorld` 文件夹中。

1. 要创建 Lambda 函数部署程序包，请将 `greengrassHelloWorld.py` 文件和 `greengrasssdk` 文件夹保存到名为 `hello_world_python_lambda.zip` 的压缩 `zip` 文件。`py` 文件和 `greengrasssdk` 文件夹必须位于该目录的根目录中。  
![\[显示 hello_word_python_lambda.zip 的压缩内容的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-017.png)

   在类 UNIX 系统（包括 Mac 终端）上，您可以使用以下命令打包文件和文件夹：

   ```
   zip -r hello_world_python_lambda.zip greengrasssdk greengrassHelloWorld.py
   ```
**注意**  
根据您的发行版，可能需要先安装 `zip`（例如，通过运行 `sudo apt-get install zip`）。您的发行版的安装命令可能不同。

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

1. 打开 Lambda 控制台，选择**创建函数**。

1. 选择**从头开始创作**。

1. 将您的函数命名为 **Greengrass\$1HelloWorld** 并设置其余字段，如下所示：
   + 对于**运行时系统**，选择 **Python 3.7**。
   + 对于**权限**，请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未被使用 AWS IoT Greengrass。

   选择 **Create function (创建函数)**。

1. 上传 Lambda 函数部署软件包：

   1. <a name="lambda-console-upload"></a>在**代码**选项卡上的**代码源**下，选择**上传自**。从下拉列表中选择 **.zip 文件**。  
![\[“上传自”下拉列表中突出显示了.zip 文件。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. 选择**上传**，然后选择您的 `hello_world_python_lambda.zip` 部署包。然后，选择**保存**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函数的**代码**选项卡中，在**运行时设置**下选择**编辑**，然后输入以下值。
      + 对于**运行时系统**，选择 **Python 3.7**。
      + 对于**处理程序**，输入 **greengrassHelloWorld.function\$1handler**。  
![\[“运行时设置” 部分，“运行时” 字段设置为 “Python 3.7”，“Handler” 字段设置为 “greengrassHelloWorld.function_handler”。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-023-2.png)

   1. <a name="lambda-console-save-config"></a>选择**保存**。
**注意**  
 AWS Lambda 主机上的 “**测试**” 按钮不适用于此功能。 AWS IoT Greengrass 核心软件开发工具包不包含在控制台中独立运行 Greengrass Lambda 函数所需的模块。 AWS Lambda 这些模块（例如 `greengrass_common`）是在函数部署到您的 Greengrass 核心之后提供给它们的。

1. <a name="publish-function-version"></a>发布 Lambda 函数：

   1. 在页面顶部的**操作**菜单上，选择**发布新版本**。  
![\[突出显示了“Publish new version (发布新版本)”的“Actions (操作)”菜单的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-026.png)

   1. 对于**版本描述**，输入 **First version**，然后选择**发布**。  
![\[“Version description (版本描述)”字段设置为“First version (第一个版本)”并且突出显示了“Publish (发布)”按钮的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-027.png)

1. <a name="create-version-alias"></a>为 Lambda 函数[版本](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)创建[别名](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html)：
**注意**  
Greengrass 组可以按别名（推荐）或版本引用 Lambda 函数。使用别名，您可以更轻松地管理代码更新，因为您在更新函数代码时，不必更改订阅表或组定义。相反，您只需将别名指向新的函数版本。

   1. 从页面顶部的**操作**菜单中，选择**创建别名**。  
![\[“操作”菜单设置为“创建别名”的屏幕截图。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-028.png)

   1. 将别名命名为 **GG\$1HelloWorld**，将版本设置为 **1**（对应于您刚刚发布的版本），然后选择**保存**。
**注意**  
AWS IoT Greengrass **不支持 \$1LATEST 版本的 Lambda 别名。**

         
![\[“创建新别名” 的屏幕截图，“名称” 字段设置为 GG_HelloWorld，“版本” 字段设置为 1。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/gg-get-started-029.png)