如何使用 Amazon Web Services Management Console配置本地资源访问 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

Amazon IoT Greengrass Version 1在 2023 年 6 月 30 日之前,不再接收功能更新,只会收到安全补丁和错误修复。有关更多信息,请参阅 。Amazon IoT Greengrass V1维护政策. 强烈建议您迁移到Amazon IoT Greengrass Version 2,它补充说重要新功能对其他平台的支持.

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

如何使用 Amazon Web Services Management Console配置本地资源访问

此功能适用于于Amazon IoT GreengrassCore v1.3 及更高版本。

您可以配置 Lambda 函数,安全访问主机 Greengrass 核心设备上的本地资源。本地资源是指物理上存在于主机中的总线和外围设备,或主机操作系统上的文件系统卷。有关更多信息(包括要求和约束),请参阅使用 Lambda 函数和连接器访问本地资源

本教程介绍如何将Amazon Web Services Management Console配置对本地资源的访问权限Amazon IoT Greengrass核心设备。它包含以下高级步骤:

有关使用 Amazon Command Line Interface的教程,请参阅如何使用 配置本地资源访问Amazon命令行界面

先决条件

要完成此教程,需要:

  • Greengrass 组和 Greengrass 核心(v1.3 或更高版本)。要创建 Greengrass 组或核心,请参阅Amazon IoT Greengrass 入门

  • Greengrass 核心设备上的以下目录:

    • /src/LRAtest

    • /dest/LRAtest

    这些目录的所有者组必须具有对目录的读写访问权限。您可以使用以下命令授予访问权限:

    sudo chmod 0775 /src/LRAtest

第 1 步:创建 Lambda 函数部署软件包

在该步骤中,您将创建一个 Lambda 函数部署程序包,这是包括函数代码和依赖项的 ZIP 文件。您还可以下载 Amazon 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 Amazon 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 Amazon 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. Amazon IoT Greengrass核心开发工具包下载页面,下载Amazon IoT Greengrass适用于 Python 的核心 SDK 连接到你的计算机。

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

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

    • lraTest.py. 应用程序逻辑。

    • greengrasssdk. 所有 Python Lambda 函数必需的库。

    这些区域有:lraTestLambda.zipfile 是您的 Lambda 函数部署软件包。现在您已准备好创建 Lambda 函数和上传部署程序包。

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

在此步骤中,您将使用Amazon Lambda控制台创建 Lambda 函数并将其配置为使用您的部署程序包。接着,发布函数版本并创建别名。

首先,创建 Lambda 函数。

  1. 在 Amazon Web Services Management Console中,选择 Services (服务),然后打开 Amazon Lambda 控制台。

  2. 选择函数.

  3. 选择创建函数然后选择。从头开始创作.

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

    1. 对于 Function name(函数名称),请输入 TestLRA

    2. 对于 Runtime (运行时),选择 Python 3.7

    3. 适用于Permissions (权限),请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未由使用Amazon IoT Greengrass.

  5. 选择 Create function(创建函数)。

    
      突出显示“Create function (创建函数)”的“Create function (创建函数)”页面。

     

  6. 上传 Lambda 函数部署程序包并注册处理程序。

    1. 在存储库的代码选项卡,位于源代码,选择从以下项上传. 从下拉列表中,选择.zip 文件.

      
                带有 .zip 文件的上传自下拉列表突出显示。
    2. 选择上传,然后选择。lraTestLambda.zip部署程序包。然后,选择 Save (保存)

    3. 在存储库的代码函数的选项卡,位于Runtime,选择编辑,然后输入以下值。

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

      • 对于 Handler (处理程序),请输入 lraTest.function_handler

    4. 选择Save(保存)。

      注意

      这些区域有:测试按钮上的Amazon Lambda控制台与此函数一起使用时不起作用。这些区域有:Amazon IoT Greengrass核心开发工具包不包含在Amazon Lambda控制台。这些模块(例如,greengrass_common) 将在函数部署到你的 Greengrass 核心后提供给这些函数。

    接下来,发布您的 Lambda 函数的第一个版本。然后,创建版本的别名

    Greengrass 组可以按别名(推荐)或版本引用 Lambda 函数。使用别名,您可以更轻松地管理代码更新,因为在函数代码更新时,您无需更改订阅表或组定义。相反,您只需将别名指向新的函数版本。

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

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

  9. TestLRA: 1 配置页面上,从 Actions (操作) 中选择 Create alias (创建别名)

  10. 在存储库的创建别名页,为。名称,输入。test. 对于 Version (版本),输入 1

    注意

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

  11. 选择Create(创建)。

    
      突出显示“Create (创建)”的“Create a new alias (创建新别名)”页面。

    现在,您可以将 Lambda 函数添加到 Greengrass 组。

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

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

