AWS IoT Greengrass Version 1 于 2023 年 6 月 30 日进入延长使用寿命阶段。有关更多信息,请参阅 AWS IoT Greengrass V1维护策略。在此日期之后,AWS IoT Greengrass V1 不再发布更新来提供新功能、功能增强、错误修复或安全补丁。在 AWS IoT Greengrass V1 上运行的设备不会受到干扰,并且将继续运行并连接到云。我们强烈建议您迁移到 AWS IoT Greengrass Version 2,从而添加重要的新功能并支持更多平台。
Greengrass 连接器入门(控制台)
此功能适用于 AWS IoT Greengrass Core v1.7 及更高版本。
本教程介绍如何通过 AWS Management Console 使用连接器。
使用连接器可加快开发生命周期。连接器是预先构建、可重复使用的模块,可以更加轻松地与服务、协议和资源进行交互。它们可以帮助您将业务逻辑更快地部署到 Greengrass 设备。有关更多信息,请参阅 使用 Greengrass 连接器与服务和协议集成。
在本教程中,您将配置和部署 Twilio 通知连接器。连接器接收 Twilio 消息信息作为输入数据,然后触发 Twilio 文本消息。下图中将显示数据流。
配置连接器后,您便可创建 Lambda 函数和订阅。
该函数将评估来自温度传感器的模拟数据。它有条件地将 Twilio 消息信息发布到 MQTT 主题。这是连接器订阅的主题。
该订阅允许函数发布到主题,并允许连接器接收来自该主题的数据。
Twilio 通知连接器需要 Twilio 身份验证令牌,才能与 Twilio API 进行交互。令牌是在 AWS Secrets Manager 中创建且从组资源中引用的文本类型密钥。这样一来,AWS IoT Greengrass 便可在 Greengrass 核心上创建密钥的本地副本,在该核心中,此类副本经过加密且可供连接器使用。有关更多信息,请参阅 将密钥部署到 AWS IoT Greengrass 核心。
本教程包含以下概括步骤:
完成本教程大约需要 20 分钟。
先决条件
要完成此教程,需要:
-
Greengrass 组和 Greengrass Core(v1.9.3 或更高版本)。要了解如何创建 Greengrass 组和核心,请参阅 开始使用 AWS IoT Greengrass。“入门”教程还包含用于安装 AWS IoT Greengrass Core 软件的步骤。
-
安装在 AWS IoT Greengrass 核心设备上的 Python 3.7。
-
AWS IoT Greengrass 必须配置为支持本地密钥,如密钥要求中所述。
注意
此要求包括允许访问您的 Secrets Manager 密钥。如果使用的是默认 Greengrass 服务角色,则 Greengrass 有权获得名称以 greengrass- 开头的密钥的值。
-
Twilio 账户 SID、身份验证令牌和支持 Twilio 的电话号码。创建 Twilio 项目后,项目控制面板上会显示这些值。
注意
您可以使用 Twilio 试用账户。如果您使用的是试用账号,则必须将非 Twilio 收件人的电话号码添加到经过验证的电话号码列表中。 有关更多信息,请参阅如何使用您的免费 Twilio 试用账户
。
步骤 1:创建 Secrets Manager 密钥
在此步骤中,您将使用 AWS Secrets Manager 控制台为 Twilio 身份验证令牌创建一个文本类型密钥。
-
注意
有关此过程的更多信息,请参阅AWS Secrets Manager 用户指南中的步骤 1:在 AWS Secrets Manager 中创建和存储密钥。
-
选择存储新密钥。
-
在 选择密钥类型 下,选择 其他密钥类型。
-
在指定要为此密钥存储的键/值对下面的纯文本选项卡上,输入您的 Twilio 身份验证令牌。删除所有 JSON 格式设置,然后仅输入令牌值。
-
为加密密钥保留选中 aws/secretsmanager,然后选择下一步。
注意
如果使用 Secrets Manager 在您的账户中创建的默认 AWS 托管密钥,AWS KMS 不会对您收费。
-
对于密钥名称,输入
greengrass-TwilioAuthToken
,然后选择下一步。注意
默认情况下,Greengrass 服务角色允许 AWS IoT Greengrass 获取名称以 greengrass- 开头的密钥的值。有关更多信息,请参阅密钥要求。
-
本教程不需要轮换,因此,请选择“禁用自动轮换”,然后选择下一步。
-
在审核页上,审核您的设置,然后选择存储。
接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。
步骤 2:将密钥资源添加到 Greengrass 组
在此步骤中,您将一个密钥资源 添加到 Greengrass 组。该资源是对上一步中创建的密钥的引用。
在 AWS IoT 控制台导航窗格的管理下,展开 Greengrass 设备,然后选择组 (V1)。
-
选择要将密钥资源添加到的组。
-
在组配置页面上,选择资源选项卡,然后向下滚动到密钥部分。密钥部分显示从属于该组的密钥资源。您可以从此部分添加、编辑和删除密钥资源。
注意
或者,控制台允许您在配置连接器或 Lambda 函数时创建密钥和密钥资源。您可以从连接器的配置参数页面或 Lambda 函数的资源页面执行此操作。
-
在密钥部分下选择添加。
-
在添加密钥资源页面,在资源名称中输入
MyTwilioAuthToken
。 -
对于密钥,选择 greengrass-TwilioAuthToken。
-
在选择标签(可选)部分中,AWSCURRENT 暂存标签表示密钥的最新版本。该标签始终包含在密钥资源中。
注意
本教程只需要 AWSCURRENT 标签。您可以视情况包括 Lambda 函数或连接器所需的标签。
-
选择添加资源。
步骤 3:将连接器添加到 Greengrass 组
在此步骤中,您将为 Twilio 通知连接器配置参数,并将其添加到组。
-
在组配置页面上,选择 Connectors (连接器),然后选择 Add a connector (添加连接器)。
-
在添加连接器页面上,选择 Twilio Notifications。
-
选择 版本。
-
在配置部分中:
-
对于 Twilio 身份验证令牌资源,输入上一步中创建的资源。
注意
输入该资源时,将为您填充 Twilio 身份验证令牌密钥的 ARN 属性。
-
对于 Default from phone number (默认的来电号码),输入您的支持 Twilio 的电话号码。
-
对于 Twilio account SID (Twilio 账户 SID),输入您的 Twilio 账户 SID。
-
-
选择添加资源。
步骤 4:创建 Lambda 函数部署程序包
要创建 Lambda 函数,您必须先创建一个包含函数代码和依赖项的 Lambda 函数部署包。Greengrass Lambda 函数需要 AWS IoT Greengrass Core 软件开发工具包来执行各项任务,例如在核心环境中与 MQTT 消息通信和访问本地机密等。本教程将创建一个 Python 函数,因此您需要在部署包中使用 Python 版本的软件开发工具包。
-
从 AWS IoT Greengrass Core 软件开发工具包下载页面,将适用于 Python 的 AWS IoT Greengrass Core 软件开发工具包下载到您的计算机上。
-
解压缩下载的程序包以获取软件开发工具包。软件开发工具包是
greengrasssdk
文件夹。 -
将以下 Python 代码函数保存在名为
temp_monitor.py
的本地文件中。import greengrasssdk import json import random client = greengrasssdk.client('iot-data') # publish to the Twilio Notifications connector through the twilio/txt topic def function_handler(event, context): temp = event['temperature'] # check the temperature # if greater than 30C, send a notification if temp > 30: data = build_request(event) client.publish(topic='twilio/txt', payload=json.dumps(data)) print('published:' + str(data)) print('temperature:' + str(temp)) return # build the Twilio request from the input data def build_request(event): to_name = event['to_name'] to_number = event['to_number'] temp_report = 'temperature:' + str(event['temperature']) return { "request": { "recipient": { "name": to_name, "phone_number": to_number, "message": temp_report } }, "id": "request_" + str(random.randint(1,101)) }
-
将以下项目压缩到名为
temp_monitor_python.zip
的文件中。在创建 ZIP 文件时,仅包含代码和依赖项,而不包含文件夹。-
temp_monitor.py。应用程序逻辑。
-
greengrasssdk。发布 MQTT 消息的 Python Greengrass Lambda 函数所需的库。
此即 Lambda 函数部署程序包。
-
现在,创建一个使用部署程序包的 Lambda 函数。
步骤 5:在 AWS Lambda 控制台创建一个 Lambda 函数
在该步骤中,您使用 AWS Lambda 控制台创建 Lambda 函数,然后将其配置为使用您的部署包。接着,发布函数版本并创建别名。
-
首先,创建 Lambda 函数。
-
在AWS Management Console中,选择服务,然后打开 AWS Lambda 控制台。
-
选择 创建函数,然后选择 从头开始创作。
-
在基本信息部分中,使用以下值:
-
对于函数名称,请输入
TempMonitor
。 -
对于运行时系统,选择 Python 3.7。
-
对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。此角色未由 AWS IoT Greengrass 使用。
-
-
在页面底部,选择创建函数。
-
-
接下来,注册处理程序并上传您的 Lambda 函数部署程序包。
-
在代码选项卡上的代码源下,选择上传自。从下拉列表中选择 .zip 文件。
-
选择上传,然后选择您的
temp_monitor_python.zip
部署包。然后,选择保存。 -
在函数的代码选项卡中,在运行时设置下选择编辑,然后输入以下值。
-
对于运行时系统,选择 Python 3.7。
-
对于处理程序,输入
temp_monitor.function_handler
。
-
-
选择保存。
注意
AWS Lambda 控制台上的测试按钮不适用于此功能。AWS IoT Greengrass Core 软件开发工具包不包含在 AWS Lambda 控制台中独立运行 Greengrass Lambda 函数所需的模块。这些模块(例如
greengrass_common
)是在函数部署到您的 Greengrass 核心之后提供给它们的。
-
-
现在,发布 Lambda 函数的第一个版本并创建此版本的别名。
注意
Greengrass 组可以按别名(推荐)或版本引用 Lambda 函数。使用别名,您可以更轻松地管理代码更新,因为您在更新函数代码时,不必更改订阅表或组定义。相反,您只需将别名指向新的函数版本。
-
在 TempMonitor: 1 配置页面上,从 Actions (操作) 菜单中选择 Create alias (创建别名)。
-
在创建新别名页面上,使用以下值:
-
对于名称,输入
GG_TempMonitor
。 -
对于版本,选择 1。
注意
AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。
-
-
选择创建。
-
现在,您已准备就绪,可以将 Lambda 函数添加到 Greengrass 组。
步骤 6:将 Lambda 函数添加到 Greengrass 组
在该步骤中,您将 Lambda 函数添加到该组,然后配置其生命周期和环境变量。有关更多信息,请参阅 使用组特定的配置控制 Greengrass Lambda 函数的执行。
-
在组配置页面上,选择Lambda 函数选项卡。
-
在我的 Lambda 函数部分下,选择添加。
-
在添加 Lambda 函数页面上,为您的 Lambda 函数选择 TempMonitor。
-
对于 Lambda 函数版本,请选择 Alias: GG_TempMonitor。
-
选择添加 Lambda 函数。
步骤 7:将订阅添加到 Greengrass 组
在该步骤中,您将添加一个订阅,使 Lambda 函数将输入数据发送到连接器。此连接器定义它订阅的 MQTT 主题,因此该订阅使用其中一个主题。这与示例函数发布到的主题相同。
对于本教程,您还可以创建订阅,以允许函数从 AWS IoT 接收模拟温度读数,并允许 AWS IoT 从连接器接收状态信息。
-
在创建订阅页面中,按如下所述配置源和目标:
-
在源类型中,选择 Lambda 函数,然后选择 TempMonitor。
-
对于目标类型,选择连接器,然后选择 Twilio Notifications。
-
-
对于主题筛选条件,输入
twilio/txt
。 -
选择创建订阅。
-
重复步骤 1 至 4,以创建允许 AWS IoT 将消息发布到该函数的订阅。
-
在源类型中,选择服务,然后选择 IoT 云。
-
对于选择目标,选择 Lambda 函数,然后选择 TempMonitor。
-
对于 Topic filter (主题筛选条件),输入
temperature/input
。
-
-
重复步骤 1 至 4,以创建允许连接器将消息发布到 AWS IoT 的订阅。
-
对于源类型,选择连接器,然后选择 Twilio Notifications。
-
对于目标类型,选择服务,然后选择 IoT 云。
-
对于主题筛选条件,已为您输入
twilio/message/status
。这是连接器发布到的预定义主题。
-
步骤 8:部署 Greengrass 组
将组部署到核心设备。
注意
Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息,请参阅升级连接器版本。
测试解决方案
-
在 AWS IoT 控制台主页上,选择测试。
-
对于订阅主题,请使用以下值,然后选择订阅。Twilio 通知连接器向此主题发布状态信息。
属性
值
订阅主题
twilio/message/status
MQTT 负载显示
将负载显示为字符串
-
对于发布到主题,请使用以下值,然后选择发布 来调用函数。
属性
值
主题
temperature/input
消息
将
recipient-name
替换为文本消息收件人的姓名,将recipient-phone-number
替换为文本消息收件人的电话号码。例如:+12345000000
{ "to_name": "
recipient-name
", "to_number": "recipient-phone-number
", "temperature": 31 }如果您使用的是试用账号,则必须将非 Twilio 收件人的电话号码添加到经过验证的电话号码列表中。有关更多信息,请参阅验证您的个人电话号码
。 如果成功,收件人将收到短信,控制台将在输出数据中显示
success
状态。现在,将输入消息中的
temperature
更改为29
并发布。由于温度小于 30,因此 TempMonitor 函数不会触发 Twilio 消息。