AWS IoT Greengrass:如何使用 AWS 管理控制台配置本地资源访问
AWS IoT Greengrass:如何使用 AWS 管理控制台配置本地资源访问
您可以配置 Lambda 函数以安全访问主机 Greengrass 核心设备上的本地资源。本地资源是指物理上存在于主机中的总线和外围设备,或主机操作系统上的文件系统卷。
步骤 1:创建 Lambda 函数部署程序包
在该步骤中,您将创建一个 Lambda 函数部署程序包,这是包括函数代码和依赖项的 ZIP 文件。您还可以下载 AWS IoT Greengrass 核心开发工具包,以包括在程序包中作为依赖项。
- 
在您的计算机上,将以下 Python 脚本复制到名为 lraTest.py的本地文件。这是 Lambda 函数的应用程序逻辑。# Demonstrates a simple use case of local resource access. # This Lambda function writes a file test to a volume mounted inside # the Lambda environment under destLRAtest. Then it reads the file and # publishes the content to the AWS IoT LRAtest topic. import sys import greengrasssdk import platform import os import logging # Setup logging to stdout logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.DEBUG) # Create a Greengrass Core SDK client. client = greengrasssdk.client('iot-data') volumePath = '/dest/LRAtest' def function_handler(event, context): try: client.publish(topic='LRA/test', payload='Sent from AWS IoT Greengrass Core.') volumeInfo = os.stat(volumePath) client.publish(topic='LRA/test', payload=str(volumeInfo)) with open(volumePath + '/test', 'a') as output: output.write('Successfully write to a file.') with open(volumePath + '/test', 'r') as myfile: data = myfile.read() client.publish(topic='LRA/test', payload=data) except Exception as e: logger.error('Failed to publish message: ' + repr(e)) return
- 
从 AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。 
- 
解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 greengrasssdk文件夹。
- 
将以下项目压缩到名为 lraTestLambda.zip的文件中:- lraTest.py。应用程序逻辑。
- greengrasssdk。所有 Python Lambda 函数必需的库。
  lraTestLambda.zip文件即 Lambda 函数部署程序包。
步骤 2:创建并发布 Lambda 函数
- 创建Lambda函数。

- 
在 (基本信息) 部分中,使用以下值。 - 
对于 (函数名称),输入 TestLRA。
- 
对于 (运行时),选择 Python 3.7。 
- 
对于(权限),请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。 
 
- 
- 
 
- 
点击(创建函数)。 
- 
在函数的 (配置) 选项卡上,对于 (函数代码),使用以下值: - 对于 代码输入种类,选择上传 .zip 文件。
- 对于 (运行时),选择 Python 3.7。
- 对于 (处理程序),请输入 lraTest.function_handler。
  
- 
选择 (上传)。 
- 
选择您的 lraTestLambda.zip部署程序包。
- 
在页面顶部,选择(保存)。  
- 
在(操作)中,选择(发布新版本)。  
- 
对于 (版本描述),输入 First version,然后选择 (Publish)。 
- 
在 (创建新的别名) 页面上,对于 (名称),输入 test。对于 (版本),输入 1。注意 AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。 
- 
选择 (创建)。  
步骤 3:将 Lambda 函数添加到 Greengrass 组
在该步骤中,您将该函数添加到您的组并配置该函数的生命周期。
- 
在组控制页面选择(Lambda)中的(添加Lambda)。  
- 
选择使用现有Lambda。  
- 
在 (使用现有 Lambda) 页面上,选择 TestLRA,然后选择 (下一步)。  
- 
在 (选择 Lambda 版本) 页面上,选择 Alias:test,然后选择 (完成)。 接下来,配置 Lambda 函数的生命周期。  
- 
在 TestLRA 配置页面上,选择(编辑)。  
- 
在 (组特定的 Lambda 配置) 页面上,对于 (超时),选择 (30 秒)。 重要 使用本地资源的 Lambda 函数(如本过程中所述)必须在 Greengrass 容器中运行。否则,如果尝试部署该函数,则部署将失败。有关更多信息,请参阅容器化。  
步骤 4:将本地资源添加到 Greengrass 组
在该步骤中,您将本地卷资源添加到 Greengrass 组并为该函数授予对资源的读写访问权限。本地资源有一个群组级别的作用域。您可以给组中的任何 Lambda 函数授予权限以访问资源。
- 
在组配置页面上,选择(Lambda)中的TestLRA函数,进入以下界面。  
- 
选择(资源)中的(添加本地资源)  
- 
选择(添加本地资源)。  
- 
在 (创建本地资源) 页面上,使用以下值: - 
对于 (资源名称),输入 testDirectory。
- 
对于 (资源类型),选择 Volume (卷)。 
- 
对于 (源路径),输入 /src/LRAtest。主机操作系统上必须存在该路径。源路径是核心设备文件系统上的资源的绝对路径。此位置位于函数在其中运行的容器之外。该路径不能以 /sys开头。
- 
对于 (目的地路径),输入 /dest/LRAtest。主机操作系统上必须存在该路径。目的地路径是 Lambda 命名空间中资源的绝对路径。此位置位于函数在其中运行的容器之内。 
- 
在 (组所有者文件访问权限) 下,选择 (自动添加拥有资源的 Linux 组的操作系统组权限)。 组所有者文件访问权限选项可让您授予对 Lambda 进程的额外的文件访问权限。 
- 
选择(读写访问权限)。 
 
