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 函数要求的权限。

  1. 在 IAM 控制台的导航窗格中,选择 (策略),然后选择 (创建策略)

  2. 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"
            }
        ]
    }
    

  3. 选择 (查看策略)

  4. 对于 (名称),输入 greengrass_CarStats_Table,然后选择 (创建策略)

    接下来,创建一个使用新策略的角色。

  5. 在导航窗格中,选择角色,然后选择创建角色

  6. 选择受信任实体的类型下,选择 AWS 服务

  7. (选择将使用此角色的服务) 下面,选择 Greengrass,然后选择 (下一步:权限)

  8. (附加权限策略) 下,选择新的 greengrass_CarStats_Table 策略。

  9. 依次选择 (下一步: 标签)(下一步: 查看)。本教程中未使用标签。

  10. 对于 (角色名称),输入 Greengrass_Group_Role

  11. 对于 (角色描述),输入 Greengrass group role for connectors and user-defined Lambda functions

  12. 选择(创建角色)

    现在,将该角色附加到 Greengrass 组。

  13. 在 AWS IoT 控制台中的 Greengrass 下,选择(组),然后选择您的 AWS IoT Greengrass 组。

  14. 选择 (设置),然后选择 (添加角色)

  15. 从您的角色列表中选择 Greengrass_Group_Role,然后选择 Save (保存)

创建并配置 Lambda 函数

在本步骤中,您将创建一个 Lambda 函数,该函数将跟踪通过交通信号灯的汽车的数量。每当 GG_TrafficLight 影子状态更改为 G 时,Lambda 函数都将模拟通过的随机数量的汽车(从 1 到 20)。每当 G 灯第三次改变,Lambda 函数都会将基本统计数据(如最小值和最大值)发送到 DynamoDB 表。

  1. 在您的计算机上,创建一个名为 car_aggregator 的文件夹。

  2. 从GitHub 上的 AWS IoT Greengrass 样本存储库中,将 carAggregator.py 函数下载到 car_aggregator 文件夹中。这是您的 Lambda 函数代码。

  3. 命令行终端窗口中运行以下命令,以将 Boto3 - 适用于 Python 的 AWS 开发工具包软件包及其依赖项安装到 car_aggregator 文件夹中。Greengrass Lambda 函数使用 AWS 开发工具包来访问其他 AWS 服务。(对于 Windows,以管理员身份启动命令提示符。)

    pip install boto3 -t path-to-car_aggregator-folder
    
  4. car_aggregator 文件夹的内容压缩到一个名为 car_aggregator.zip 的文件中。(压缩文件夹的内容,而不是文件夹。) 此即 Lambda 函数部署程序包。

  5. 在 Lambda 控制台中,创建一个名为 GG_Car_Aggregator 的函数,然后按下面所示设置其余字段:

    • 对于 (运行时),选择 Python 2.7
    • 对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)

    选择创建函数

  6. 传您的 Lambda 函数部署软件包:

    1. (配置)选项卡上的(函数代码)下,设置以下字段:
      • 对于 (代码输入种类),选择上传 .zip 文件
      • 对于 (运行时),选择 Python 2.7
      • 对于 (处理程序),输入 carAggregator.function_handler
    2. 选择(上传),然后选择 car_aggregator.zip
    3. 选择 (保存)

  7. 发布 Lambda 函数,然后创建一个名为 GG_CarAggregator 的别名。

  8. 在 AWS IoT 控制台中,将刚才创建的 Lambda 函数添加到 AWS IoT Greengrass 组:

    1. 在组配置页面上,选择 (Lambdas),然后选择(添加 Lambda)
    2. 选择 (使用现有Lambda)

  9. 选择 (别名: GG_CarAggregator),然后选择(完成)

  10. 编辑 Lambda 函数配置:

    • 选择与 Lambda 函数关联的省略号 (),然后选择编辑配置

    • 内存限制下,输入 64 MB

    • Lambda 生命周期下,选择 (使此函数长时间生存,保持其无限期运行),然后选择(更新)

配置订阅

在本步骤中,您将创建一个订阅,使得 GG_TrafficLight 影子能够将更新后的状态信息发送到 GG_Car_Aggregator Lambda 函数。此订阅会添加到您在模块 5 中创建的订阅中,这些订阅在此模块中都是必需的。

  1. 在组配置页面中,选择 (订阅),然后选择 (添加订阅)

  2. (选择您的源和目标)页上,设置以下值:

    • 对于(选择源),选择(服务),然后选择(本地影子服务)
    • 对于(选择目标),选择 (Lambda),然后选择 GG_Car_Aggregator

    选择 (下一步)

  3. Filter your data with a topic (利用主题筛选您的数据) 页面上,对于 Topic filter (主题筛选条件),输入以下主题:

    $aws/things/GG_TrafficLight/shadow/update/documents
    

  4. 选择 (下一步),然后选择 (完成)

    此模块需要新订阅和您在模块 5 中创建的订阅。

  5. 确保 AWS IoT Greengrass 守护程序正在运行。

  6. 在组配置页面上,从 (操作) 中选择 (部署)

测试通信

在您的计算机(不是 AWS IoT Greengrass Core 设备)上,打开两个命令提示符窗口。一个窗口代表 GG_Switch 设备,另一个窗口代表 GG_TrafficLight 设备。

  1. 从 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
    
  2. 从 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 个绿灯时(每 3 分钟),都会触发 Lambda 函数的函数处理程序,并会创建新的 DynamoDB 记录。在 lightController.pytrafficLight.py 运行了 3 分钟后,转到 AWS 管理控制台,并打开 DynamoDB 控制台。

  4. 在 AWS 区域菜单中选择 美国东部(弗吉尼亚北部)。这是 GG_Car_Aggregator 函数创建表的区域。

  5. 在导航窗格中,选择 (表),然后选择 CarStats 表。 在项目选项卡上,您应该看到包含有关通过的汽车数的基本统计数据的条目(每隔 3 分钟创建一个条目)。您可能需要选择刷新按钮来查看表的更新。

  6. 如果测试不成功,您可以在 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.pytrafficLight.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
    
原文地址:https://www.cnblogs.com/--Simon/p/11924426.html