

终止支持通知：2026 年 10 月 7 日， AWS 将停止对的支持。 AWS IoT Greengrass Version 1 2026 年 10 月 7 日之后，您将无法再访问这些 AWS IoT Greengrass V1 资源。如需了解更多信息，请访问[迁移自 AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html)。

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

# 如何使用配置本地资源访问权限 AWS 管理控制台
<a name="lra-console"></a>

此功能适用于 AWS IoT Greengrass 酷睿 v1.3 及更高版本。

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

本教程介绍如何使用配置 AWS 管理控制台 对 AWS IoT Greengrass 核心设备上存在的本地资源的访问权限。它包含以下高级步骤：

1. [创建 Lambda 函数部署程序包](#lra-console-create-package)

1. [创建并发布 Lambda 函数](#lra-console-create-function)

1. [将 Lambda 函数添加到组](#lra-console-add-function)

1. [将本地资源添加到组](#lra-console-create-resource)

1. [将订阅添加到组](#lra-console-add-subscription)

1. [部署组](#lra-console-deploy-group)

有关使用的教程 AWS Command Line Interface，请参阅[如何使用 AWS 命令行界面配置本地资源访问权限](lra-cli.md)。

## 先决条件
<a name="lra-console-prerequisites"></a>

要完成此教程，需要：
+ Greengrass 组和 Greengrass Core（v1.3 或更高版本）。要创建 Greengrass 组或核心，请参阅[入门 AWS IoT Greengrass](gg-gs.md)。
+ Greengrass 核心设备上的以下目录：
  + /src/ LRAtest
  + /dest/ LRAtest

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

  ```
  sudo chmod 0775 /src/LRAtest
  ```

## 步骤 1：创建 Lambda 函数部署程序包
<a name="lra-console-create-package"></a>

在该步骤中，您将创建一个 Lambda 函数部署程序包，这是包括函数代码和依赖项的 ZIP 文件。您还可以下载 AWS IoT Greengrass Core SDK，将其作为依赖项包含在软件包中。

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
   ```

1. <a name="download-ggc-sdk"></a> 从[AWS IoT Greengrass 核心软件开发工具包](what-is-gg.md#gg-core-sdk-download)下载页面，将适用于 Python 的 AWS IoT Greengrass 酷睿 SDK 下载到你的电脑上。

1. <a name="unzip-ggc-sdk"></a>解压缩下载的程序包以获取软件开发工具包。软件开发工具包是 `greengrasssdk` 文件夹。

1. 将以下项目压缩到名为 `lraTestLambda.zip` 的文件中：
   + `lraTest.py`. 应用程序逻辑。
   + `greengrasssdk`. 所有 Python Lambda 函数必需的库。

   `lraTestLambda.zip` 文件即 Lambda 函数部署程序包。现在您已准备好创建 Lambda 函数和上传部署程序包。

## 步骤 2：创建并发布 Lambda 函数
<a name="lra-console-create-function"></a>

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

首先，创建 Lambda 函数。

1. 在中 AWS 管理控制台，选择**服务**，然后打开 AWS Lambda 控制台。

1. 选择 **函数**。

1. <a name="lambda-console-create-function"></a>选择 **创建函数**，然后选择 **从头开始创作**。

1. 在 **Basic information (基本信息)** 部分中，使用以下值。

   1. 对于**函数名称**，请输入 **TestLRA**。

   1. 对于**运行时系统**，选择 **Python 3.7**。

   1. 对于**权限**，请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未被使用 AWS IoT Greengrass。

1. 选择**创建函数**。  
![\[突出显示“Create function (创建函数)”的“Create function (创建函数)”页面。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/create-function.png)

    

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

   1. <a name="lambda-console-upload"></a>在**代码**选项卡上的**代码源**下，选择**上传自**。从下拉列表中选择 **.zip 文件**。  
![\[“上传自”下拉列表中突出显示了.zip 文件。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. 选择**上传**，然后选择您的 `lraTestLambda.zip` 部署包。然后，选择**保存**。

   1. <a name="lambda-console-runtime-settings-para"></a>在函数的**代码**选项卡中，在**运行时设置**下选择**编辑**，然后输入以下值。
      + 对于**运行时系统**，选择 **Python 3.7**。
      + 对于 **Handler (处理程序)**，请输入 **lraTest.function\$1handler**。

   1. <a name="lambda-console-save-config"></a>选择**保存**。
**注意**  
 AWS Lambda 主机上的 “**测试**” 按钮不适用于此功能。 AWS IoT Greengrass 核心软件开发工具包不包含在控制台中独立运行 Greengrass Lambda 函数所需的模块。 AWS Lambda 这些模块（例如 `greengrass_common`）是在函数部署到您的 Greengrass 核心之后提供给它们的。

   接下来，发布您的 Lambda 函数的第一个版本。然后，创建[版本的别名](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html)。

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

1. 在**操作**中，选择**发布新版本**。

1. 对于**版本描述**，输入 **First version**，然后选择**发布**。

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

1. 在 **创建别名** 页面上，对于 **名称**，输入 **test**。对于 **Version (版本)**，输入 **1**。
**注意**  
AWS IoT Greengrass **不支持 \$1LATEST 版本的 Lambda 别名。**

1. 选择**创建**。  
![\[突出显示“Create (创建)”的“Create a new alias (创建新别名)”页面。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/create-alias.png)

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

## 步骤 3：将 Lambda 函数添加到 Greengrass 组
<a name="lra-console-add-function"></a>

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

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

1. **在 AWS IoT 控制台导航窗格的**管理**下，展开 **Greengrass** 设备，然后选择群组 (V1)。**

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

1. 在组配置页面上，选择**Lambda 函数**选项卡。

1. 在**我的 Lambda 函数**部分下，选择**添加**。

1. 在 **添加 Lambda 函数** 页中，选择 **Lambda 函数**。选择 **TestLRA**。

1. 选择 **Lambda 函数版本**。

1. 在 **Lambda 函数配置**部分中，选择**系统用户和组**和 **Lambda 函数容器化**。

    

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

1. 对于 **Timeout (超时)**，选择 **30 seconds (30 秒)**。
**重要**  
使用本地资源的 Lambda 函数（如本过程中所述）必须在 Greengrass 容器中运行。否则，如果尝试部署该函数，则部署将失败。有关更多信息，请参阅[容器化](lambda-group-config.md#lambda-function-containerization)。

1. 在页面底部，选择**添加 Lambda 函数**。

## 步骤 4：将本地资源添加到 Greengrass 组
<a name="lra-console-create-resource"></a>

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

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

1. 在**本地资源**部分下，选择**添加**。

1. 在 **添加本地资源** 页面上，使用以下值：

   1. 对于**资源名称**，输入 **testDirectory**。

   1. 对于**资源类型**，选择**卷**。

   1. 对于 **本地设备路径**，输入 **/src/LRAtest**。主机操作系统上必须存在该路径。

      本地设备路径是核心设备文件系统上的资源的绝对路径。此位置位于函数在其中运行的[容器](lambda-group-config.md#lambda-function-containerization)之外。该路径不能以 `/sys` 开头。

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

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

   1. 在 **系统组所有者和文件访问权限** 下，选择 **自动添加拥有资源的系统组的文件系统权限)**。

      **系统组所有者和文件访问权限**选项可让您授予对 Lambda 进程的额外的文件访问权限。有关更多信息，请参阅 [组所有者文件访问权限](access-local-resources.md#lra-group-owner)。

1. 选择**添加资源**。**资源**页面显示新的 testDirectory 资源。

## 步骤 5：将订阅添加到 Greengrass 组
<a name="lra-console-add-subscription"></a>

在该步骤中，您将两个订阅添加到 Greengrass 组。这些订阅允许 Lambda 函数和之间的双向通信。 AWS IoT

首先，为 Lambda 函数创建一个订阅，用于将消息发送到 AWS IoT。

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

1. 选择**添加**。

1. 在**创建订阅**页面中，按如下所述配置源和目标：

   1. 对于**源类型**，选择 **Lambda 函数**，然后选择 **TestLRA**。

   1. 对于**目标类型**，选择**服务**，然后选择 **IoT 云**。

   1. 对于**主题筛选条件**字段中，输入 **LRA/test**，然后选择**订阅**。

1. **订阅**页面显示新订阅。

    

   接下来，配置从中调用函数的订阅。 AWS IoT

1. 在**订阅**页面，选择**添加订阅**。

1. 在**选择您的源和目标**页面，配置源和目标，如下所示：

   1. 在**源类型**中，选择 **Lambda 函数**，然后选择 **IoT 云**。

   1. 在**目标类型**中，选择**服务**，然后选择 **TestLRA**。

   1. 选择**下一步**。

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

1. 选择**结束**。**订阅**页面显示两个订阅。

## 步骤 6：部署群 AWS IoT Greengrass 组
<a name="lra-console-deploy-group"></a>

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

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

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

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

      如果输出包含 `root` 的 `/greengrass/ggc/packages/1.11.6/bin/daemon` 条目，则表示进程守护程序正在运行。
**注意**  
路径中的版本取决于 AWS IoT Greengrass 核心设备上安装的 Core 软件版本。

   1. 启动进程守护程序：

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. 在组配置页面上，选择**部署**。
**注意**  
如果在不进行容器化的情况下运行 Lambda 函数并且尝试访问附加的本地资源，部署将失败。

1. 如果出现提示，则在 **Lambda 函数**选项卡的**系统 Lambda 函数**下，选择 **IP 检测器**，然后选择**编辑**，然后选择**自动检测**。

   这使得设备可以自动获取核心的连接信息，例如 IP 地址、DNS 和端口号。建议使用自动检测，但 AWS IoT Greengrass 也支持手动指定的端点。只有在首次部署组时，系统才会提示您选择发现方法。
**注意**  
如果出现提示，请授予创建 [Greengrass 服务角色并将其与当前](service-role.md)角色关联的权限。 AWS 账户 AWS 区域此角色 AWS IoT Greengrass 允许访问您在 AWS 服务中的资源。

   **部署**页面显示了部署时间戳、版本 ID 和状态。完成后，部署状态为 **已完成**。

   有关问题排查帮助，请参阅[故障排除 AWS IoT Greengrass](gg-troubleshooting.md)。

## 测试本地资源访问
<a name="lra-console-test-results"></a>

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

1. 在 AWS IoT 控制台导航菜单的**测试**下，选择 **MQTT 测试客户端**。

1. 在**订阅主题**下的**主题筛选器**中，输入 **LRA/test**。

1. 在**其他信息**下，对于 **MQTT 负载显示**，请选择**将负载显示为字符串**。

1. 选择**订阅**。您的 Lambda 函数向该主题发布内容。 LRA/test   
![\[突出显示“Subscribe to topic (订阅主题)”的“Subscriptions (订阅)”页面。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/test-subscribe.png)

1. 在**发布到主题**下的**主题名称**中输入 **invoke/LRAFunction**，然后选择**发布**以调用您的 Lambda 函数。如果页面显示函数的三个消息负载，则测试成功。  
![\[“订阅” 页面突出显示了 invoke/LRAFunction 主题和 “发布到” 主题，测试结果带有消息数据。\]](http://docs.aws.amazon.com/zh_cn/greengrass/v1/developerguide/images/lra-console/test-publish.png)

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

有关问题排查帮助，请参阅[故障排除 AWS IoT Greengrass](gg-troubleshooting.md)。