AWS IoT Greengrass 入门-模块6: 访问其他 AWS 服务
AWS IoT Greengrass 入门-模块6: 访问其他 AWS 服务
本高级模块说明 AWS IoT Greengrass 核心如何与云中的其他 AWS 服务交互。它在[模块 5]中的交通信号灯示例基础上构建,并添加一个 Lambda 函数来处理影子状态并将摘要上传到 Amazon DynamoDB 表。
配置组角色
组角色是您创建并附加到组的 IAM 角色。此角色包含您部署的 Lambda 函数(和连接器)用来访问 AWS 服务的权限。
在此步骤中,您将创建权限策略,该策略允许对 Amazon DynamoDB 表执行描述、创建和更新操作。然后,您可以将该策略附加到新角色并将该角色与您的 Greengrass 组关联。
首先,创建一个客户托管策略,该策略授予这个模块中的 Lambda 函数要求的权限。
- 
在 IAM 控制台的导航窗格中,选择 (策略),然后选择 (创建策略)。   
- 
在 JSON 选项卡中,将占位符内容替换为以下策略。此模块中的 Lambda 函数使用这些权限来创建和更新名为 CarStats的 DynamoDB 表。{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionsForModule6", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:CreateTable", "dynamodb:PutItem" ], "Resource": "arn:aws:dynamodb:*:*:table/CarStats" } ] } 
- 
选择 (查看策略)。 
- 
对于 (名称),输入 greengrass_CarStats_Table,然后选择 (创建策略)。 接下来,创建一个使用新策略的角色。 
- 
在导航窗格中,选择角色,然后选择创建角色。  
- 
在选择受信任实体的类型下,选择 AWS 服务。 
- 
在 (选择将使用此角色的服务) 下面,选择 Greengrass,然后选择 (下一步:权限)。  
- 
在 (附加权限策略) 下,选择新的 greengrass_CarStats_Table策略。 
- 
依次选择 (下一步: 标签) 和 (下一步: 查看)。本教程中未使用标签。 
- 
对于 (角色名称),输入 Greengrass_Group_Role。
- 
对于 (角色描述),输入 Greengrass group role for connectors and user-defined Lambda functions。 
- 
选择(创建角色)。 现在,将该角色附加到 Greengrass 组。 
- 
在 AWS IoT 控制台中的 Greengrass 下,选择(组),然后选择您的 AWS IoT Greengrass 组。 
- 
选择 (设置),然后选择 (添加角色)。  
- 
从您的角色列表中选择 Greengrass_Group_Role,然后选择 Save (保存)。  
创建并配置 Lambda 函数
在本步骤中,您将创建一个 Lambda 函数,该函数将跟踪通过交通信号灯的汽车的数量。每当 GG_TrafficLight 影子状态更改为 G 时,Lambda 函数都将模拟通过的随机数量的汽车(从 1 到 20)。每当 G 灯第三次改变,Lambda 函数都会将基本统计数据(如最小值和最大值)发送到 DynamoDB 表。
- 
在您的计算机上,创建一个名为 car_aggregator的文件夹。
- 
从GitHub 上的 AWS IoT Greengrass 样本存储库中,将 carAggregator.py函数下载到car_aggregator文件夹中。这是您的 Lambda 函数代码。
- 
在命令行终端窗口中运行以下命令,以将 Boto3 - 适用于 Python 的 AWS 开发工具包软件包及其依赖项安装到 car_aggregator文件夹中。Greengrass Lambda 函数使用 AWS 开发工具包来访问其他 AWS 服务。(对于 Windows,以管理员身份启动命令提示符。)pip install boto3 -t path-to-car_aggregator-folder
- 
将 car_aggregator文件夹的内容压缩到一个名为car_aggregator.zip的文件中。(压缩文件夹的内容,而不是文件夹。) 此即 Lambda 函数部署程序包。 
- 
在 Lambda 控制台中,创建一个名为 GG_Car_Aggregator的函数,然后按下面所示设置其余字段:- 对于 (运行时),选择 Python 2.7。
- 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)
 选择创建函数。  
- 
传您的 Lambda 函数部署软件包: - 在(配置)选项卡上的(函数代码)下,设置以下字段:
- 对于 (代码输入种类),选择上传 .zip 文件。
- 对于 (运行时),选择 Python 2.7。
- 对于 (处理程序),输入 carAggregator.function_handler。
 
- 选择(上传),然后选择 car_aggregator.zip。
- 选择 (保存)。
  
- 在(配置)选项卡上的(函数代码)下,设置以下字段:
- 
发布 Lambda 函数,然后创建一个名为 GG_CarAggregator的别名。   
- 
在 AWS IoT 控制台中,将刚才创建的 Lambda 函数添加到 AWS IoT Greengrass 组: - 在组配置页面上,选择 (Lambdas),然后选择(添加 Lambda)。
- 选择 (使用现有Lambda)。
  
