

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

# 将 Lambda 函数作为组件导入（控制台）
<a name="import-lambda-function-console"></a>

使用 [AWS IoT Greengrass 控制台](https://console.aws.amazon.com/greengrass)创建 Lambda 函数组件时，需要导入现有 AWS Lambda 函数，然后将其配置为创建在 Greengrass 设备上运行的组件。

在开始之前，请查看在 Greengrass 设备上运行 Lambda 函数的[要求](https://docs.aws.amazon.com/greengrass/v2/developerguide/run-lambda-functions.html#run-lambda-functions-requirements)。

**Topics**
+ [第 1 步：选择要导入的 Lambda 函数](#import-lambda-console-choose-function)
+ [第 2 步：配置 Lambda 函数参数](#import-lambda-console-configure-function-parameters)
+ [第 3 步：（可选）指定 Lambda 函数支持的平台](#import-lambda-console-configure-platforms)
+ [第 4 步：（可选）指定 Lambda 函数的组件依赖关系](#import-lambda-console-configure-dependencies)
+ [第 5 步：（可选）在容器中运行 Lambda 函数](#import-lambda-console-run-isolated)
+ [第 6 步：创建 Lambda 函数组件](#import-lambda-console-create-deploy)

## 第 1 步：选择要导入的 Lambda 函数
<a name="import-lambda-console-choose-function"></a>

1. 在 [AWS IoT Greengrass 控制台](https://console.aws.amazon.com/greengrass)导航菜单中，选择**组件**。

1. 在**组件**页面，选择**创建组件**。

1. 在**创建组件**页面的**组件信息**下，选择**导入 Lambda 函数**。

1. 在 **Lambda 函数**中，搜索并选择要导入的 Lambda 函数。

   AWS IoT Greengrass 创建名为 Lambda 函数的组件。

1. 在 **Lambda 函数版本**中，选择要导入的版本。您不能选择像 `$LATEST` 这样 Lambda 别名。

   AWS IoT Greengrass 使用 Lambda 函数的版本作为有效的语义版本创建组件。例如，如果您的函数版本是 `3`，则组件版本将变为 `3.0.0`。

## 第 2 步：配置 Lambda 函数参数
<a name="import-lambda-console-configure-function-parameters"></a>

在**创建组件**页面的 **Lambda 函数配置**下，配置用于运行 Lambda 函数的以下参数。

1. （可选）添加 Lambda 函数订阅工作消息的事件源列表。您可以指定事件源来订阅此函数以订阅本地 publish/subscribe 消息和 AWS IoT Core MQTT 消息。Lambda 函数在收到来自事件源的消息时会被调用。
**注意**  
要将此函数订阅到来自其他 Lambda 函数或组件的消息，请在部署此 Lambda 函数组件时部署[旧版订阅路由器组件](legacy-subscription-router-component.md)。部署旧版订阅路由器组件时，请指定 Lambda 函数使用的订阅。

   在**事件源**下，执行以下操作来添加事件源：

   1. 为添加的每个事件源指定以下选项：
      + **主题** – 订阅消息的主题。
      + **类型** – 事件源的类型。从以下选项中进行选择：
        + **本地发布/订阅**-订阅本地 publish/subscribe 消息。

          如果您使用 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.6.0 或更高版本以及 [Lambda 管理器](lambda-manager-component.md) v2.2.5 或更高版本，则在指定此类型时，可以在**主题**中使用 MQTT 主题通配符（`+` 和 `#`）。
        + **AWS IoT Core MQTT** — 订阅 AWS IoT Core MQTT 消息。

          当您指定此类型时，可以在**主题**中使用 MQTT 主题通配符（`+` 和 `#`）。

   1. （可选）要添加其他事件源，请选择**添加源**，然后重复上一步骤。要移除事件源，请选择要移除的事件源旁边的**移除**。

1. 对于**超时（秒）**，输入非固定 Lambda 函数在超时之前可以运行的最大时间量（以秒为单位）。默认值为 3 秒。

1. 对于**固定**，请选择是否固定 Lambda 函数组件。默认值为 **True**。<a name="lambda-function-lifecycle-type"></a>
   + 固定的（或长寿命的）Lambda 函数在启动时 AWS IoT Greengrass 启动，并在自己的容器中继续运行。
   + 非固定（或按需）的 Lambda 函数仅在收到工作项时启动，并在空闲达到其指定的最大空闲时间后退出。如果函数有多个工作项，则 AWS IoT Greengrass Core 软件会创建该函数的多个实例。

1. （可选）在**其他参数**下，设置以下 Lambda 函数参数。
   + **状态超时（秒）** – Lambda 函数组件向 Lambda 管理器组件发送状态更新的时间间隔（以秒为单位）。此参数仅适用于固定函数。默认值为 60 秒。
   + **最大队列大小** – Lambda 函数组件的消息队列的最大大小。 AWS IoT Greengrass Core 软件将消息存储在 FIFO（先进先出）队列中，直到它可以运行 Lambda 函数来使用每条消息。默认值为 1000 条消息。
   + **最大实例数** – 非固定 Lambda 函数可以同时运行的最大实例数。默认值为 100 个实例。
   + **最大空闲时间（秒）**-在 AWS IoT Greengrass 核心软件停止其进程之前，非固定 Lambda 函数可以空闲的最大时间（以秒为单位）。默认值为 60 秒。
   + **编码类型** – Lambda 函数支持的有效载荷类型。从以下选项中进行选择：
     + **JSON**
     + **二进制**

     默认值为 JSON。

1. （可选）指定在 Lambda 函数运行时要传递给该函数的命令行参数列表。

   1. 在**其他参数 → 进程参数**下，选择**添加参数**。

   1. 为添加的每个参数输入要传递给函数的参数。

   1. 要移除参数，请选择要移除的参数旁边的**移除**。

1. （可选）指定 Lambda 函数运行时可用的环境变量映射。借助环境变量，您无需更改函数代码即可存储和更新配置设置。

   1. 在**其他参数 → 环境变量**下，选择**添加环境变量**。

   1. 为添加的每个环境变量指定以下选项：
      + **键** – 变量名。
      + **值** – 此变量的默认值。

   1. 要移除环境变量，请选择要移除的环境变量旁边的**移除**。

## 第 3 步：（可选）指定 Lambda 函数支持的平台
<a name="import-lambda-console-configure-platforms"></a>

所有核心设备都具有操作系统和架构属性。当您部署 Lambda 函数组件时， AWS IoT Greengrass Core 软件会将您指定的平台值与核心设备上的平台属性进行比较，以确定该设备是否支持 Lambda 函数。

**注意**  
向核心设备部署 Greengrass Nucleus 组件时，您可以指定自定义平台属性。有关更多信息，请参阅 [Greengrass Nucleus 组件](greengrass-nucleus-component.md)的[平台覆盖参数](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration-platform-overrides)。

在 **Lambda 函数配置 → 其他参数 → 平台**下，执行以下操作，来指定此 Lambda 函数支持的平台。

1. 为每个平台指定以下选项：
   + **操作系统** – 平台操作系统的名称。目前，唯一支持的值是 `linux`。
   + **架构** – 平台的处理器架构。支持的值为：
     + `amd64`
     + `arm`
     + `aarch64`
     + `x86`

1. 要添加其他平台，请选择**添加平台**并重复上一步操作。要移除支持的平台，请选择要移除的平台旁边的**移除**。

## 第 4 步：（可选）指定 Lambda 函数的组件依赖关系
<a name="import-lambda-console-configure-dependencies"></a>

组件依赖关系 AWS可识别您的函数使用的其他由提供的组件或自定义组件。部署 Lambda 函数组件时，部署中会包含这些依赖关系，以便函数运行。

**重要**  <a name="import-v1-lambda-note"></a>
要导入您创建的在 AWS IoT Greengrass V1 上运行的 Lambda 函数，必须为函数使用的功能（例如机密、本地阴影和流管理器）定义各个组件依赖关系。将这些组件定义为[硬依赖关系](component-recipe-reference.md)，以便您的 Lambda 函数组件在依赖关系更改状态时重新启动。有关更多信息，请参阅 [导入 V1 Lambda 函数](set-up-v2-test-device.md#run-v1-lambda-functions)。

在 **Lambda 函数配置 → 其他参数 → 组件依赖关系**下，完成以下步骤，指定 Lambda 函数的组件依赖关系。

1.  选择**添加依赖关系**。

1. 为添加的每个组件依赖关系指定以下选项：
   + **组件名称** – 组件名称。例如，输入 **aws.greengrass.StreamManager**，以包含[流管理器组件](stream-manager-component.md)。
   + **版本要求** –npm 样式的语义版本约束，用于标识此组件依赖关系的兼容版本。您可以指定一个版本或一系列版本。例如，输入 **^1.0.0**，以指定此 Lambda 函数依赖于流管理器组件第一个主要版本中的任何版本。有关语义版本约束的更多信息，请参阅 [npm semver 计算器](https://semver.npmjs.com/)。
   + **类型** – 依赖关系的类型。从以下选项中进行选择：
     + **硬性** – 如果依赖关系更改状态，Lambda 函数组件将会重新启动。这是默认选择。
     + **软性** – 如果依赖关系更改状态，Lambda 函数组件不会重新启动。

1. 要移除组件依赖关系，请选择该组件依赖关系旁边的**移除**

## 第 5 步：（可选）在容器中运行 Lambda 函数
<a name="import-lambda-console-run-isolated"></a>

默认情况下，Lambda 函数在 AWS IoT Greengrass 核心软件内部的隔离运行时环境中运行。您也可以选择将 Lambda 函数作为一个进程运行，而不进行任何隔离。（即在**无容器**模式下）。

在 **Linux 进程配置**下的**隔离模式**中，从以下选项中选择 Lambda 函数的容器化：
+ **Greengrass 容器** – Lambda 函数在容器中运行。这是默认选择。
+ **无容器** – Lambda 函数作为常规 Linux 进程运行，没有任何隔离。

如果您在容器中运行 Lambda 函数，请完成以下步骤来配置 Lambda 函数的流程配置。

1. 可以配置内存量和系统资源（例如卷和设备），以供容器使用。

   在**容器参数**下，执行以下操作。

   1. 对于**内存大小**，请输入要分配给容器的内存大小。您可以以 **MB** 或 **KB** 为单位指定内存大小。

   1. 对于**只读系统文件夹**，请选择容器是否可以从设备的 `/sys` 文件夹中读取信息。默认值为 **False**。

1. （可选）配置容器化 Lambda 函数可以访问的本地卷。定义卷时， AWS IoT Greengrass Core 软件会将源文件挂载到容器内的目标位置。

   1. 在**卷**下，选择**添加卷**。

   1. 为添加的每个卷指定以下选项：
      + **物理卷** – 核心设备上源文件的夹路径。
      + **逻辑卷** – 容器中目标文件的夹路径。
      + **权限** –（可选）从容器访问源文件夹的权限。从以下选项中进行选择：
        + **只读** – Lambda 函数对源文件夹具有只读访问权限。这是默认选择。
        + **读写** – Lambda 函数对源文件夹具有读/写访问权限。
      + **添加组所有者** –（可选）是否将运行 Lambda 函数组件的系统组添加为源文件夹的所有者。默认值为 **False**。

   1. 要移除卷，请选择要移除的卷旁边的**移除**。

1. （可选）配置容器化 Lambda 函数可以访问的本地系统设备。

   1. 在**设备**下，选择**添加设备**。

   1. 为添加的每台设备指定以下选项：
      + **挂载路径** – 核心设备上系统设备的路径。
      + **权限** –（可选）从容器访问系统设备的权限。从以下选项中进行选择：
        + **只读** – Lambda 函数对系统设备具有只读访问权限。这是默认选择。
        + **读写** – Lambda 函数对源文件夹具有读/写访问权限。
      + **添加组所有者** –（可选）是否将运行 Lambda 函数组件的系统组添加为系统设备的所有者。默认值为 **False**。

## 第 6 步：创建 Lambda 函数组件
<a name="import-lambda-console-create-deploy"></a>

为 Lambda 函数组件配置设置后，选择**创建**来完成新组件的创建。

要在核心设备上运行 Lambda 函数，您可以将新组件部署到核心设备。有关更多信息，请参阅 [将 AWS IoT Greengrass 组件部署到设备](manage-deployments.md)。