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 核心设备上正确安装本地资源(包括任何所需的驱动程序和库),并且该资源在使用期间持续可用。
-
所需的资源操作以及对资源的访问不得要求根权限。
-
只有
read
或read 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_user
和ggc_group
. 不过,您可以在本地资源定义中,向 Lambda 函数进程提供额外的文件访问权限,如下所示:
-
要添加拥有资源的 Linux 组的权限,请使用
GroupOwnerSetting#AutoAddGroupOwner
参数或自动添加拥有资源的系统组的文件系统权限控制台选项。 -
要添加不同 Linux 组的权限,请使用
GroupOwnerSetting#GroupOwner
参数或指定其他系统组以添加文件系统权限控制台选项。如果GroupOwnerSetting#AutoAddGroupOwner
为 true,则忽略GroupOwner
值。
网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon IoT GreengrassLambda 函数进程继承ggc_user
、ggc_group
和 Linux 组(如果已添加)。要使 Lambda 函数能够访问资源,Lambda 函数进程必须具有资源的所需权限。如有必要,您可以使用 chmod(1)
命令更改资源的权限。
另请参阅
-
Service Quotas以获取资源Amazon Web Services 一般参考