使用 Azure Functions 在边缘筛选数据
若要减少发送到 Azure IoT Central 应用程序的遥测数据量,需要先筛选 IoT Edge 设备上的数据,然后再发送。
若要降低将遥测数据从存储发送到应用程序的相关成本,需要筛选 IoT Edge 设备上的数据。 这样做还有助于确保操作员只看到重要数据。 你已确定操作员只需查看环境温度高于 21°C 时的遥测数据。
在这里,你将了解如何将 Azure Functions 用作 IoT Edge 设备上的一个模块来实施筛选器。 另请查看如何将部署清单更新到 Azure IoT Central 应用程序。 然后,连接到 Azure IoT Central 应用程序的 IoT Edge 设备下载它并更新设备上的模块。
什么是 Azure Functions?
Azure Functions 是一项服务,可用于运行称为函数的小段代码,而无需担心应用程序基础结构。 借助 Azure Functions,云基础结构可以提供应用程序保持规模化运行所需的所有最新状态的服务器。
你还可使用 Azure Functions 将函数作为模块部署到 IoT Edge 设备,以便函数在本地、边缘运行,而不是在云中运行。
你计划使用 Azure Functions 作为 IoT Edge 设备上的一个模块运行,从而实现筛选器。 此筛选器限制发送到 Azure IoT Central 应用程序的机器温度遥测数据量。
如何创建包含函数的 IoT Edge 模块
可以使用多种语言为 Azure Functions 创建函数。 以下步骤概述了如何生成一个 IoT Edge 模块,并在其中包含用 C# 实现的函数:
- 创建一个包含 Azure 函数模块基架的项目。 可以使用 Visual Studio Code 或在命令行使用
dotnet
命令创建此类项目。 - 实现 C# 函数的业务逻辑。
- 构建项目以生成一个包含函数和所需 Azure Functions 运行时的 Docker 映像。
- 将 Docker 映像上传到容器注册表。
- 修改 IoT Edge 设备的部署清单以包含新模块。 该配置包括 Docker 映像的地址,以及函数模块与 IoT Edge 运行时中的其他模块的交互方式。
以下代码片段显示了更新后的部署清单中包含新 filterfunction
模块的 modules
部分:
"modules": {
"SimulatedTemperatureSensor": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "mcr.microsoft.com/azureiotedge-simulated-temperature-sensor:1.4.6",
"createOptions": "{}"
}
},
"filterfunction": {
"version": "1.0",
"type": "docker",
"status": "running",
"restartPolicy": "always",
"settings": {
"image": "<YOUR CONTAINER REGISTRY NAME>.azurecr.io/filterfunction:v1",
"createOptions": ""
}
}
}
根据你使用的容器注册表及其配置,部署清单可能需要凭据才能访问注册表。
以下代码片段演示如何在更新的部署清单中的模块之间路由遥测数据:
"routes": {
"FilterFunctionToIoTCentral": "FROM /messages/modules/filterfunction/outputs/* INTO $upstream",
"sensorToFilterFunction": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/filterfunction/inputs/input1\")"
},
更新 Azure IoT Central 中的部署清单
若要将新模块部署到 IoT Edge 设备,在 Azure IoT Central 应用程序中更新部署清单。 以这类方式更新部署清单时,连接到 Azure IoT Central 应用程序的 IoT Edge 设备会下载它并更新设备上的模块。