使用 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 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 还支持用于执行机器学习推理的资源类型。有关更多信息,请参阅 执行机器学习推理

要求

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

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

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

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

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

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

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

/proc 目录下的卷资源

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

  • 您必须使用的是Amazon IoT GreengrassCore 软件 v1.6 版或更高版本。

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

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

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

组所有者文件访问权限

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassLambda 函数进程通常作为运行ggc_userggc_group. 不过,您可以在本地资源定义中,向 Lambda 函数进程提供额外的文件访问权限,如下所示:

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

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

网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassLambda 函数进程继承ggc_userggc_group和 Linux 组(如果已添加)。要使 Lambda 函数能够访问资源,Lambda 函数进程必须具有资源的所需权限。如有必要,您可以使用 chmod(1) 命令更改资源的权限。

另请参阅