zoukankan      html  css  js  c++  java
  • AWS IoT Greengrass:如何使用 AWS 管理控制台配置本地资源访问

    AWS IoT Greengrass:如何使用 AWS 管理控制台配置本地资源访问

    您可以配置 Lambda 函数以安全访问主机 Greengrass 核心设备上的本地资源。本地资源是指物理上存在于主机中的总线和外围设备,或主机操作系统上的文件系统卷。

    步骤 1:创建 Lambda 函数部署程序包

    在该步骤中,您将创建一个 Lambda 函数部署程序包,这是包括函数代码和依赖项的 ZIP 文件。您还可以下载 AWS IoT Greengrass 核心开发工具包,以包括在程序包中作为依赖项。

    1. 在您的计算机上,将以下 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
      
    2. AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。

    3. 解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 greengrasssdk 文件夹。

    4. 将以下项目压缩到名为 lraTestLambda.zip 的文件中:

      • lraTest.py。应用程序逻辑。
      • greengrasssdk。所有 Python Lambda 函数必需的库。

      lraTestLambda.zip 文件即 Lambda 函数部署程序包。

    步骤 2:创建并发布 Lambda 函数

    1. 创建Lambda函数。

    1. (基本信息) 部分中,使用以下值。

      • 对于 (函数名称),输入 TestLRA

      • 对于 (运行时),选择 Python 3.7

      • 对于(权限),请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。

    2. 点击(创建函数)

    3. 在函数的 (配置) 选项卡上,对于 (函数代码),使用以下值:

      1. 对于 代码输入种类,选择上传 .zip 文件
      2. 对于 (运行时),选择 Python 3.7
      3. 对于 (处理程序),请输入 lraTest.function_handler

    4. 选择 (上传)

    5. 选择您的 lraTestLambda.zip 部署程序包。

    6. 在页面顶部,选择(保存)

    7. (操作)中,选择(发布新版本)

    8. 对于 (版本描述),输入 First version,然后选择 (Publish)

    9. (创建新的别名) 页面上,对于 (名称),输入 test。对于 (版本),输入 1

      注意

      AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。

    10. 选择 (创建)

    步骤 3:将 Lambda 函数添加到 Greengrass 组

    在该步骤中,您将该函数添加到您的组并配置该函数的生命周期。

    1. 在组控制页面选择(Lambda)中的(添加Lambda)

    2. 选择使用现有Lambda

    3. (使用现有 Lambda) 页面上,选择 TestLRA,然后选择 (下一步)

    4. (选择 Lambda 版本) 页面上,选择 Alias:test,然后选择 (完成)

      接下来,配置 Lambda 函数的生命周期。

    5. TestLRA 配置页面上,选择(编辑)

    6. (组特定的 Lambda 配置) 页面上,对于 (超时),选择 (30 秒)

      重要

      使用本地资源的 Lambda 函数(如本过程中所述)必须在 Greengrass 容器中运行。否则,如果尝试部署该函数,则部署将失败。有关更多信息,请参阅容器化

    步骤 4:将本地资源添加到 Greengrass 组

    在该步骤中,您将本地卷资源添加到 Greengrass 组并为该函数授予对资源的读写访问权限。本地资源有一个群组级别的作用域。您可以给组中的任何 Lambda 函数授予权限以访问资源。

    1. 在组配置页面上,选择(Lambda)中的TestLRA函数,进入以下界面。

    2. 选择(资源)中的(添加本地资源)

    3. 选择(添加本地资源)

    4. (创建本地资源) 页面上,使用以下值:

      1. 对于 (资源名称),输入 testDirectory

      2. 对于 (资源类型),选择 Volume (卷)

      3. 对于 (源路径),输入 /src/LRAtest。主机操作系统上必须存在该路径。

        源路径是核心设备文件系统上的资源的绝对路径。此位置位于函数在其中运行的容器之外。该路径不能以 /sys 开头。

      4. 对于 (目的地路径),输入 /dest/LRAtest。主机操作系统上必须存在该路径。

        目的地路径是 Lambda 命名空间中资源的绝对路径。此位置位于函数在其中运行的容器之内。

      5. (组所有者文件访问权限) 下,选择 (自动添加拥有资源的 Linux 组的操作系统组权限)

        组所有者文件访问权限选项可让您授予对 Lambda 进程的额外的文件访问权限。

      6. 选择(读写访问权限)

    5. 选择(保存)

    步骤 5:将订阅添加到 Greengrass 组

    在该步骤中,您将两个订阅添加到 Greengrass 组。这些订阅在 Lambda 函数与 AWS IoT 之间启用双向通信。

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

    2. 选择您的源和目标页面,配置源和目标,如下所示:

      • 对于(选择源),选择 (Lambdas),然后选择 TestLRA

      • 对于(选择目标),选择(服务),然后选择 IoT Cloud

      • 选择 (下一步)

    3. (利用主题筛选您的数据) 页面上,对于 (主题筛选条件),输入 LRA/test,然后选择 (下一步)

    4. 然后再添加一个订阅。源为IoT Cloud,目标为TestLRA,主题筛选条件为invoke/LRAFunction

    步骤 6:部署 AWS IoT Greengrass 组

    确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

    1. 要检查守护程序是否正在运行,请执行以下操作:

      ps aux | grep -E 'greengrass.*daemon'
      

      如果输出包含 /greengrass/ggc/packages/1.10.0/bin/daemonroot 条目,则表示守护程序正在运行。

      注意

      路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。

    2. 要启动守护程序,请执行以下操作:

      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      
    3. 在组配置页面上,选择 (部署),然后从 (操作) 菜单中,选择 (部署)

      部署可能出现问题。

      • 第一个问题是因为不存在路径/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,则测试成功。

    1. 在 AWS IoT 控制台主页上的左侧窗格中,选择 (测试)

    2. (订阅) 部分中,对于 (订阅主题),请输入 LRA/test。对于 (MQTT 负载显示),选择 (将负载显示为字符串)

    3. 选择 (订阅主题)。您的 Lambda 函数将发布到 LRA/test 主题。

    4. (发布) 部分中,输入 invoke/LRAFunction,然后选择 Publish to topic 来调用您的 Lambda 函数。如果页面显示函数的三个消息负载,则测试成功。

      Lambda 函数创建的测试文件位于 Greengrass 核心设备上的 /src/LRAtest 目录中。尽管该 Lambda 函数写入到 /dest/LRAtest 目录中的文件,但该文件仅在 Lambda 命名空间中是可见的。您在常规 Linux 命名空间中看不到它。对目标路径的任何更改都会反映在文件系统上的源路径中。

  • 相关阅读:
    eclipse中的项目的JRE换成JDK
    Eclipse中maven项目的创建和运行
    git 发布命令
    vbox中虚拟ubuntu增加新的虚拟硬盘
    MyServer
    java常用的中间件
    高并发解决方案
    浅谈SpringMVC
    浅谈HIbernate
    javaweb笔记七
  • 原文地址:https://www.cnblogs.com/--Simon/p/12143695.html
Copyright © 2011-2022 走看看