AWS IoT Greengrass:连接器入门
AWS IoT Greengrass:连接器入门
先决条件:
Twilio 账户 SID、身份验证令牌和支持 Twilio 的电话号码。创建 Twilio 项目后,项目控制面板上会显示这些值。您可以使用 Twilio 试用账户。如果您使用的是试用账户,则必须将非 Twilio 收件人电话号码添加到已验证电话号码列表中。 有关更多信息,请参阅如何使用您的免费 Twilio 试用账户。
步骤 1:创建 Secrets Manager 密钥
在此步骤中,您将使用 AWS Secrets Manager 控制台为 Twilio 身份验证令牌创建一个文本类型密钥。
-
选择存储新密钥。
-
在 (选择密钥类型) 下,选择 (其他密钥类型)。
-
在 (纯文本) 选项卡的 (指定要为此密钥存储的键/值对) 下方,输入您的 Twilio 身份验证令牌。删除所有 JSON 格式设置,然后仅输入令牌值。
-
请确保为加密密钥保持选中 DefaultEncryptionKey,然后选择 Next (下一步)。
注意
如果使用 Secrets Manager 在您的账户中创建的默认 AWS 托管密钥,AWS KMS 不会对您收费。
-
对于密钥名称,输入
greengrass-TwilioAuthToken
,然后选择下一步。注意
默认情况下,Greengrass 服务角色允许 AWS IoT Greengrass 获得名称以 greengrass- 开头的密钥的值。有关更多信息,请参阅密钥要求。
-
本教程不需要轮换,因此,请选择 (禁用自动轮换),然后选择 (下一步)。
-
在 (审核) 页上,审核您的设置,然后选择 (存储)。
接下来,在 Greengrass 组中创建一个引用该密钥的密钥资源。
步骤 2:将密钥资源添加到 Greengrass 组
-
在 AWS IoT 控制台中,选择 Greengrass,然后选择 (组)。
-
在组配置页面上,选择 (资源),然后选择 (密钥)。此选项卡显示属于该组的密钥资源。您可以从此选项卡添加、编辑和删除密钥资源。
-
选择 (添加密钥资源)。
-
在 (向组中添加密钥资源) 页面上,选择 (选择),然后选择 greengrass-TwilioAuthToken。
-
在 (选择标签 (可选)) 页面上,选择 (下一步)。AWSCURRENT 暂存标签表示最新版密钥。该标签始终包含在密钥资源中。
注意
本教程只需要 AWSCURRENT 标签。您可以视情况包括 Lambda 函数或连接器所需的标签。
-
在 (为密钥资源命名) 页面上,输入
MyTwilioAuthToken
,然后选择 (保存)。
步骤 3:将连接器添加到 Greengrass 组
-
在组配置页面上,选择 (连接器),然后选择 (添加连接器)。
-
在 (选择连接器) 页面上,选择 (Twilio 通知),然后选择 (下一步)。
-
在 (配置参数) 页面上,执行以下操作:
-
对于 (Twilio 身份验证令牌资源),选择 MyTwilioAuthToken。这是上一步中所创建的密钥资源。
注意
选择该资源时,将为您填充 ARN of Twilio auth token secret (Twilio 身份验证令牌密钥的 ARN) 属性。
-
对于 (默认的来电号码),输入您的支持 Twilio 的实验号码。
-
对于 (Twilio 账户 SID),输入您的 Twilio 账户 SID。
-
-
选择 (添加)。
步骤 4:创建 Lambda 函数部署程序包
-
从 AWS IoT Greengrass Core 开发工具包 下载 页面下载 适用于 Python 的 AWS IoT Greengrass Core 开发工具包。
-
解压缩下载的程序包以获取软件开发工具包。软件开发工具包是
greengrasssdk
文件夹。 -
将以下 Python 代码函数保存在名为
temp_monitor.py
的本地文件中。from __future__ import print_function 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 函数部署程序包。
步骤 5:在 AWS Lambda 控制台中创建 Lambda 函数
在该步骤中,您使用 AWS Lambda 控制台创建 Lambda 函数,然后将其配置为使用您的部署程序包。接着,发布函数版本并创建别名。
-
在组配置管理器中选择(Lambda)。
-
选择 (添加Lambda),然后选择 (新建Lambda)。
-
在 (基本信息) 部分中,使用以下值:
-
对于 (函数名称),输入
TempMonitor
。 -
对于 (运行时),选择 Python 2.7。
-
对于权限,请保留默认设置。这将创建一个授予基本 Lambda 权限的执行角色。(此角色未由 AWS IoT Greengrass 使用。)
-
-
在页面底部,选择 (创建函数)。
-
在 TempMonitor 函数的 (配置) 选项卡上,在 (函数代码) 中使用以下值:
-
对于 代码输入种类,选择上传 .zip 文件。
-
对于 (运行时),选择 Python 2.7。
-
对于 (处理程序),输入
temp_monitor.function_handler
。
-
-
选择 (上传)。
-
选择您的
temp_monitor_python.zip
部署程序包。 -
选择 (保存)。
Greengrass 组可以按别名 (推荐) 或版本引用 Lambda 函数。通过使用别名,可以更轻松地管理代码更新,因为您在更新函数代码时无需更改订阅表或组定义。相反,您只是将别名指向新的函数版本。
-
在 (操作) 菜单上,选择 (发布新版本)。
-
对于 Version description (版本描述),输入
First version
,然后选择 Publish (发布)。 -
从 (操作) 菜单中选择 (创建别名)。
-
在创建新别名页面上,使用以下值:
- 对于名称,输入
GG_TempMonitor
。 - 对于 Version (版本),选择 1。
注意
AWS IoT Greengrass 不支持 $LATEST 版本的 Lambda 别名。
- 对于名称,输入
-
选择 Create。
步骤 6:将 Lambda 函数添加到 Greengrass 组
-
在组配置页面上,选择 Lambdas,然后选择 (添加Lambda)。
-
在 (将 Lambda 添加到 Greengrass 组) 页面上,选择 (使用现有Lambda)。
-
在 (使用现有 Lambda) 页面上,选择 TempMonitor,然后选择 (下一步)。
-
在 (选择 Lambda 版本) 页面上,选择 Alias:GG_TempMonitor,然后选择 (完成)。
步骤 7:将订阅添加到 Greengrass 组
在该步骤中,您将添加一个订阅,使 Lambda 函数将输入数据发送到连接器。此连接器定义它订阅的 MQTT 主题,因此该订阅使用其中一个主题。这与示例函数发布到的主题相同。
对于本教程,您还可以创建订阅,以允许函数从 AWS IoT 接收模拟温度读数,并允许 AWS IoT 从连接器接收状态信息。
-
在组配置页面上,选择 (订阅),然后选择 (添加订阅)。
-
在选择您的源和目标页面,配置源和目标,如下所示:
- 对于选择源,选择 Lambda,然后选择 TempMonitor。
- 对于 (选择目标),选择 (连接器),然后选择 Twilio 通知。
- 选择 (下一步)。
-
在 Filter your data with a topic (利用主题筛选您的数据) 页面上,对于 Required topic syntax (要求的主题语法),选择
twilio/txt
,然后选择 Next。 -
选择 Finish。
-
重复步骤 1 至 4,以创建允许 AWS IoT 将消息发布到该函数的订阅。
- 对于选择源,选择服务,然后选择 IoT Cloud。
- 对于选择目标,选择 Lambda,然后选择 TempMonitor。
3. 对于 Topic filter (主题筛选条件),输入temperature/input
。
-
重复步骤 1 至 4,以创建允许连接器将消息发布到 AWS IoT 的订阅。
- 对于 Select a source (选择源),选择 Connectors (连接器),然后选择 Twilio 通知。
- 对于选择目标,选择服务,然后选择 IoT Cloud。
- 对于主题筛选条件,已为您输入
twilio/message/status
。这是连接器发布到的预定义主题。
步骤 8:部署 Greengrass 组
将组部署到核心设备。
-
确保 AWS IoT Greengrass Core正在运行。根据需要在您的 Raspberry Pi 终端中运行以下命令。
-
要检查守护程序是否正在运行,请执行以下操作:
ps aux | grep -E 'greengrass.*daemon'
如果输出包含
root
的/greengrass/ggc/packages/ggc-version/bin/daemon
条目,则表示守护程序正在运行。注意
路径中的版本取决于您的核心设备上安装的 AWS IoT Greengrass 核心软件版本。
-
要启动守护程序,请执行以下操作:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
-
在组配置页面上,选择(部署),然后从(操作)菜单中,选择(部署)。
测试解决方案
-
在 AWS IoT 控制台主页上,选择 (测试)。
-
对于订阅,请使用以下值,然后选择 Subscribe to topic。Twilio 通知 连接器向此主题发布状态信息。
属性 值 订阅主题 twilio/message/status MQTT 负载显示 将负载显示为字符串 -
对于 (发布),请使用以下值,然后选择 (发布到主题) 来调用函数。
属性 值 主题 temperature/input 消息 将 recipient-name
替换为文本消息收件人的姓名,将recipient-phone-number
替换为文本消息收件人的电话号码。如果您使用的是试用账户,则必须将非 Twilio 收件人电话号码添加到已验证电话号码列表中。{ "to_name": "recipient-name", "to_number": "recipient-phone-number", "temperature": 31 }
如果成功,则收件人会收到文本消息,并且控制台会在输出数据中显示
success
状态。现在,将输入消息中的
temperature
更改为29
并发布。由于温度小于 30,因此 TempMonitor 函数不会触发 Twilio 消息。