- 
- 
选择(保存) 
步骤 5:将订阅添加到 Greengrass 组
在该步骤中,您将两个订阅添加到 Greengrass 组。这些订阅在 Lambda 函数与 AWS IoT 之间启用双向通信。
- 
在组配置页面上,选择 (订阅),然后选择 (添加订阅)。  
- 
在选择您的源和目标页面,配置源和目标,如下所示: - 
对于(选择源),选择 (Lambdas),然后选择 TestLRA。 
- 
对于(选择目标),选择(服务),然后选择 IoT Cloud。 
- 
选择 (下一步)。 
  
- 
- 
在 (利用主题筛选您的数据) 页面上,对于 (主题筛选条件),输入 LRA/test,然后选择 (下一步)。 
- 
然后再添加一个订阅。源为IoT Cloud,目标为TestLRA,主题筛选条件为invoke/LRAFunction  
步骤 6:部署 AWS IoT Greengrass 组
确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。
- 
要检查守护程序是否正在运行,请执行以下操作: ps aux | grep -E 'greengrass.*daemon'如果输出包含 /greengrass/ggc/packages/1.10.0/bin/daemon的root条目,则表示守护程序正在运行。注意 路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。 
- 
要启动守护程序,请执行以下操作: cd /greengrass/ggc/core/ sudo ./greengrassd start
- 
在组配置页面上,选择 (部署),然后从 (操作) 菜单中,选择 (部署)。  部署可能出现问题。  - 
第一个问题是因为不存在路径 /src/LRAtest和/dest/LRAtest。在树莓派上通过以下命令创建文件路径即可。sudo mkdir /src cd /src mkdir LRAtest sudo mkdir /dest cd /dest mkdir LRAtest
- 
第二个问题是因为ggc用户没有对刚刚创建的文件的读取写入权限,在树莓派上执行以下命令以给所有用户所有权限。 sudo chmod -R 777 src/ sudo chmod -R 777 dest/然后就可以部署成功了。 
 
- 
测试本地资源访问
现在,您可以验证是否正确配置了本地资源访问。要进行测试,您需要订阅 LRA/test 主题,并发布到 invoke/LRAFunction 主题。如果 Lambda 函数将预期的负载发送到 AWS IoT,则测试成功。
- 
在 AWS IoT 控制台主页上的左侧窗格中,选择 (测试)。  
- 
在 (订阅) 部分中,对于 (订阅主题),请输入 LRA/test。对于 (MQTT 负载显示),选择 (将负载显示为字符串)。
- 
选择 (订阅主题)。您的 Lambda 函数将发布到 LRA/test 主题。  
- 
在 (发布) 部分中,输入 invoke/LRAFunction,然后选择 Publish to topic 来调用您的 Lambda 函数。如果页面显示函数的三个消息负载,则测试成功。 Lambda 函数创建的测试文件位于 Greengrass 核心设备上的 /src/LRAtest目录中。尽管该 Lambda 函数写入到/dest/LRAtest目录中的文件,但该文件仅在 Lambda 命名空间中是可见的。您在常规 Linux 命名空间中看不到它。对目标路径的任何更改都会反映在文件系统上的源路径中。

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号