- 
选择 (别名: GG_CarAggregator),然后选择(完成)。  
- 
编辑 Lambda 函数配置: - 
选择与 Lambda 函数关联的省略号 (…),然后选择编辑配置。  
- 
在内存限制下,输入 64 MB。
- 
在 Lambda 生命周期下,选择 (使此函数长时间生存,保持其无限期运行),然后选择(更新)。  
 
- 
配置订阅
在本步骤中,您将创建一个订阅,使得 GG_TrafficLight 影子能够将更新后的状态信息发送到 GG_Car_Aggregator Lambda 函数。此订阅会添加到您在模块 5 中创建的订阅中,这些订阅在此模块中都是必需的。
- 
在组配置页面中,选择 (订阅),然后选择 (添加订阅)。 
- 
在(选择您的源和目标)页上,设置以下值: - 对于(选择源),选择(服务),然后选择(本地影子服务)。
- 对于(选择目标),选择 (Lambda),然后选择 GG_Car_Aggregator。
  选择 (下一步)。 
- 
在 Filter your data with a topic (利用主题筛选您的数据) 页面上,对于 Topic filter (主题筛选条件),输入以下主题: $aws/things/GG_TrafficLight/shadow/update/documents 
- 
选择 (下一步),然后选择 (完成)。 此模块需要新订阅和您在模块 5 中创建的订阅。 
- 
确保 AWS IoT Greengrass 守护程序正在运行。 
- 
在组配置页面上,从 (操作) 中选择 (部署)。  
测试通信
在您的计算机(不是 AWS IoT Greengrass Core 设备)上,打开两个命令提示符窗口。一个窗口代表 GG_Switch 设备,另一个窗口代表 GG_TrafficLight 设备。
- 
从 GG_Switch 设备窗口中,运行以下命令。 - 将 path-to-certs-folder替换为包含证书、密钥和 Python 文件的文件夹的路径。
- 将 AWS_IOT_ENDPOINT替换为您的终端节点。
- 将两个 switch实例替换为 GG_Switch 设备的文件名中的哈希值。
 cd 'path-to-certs-folder' python lightController.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'switch'.cert.pem --key 'switch'.private.key --thingName GG_TrafficLight --clientId GG_Switch
- 将 
- 
从 GG_TrafficLight 设备窗口中,运行以下命令。 - 将 path-to-certs-folder替换为包含证书、密钥和 Python 文件的文件夹的路径。
- 将 AWS_IOT_ENDPOINT替换为您的终端节点。
- 将两个 light实例替换为 GG_TrafficLight 设备的文件名中的哈希值。
 cd 'path-to-certs-folder' python trafficLight.py --endpoint 'AWS_IOT_ENDPOINT' --rootCA root-ca-cert.pem --cert 'light'.cert.pem --key 'light'.private.key --thingName GG_TrafficLight --clientId GG_TrafficLight每隔 20 秒,开关会将影子状态更新为 G、Y 和 R,并且灯会显示新状态。 
- 将 
- 
在每次第 3 个绿灯时(每 3 分钟),都会触发 Lambda 函数的函数处理程序,并会创建新的 DynamoDB 记录。在 lightController.py和trafficLight.py运行了 3 分钟后,转到 AWS 管理控制台,并打开 DynamoDB 控制台。 
- 
在 AWS 区域菜单中选择 美国东部(弗吉尼亚北部)。这是 GG_Car_Aggregator函数创建表的区域。
- 
在导航窗格中,选择 (表),然后选择 CarStats 表。 在项目选项卡上,您应该看到包含有关通过的汽车数的基本统计数据的条目(每隔 3 分钟创建一个条目)。您可能需要选择刷新按钮来查看表的更新。  
- 
如果测试不成功,您可以在 Greengrass 日志中查找故障排除信息。 - 
切换到根用户并导航到 log目录。访问 AWS IoT Greengrass 日志需要根权限。sudo su cd /greengrass/ggc/var/log
- 
检查 runtime.log有无错误。cat system/runtime.log | grep 'ERROR'
- 
检查 Lambda 函数生成的日志。 cat user/区域/account-id/GG_Car_Aggregator.loglightController.py和trafficLight.py脚本将连接信息存储在groupCA文件夹中,该文件夹与脚本在同一文件夹中创建。
 本基础教程到此结束。您现在应该了解了 AWS IoT Greengrass 编程模型及其基本概念,包括 AWS IoT Greengrass 核心、组、订阅、设备以及在边缘站点运行的 Lambda 函数的部署过程。 
- 
- 
关闭 AWS IoT Greengrass Core 设备: sudo halt
- 
停止 AWS IoT Greengrass 守护程序: cd /greengrass/ggc/core/ sudo ./greengrassd stop

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