首先,将 Lambda 函数添加到 Greengrass 组。

  1. 在Amazon IoT控制台导航窗格,位于Manage,展开Greengrass 设备,然后选择。组 (V1).

  2. 选择要在其中添加 Lambda 函数的 Greengrass 组。

  3. 在组配置页面上,选择Lambda 函数选项卡。

  4. UNDER我的 Lambda 函数部分,选择。Add.

  5. 在存储库的添加 Lambda 函数页面上,选择。Lambda 函数. Select TestLRA.

  6. 选择Lambda 函数版本.

  7. Lambda 函数配置部分,选择系统用户和组Lambda 函数容器化.

     

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

  8. 对于 Timeout (超时),选择 30 seconds (30 秒)

    重要

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

  9. 在页面底部,选择添加 Lambda 函数.

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

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

  1. 在组配置页面上,选择资源选项卡。

  2. 本地资源部分,选择。Add.

  3. 在存储库的添加本地资源页面上,使用以下值。

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

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

    3. 适用于本地设备路径,输入。/src/LRAtest. 主机操作系统上必须存在该路径。

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

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

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

    5. UNDER系统组所有者和文件访问权限,选择。自动添加拥有资源的系统组的文件系统组的文件系统组权限.

      这些区域有:系统组所有者和文件访问权限选项可让您授予对 Lambda 进程的额外的文件访问权限。有关更多信息,请参阅 组所有者文件访问权限

  4. 选择 Add resource (添加资源)资源页面显示新的 testDirectory 资源。

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

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

首先,为 Lambda 函数创建一个订阅,用于将消息发送到Amazon IoT.

  1. 在组配置页面上,选择订阅选项卡。

  2. 选择 Add(添加)。

  3. 在存储库的创建订阅页面上,配置源和目标,如下所示:

    1. 适用于源类型,选择Lambda 函数,然后选择。TestLRA.

    2. 适用于Target type,选择服务,然后选择。IoT 云.

    3. 适用于主题筛选条件,输入。LRA/test,然后选择。创建订阅.

  4. 订阅页面显示新订阅。

     

    接下来,配置订阅以从 Amazon IoT 调用函数。

  5. 订阅页面,选择添加订阅

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

    1. 适用于源类型,选择Lambda 函数,然后选择。IoT 云.

    2. 适用于Target type,选择服务,然后选择。TestLRA.

    3. 选择 Next(下一步)。

  7. 利用主题筛选您的数据页面上,对于主题筛选条件,输入 invoke/LRAFunction,然后选择下一步

  8. 选择 Finish (结束)订阅页面显示两个订阅。

第 6 步:部署Amazon IoT Greengrass组

在该步骤中,您将部署组定义的当前版本。

  1. 确保Amazon IoT Greengrass核心正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。

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

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

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

      注意

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

    2. 启动守护程序:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. 在组配置页面上,选择部署.

    注意

    如果在不进行容器化的情况下运行 Lambda 函数并且尝试访问附加的本地资源,部署将失败。

  3. 如果出现提示,请在Lambda 函数选项卡,位于系统 Lambda 函数,选择。IP 探测器,然后编辑,然后自动检测.

    这使得设备可以自动获取核心的连接信息,例如 IP 地址、DNS 和端口号。建议使用自动检测,不过 Amazon IoT Greengrass 也支持手动指定的终端节点。只有在首次部署组时,系统才会提示您选择发现方法。

    注意

    如果出现提示,请授予创建Greengrass 服务角色并将其与你的Amazon Web Services 账户在最新的Amazon Web Services 区域. 此角色允许Amazon IoT Greengrass访问您的资源Amazon服务。

    Deployments (部署) 页面显示了部署时间戳、版本 ID 和状态。完成后,部署状态为已完成.

    有关问题排查帮助,请参阅排除 Amazon IoT Greengrass 的故障

测试本地资源访问

现在,您可以验证是否正确配置了本地资源访问。要进行测试,您需要订阅 LRA/test 主题,并发布到 invoke/LRAFunction 主题。如果 Lambda 函数将预期的负载发送到,则测试成功Amazon IoT.

  1. 从Amazon IoT控制台导航菜单,位于测试,选择MQTT 测试客户端.

  2. UNDER订阅主题,对于主题筛选条件,输入。LRA/test.

  3. UNDER其他信息,对于MQTT 负载显示,选择。将负载显示为字符串.

  4. 选择 Subscribe。您的 Lambda 函数将发布到 LRA/test 主题。

    
      突出显示“Subscribe to topic (订阅主题)”的“Subscriptions (订阅)”页面。
  5. UNDER向主题发布,在主题名称输入invoke/LRAFunction,然后选择。发布调用 Lambda 函数。如果页面显示函数的三个消息负载,则测试成功。

    
      “Subscriptions (订阅)”页面,突出显示 invoke/LRAFunction 主题和“Publish to topic (发布到主题)”,以及包含消息数据的测试结果。

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

有关问题排查帮助,请参阅排除 Amazon IoT Greengrass 的故障