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.log
lightController.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