使用 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 函数和连接器访问本地资源

此功能适用于 Amazon IoT Greengrass Core v1.3 及更高版本。

借助 Amazon IoT Greengrass,您可以在云中编写 Amazon Lambda 函数并配置连接器,并将其部署到核心设备以便在本地执行。在运行 Linux 的 Greengrass 核心上,这些本地部署的 Lambda 函数和连接器可以访问 Greengrass 核心设备上实际存在的本地资源。例如,要与通过 Modbus 或 CANbus 连接的设备通信,您可以启用 Lambda 函数以访问核心设备上的串行端口。要配置对本地资源的安全访问,您必须确保物理硬件以及 Greengrass 核心设备操作系统的安全性。

要开始访问本地资源,请查看以下教程:

支持的资源类型

您可以访问两种类型的本地资源:卷资源和设备资源。

卷资源

根文件系统上的文件或目录(/sys/dev/var 中的文件或目录除外)。其中包括:

  • 用于在 Greengrass Lambda 函数中读取或写入信息的文件夹或文件(例如,/usr/lib/python2.x/site-packages/local)。

  • 主机的 /proc 文件系统中的文件夹或文件(例如,/proc/net/proc/stat)。在 v1.6 或更高版本中受到支持。有关其他要求,请参阅/proc 目录下的卷资源

提示

要将 /var/var/run/var/lib 目录配置为卷资源,请先将目录挂载到不同的文件夹,然后配置文件夹作为卷资源。

配置卷资源时,您可以指定路径和目标路径。源路径是资源在主机上的绝对路径。目的地路径是资源在 Lambda 命名空间环境内的绝对路径。这是 Greengrass Lambda 函数或连接器在其中运行的容器。对目标路径的任何更改都会反映在主机文件系统上的源路径中。

注意

目标路径中的文件仅在 Lambda 命名空间中可见。您在常规 Linux 命名空间中看不到它们。

设备资源

/dev 下的文件。设备资源只允许 /dev 下的字符设备或块存储设备。其中包括:

  • 用于与通过串行端口连接的设备进行通信的串行端口(例如,/dev/ttyS0/dev/ttyS1)。

  • 用于连接 USB 外围设备的 USB(例如,/dev/ttyUSB0/dev/bus/usb)。

  • 用于通过 GPIO 连接的传感器和致动器的 GPIO(例如,/dev/gpiomem)。

  • 用于使用板载 GPU 加快机器学习的 GPU(例如,/dev/nvidia0)。

  • 用于捕获图像和视频的摄像机(例如,/dev/video0)。

注意

/dev/shm 是一个例外。只能将其配置为卷资源。/dev/shm 下的资源必须授予 rw 权限。

Amazon IoT Greengrass 还支持用于执行机器学习推理的资源类型。有关更多信息,请参阅执行机器学习推理

要求

以下要求适用于配置对本地资源的安全访问:

  • 您必须使用 Amazon IoT Greengrass Core v1.3 或更高版本。要为主机的 /proc 目录创建资源,您必须使用 v1.6 或更高版本。

  • 必须在 Greengrass 核心设备上正确安装本地资源(包括任何所需的驱动程序和库),并且该资源在使用期间持续可用。

  • 所需的资源操作以及对资源的访问不得要求根权限。

  • 只有 readread and write 权限可用。Lambda 函数无法对资源执行特权操作。

  • 您必须提供 Greengrass 核心设备的操作系统上的本地资源的完整路径。

  • 资源名称或 ID 的最大长度为 128 个字符,并且必须使用模式 [a-zA-Z0-9:_-]+

/proc 目录下的卷资源

以下注意事项适用于主机的 /proc 目录中的卷资源。

  • 您必须使用 Amazon IoT Greengrass Core v1.6 或更高版本。

  • 您可以允许 Lambda 函数进行只读访问,但不能进行读写访问。该访问级别是由 Amazon IoT Greengrass 管理的。

  • 您可能还需要授予操作系统组权限以在文件系统中启用读取访问。例如,假设源目录或文件具有 660 文件权限,这意味着仅组中的所有者或用户具有读取(和写入)访问权限。在这种情况下,您必须添加资源的操作系统组所有者权限。有关更多信息,请参阅组所有者文件访问权限

  • 主机环境和 Lambda 命名空间均包含 /proc 目录,因此,请务必在指定目标路径时避免命名冲突。例如,如果 /proc 是源路径,您可以将 /host-proc 指定为目标路径(或“/proc”以外的任何路径名称)。

组所有者文件访问权限

Amazon IoT Greengrass Lambda 函数进程通常以 ggc_userggc_group 身份运行。不过,您可以在本地资源定义中,向 Lambda 函数赋予额外的文件访问权限,如下所示:

  • 要添加拥有资源的 Linux 组的权限,请使用 GroupOwnerSetting#AutoAddGroupOwner 参数或 自动添加拥有资源的 Linux 组的操作系统组权限控制台选项。

  • 要添加不同 Linux 组的权限,请使用 GroupOwnerSetting#GroupOwner 参数或 指定另一个系统组以添加文件系统权限控制台选项。如果 GroupOwnerSetting#AutoAddGroupOwner 为 true,则忽略 GroupOwner 值。

Amazon IoT Greengrass Lambda 函数进程继承 ggc_userggc_group 和 Linux 组(如已添加)的所有文件系统权限。要使 Lambda 函数能够访问资源,Lambda 函数进程必须具有资源的所需权限。如有必要,您可以使用 chmod(1) 命令更改资源的权限。

另请参阅

  • Amazon Web Services 一般参考》中的资源服务限额