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

此功能适用于Amazon IoT Greengrass核心 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)。在 1.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 还支持用于执行机器学习推理的资源类型。有关更多信息,请参阅 执行机器学习推理

Requirements

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

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

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

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

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

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

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

/proc 目录下的卷资源

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

  • 您必须使用Amazon IoT Greengrass1.6 版或更高版本的核心软件。

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

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

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

组所有者文件访问权限

一个Amazon IoT GreengrassLambda 函数进程通常作为ggc_userggc_group。不过,您可以在本地资源定义中,向 Lambda 函数进程提供额外的文件访问权限,如下所示:

  • 要添加拥有资源的 Linux 组的权限,请使用 GroupOwnerSetting#AutoAddGroupOwner 参数或 Automatically add OS group permissions of the Linux group that owns the resource (自动添加拥有资源的 Linux 组的操作系统组权限) 控制台选项。

  • 要添加不同 Linux 组的权限,请使用 GroupOwnerSetting#GroupOwner 参数或 Specify another OS group to add permission (指定另一个操作系统组以添加权限) 控制台选项。如果 GroupOwnerSetting#AutoAddGroupOwner 为 true,则忽略 GroupOwner 值。

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

另请参阅