数据转发到函数计算服务CFC
一、简介
在本教程中,您将学习到如何将 IoT Core 的设备消息通过「规则引擎」转发至「函数计算 CFC」,并通过「函数计算 CFC」进行用户自定义的数据处理。
二、应用场景描述
规则引擎可以做到海量数据的过滤、变型和转发,但当您对设备数据处理有着更负复杂,更个性化的处理需求时,仅仅使用规则引擎可能无法满足全部需求,但可以结合「函数计算 CFC」来满足相关处理需求。通过将「规则引擎」与「函数计算 CFC」的组合,数据的处理将会变得更加灵活多样。主要应用场景包括:
- 进行复杂场景的数据处理。
- 存储设备日志信息。
- 转发设备消息到用户自定义服务。
三、示例场景描述
为了带您深入了解「规则引擎」与「函数计算 CFC」的组合使用方式,将采用一个简单的示例:
- 规则引擎将设备产生的系统日志转发到 CFC。
- CFC 对接受到的日志消息进行解码,并将消息内容存储到对象存储 BOS 中。
操作步骤如下:
- 创建对象存储 BOS 实例。
- 创建函数计算 CFC 实例,并配置 BOS 为日志存储目的地。
- 创建 IoT Core 实例,创建转发规则。
- 验证设备日志转发存储功能。
四、操作步骤
4.1 创建 BOS 实例
具体方式请参考《对象存储 BOS 创建Bucket》
登录对象存储 BOS 管理控制台。点击左侧导航栏 " Bucket 列表",在 Bucket 列表中找到并点击 + 按钮( “ 新建 Bucket ” 按钮),在弹出框中按照提示创建 Bucket。
点击「确定」后,该 Bucket 创建完成。
4.2 创建 CFC 实例并配置目的地
选择创建空白函数。
在「函数配置」中,选择「对象存储 BOS」作为日志存储,日志存储路径自行定义。
「触发器」选择无。
因为规则引擎会将消息内容以 Base64 编码后发送给CFC,详情请参考《转发到函数 CFC》。所以,当我们需要在 CFC 中获取规则引擎传输的数据时,需要进行如下两个步骤:
1.将event['message']中的消息进行base64解码。
2.根据 Protocol Buffers 的描述文件,将解码后的数据转换为对象。
在本教程中,函数计算 CFC 函数运行时采用 Python3.6,其功能为:将设备数据解码并打印 log。
Python 函数程序参考代码如下:
import base64
import time
from google.protobuf import json_format
import json
import MqttLogConstants_pb2 as MqttLog
from TrafficLogEntry_pb2 import TrafficLogEntries
import logging
logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# 解码 byte 数据,转化为 log 对象
def parse_log_entries(bytes):
entries = TrafficLogEntries()
entries.ParseFromString(bytes)
return entries
# CFC 函数入口
def handler(event, context):
# 进行base64解码
logBytes=base64.b64decode(event['message'])
# 解码 byte 数据,转化为 log 对象
logEntries = parse_log_entries(logBytes)
for entry in logEntries.entries:
if entry.code.startswith('MQT'):
entryJson = json.loads(json_format.MessageToJson(entry))
details = entryJson['details']
newDetails = {}
for keyNum in details:
detail = MqttLog.LogDetailKey.Name(int(keyNum))
newDetails[detail] = details[keyNum]
entryJson['details'] = newDetails
# 将解码结果作为日志打印
logger.info(entryJson)
return None
上传 Python 函数程序处理包。
4.3 创建 IoT Core 实例并配置规则引擎
4.3.1 创建 IoT Core 实例
进入控制台,点击「创建 IoT Core」。
信息填写完成后点击「提交」。
创建完成后,实例将显示在实例列表中。
4.3.2 添加模板
点击设备管理中的模板菜单,点击「添加模板」进行模板添加。
填写「模板名称」,点击「确认」。
确认后,创建名为 fortest 的设备模板,可在模板列表中查看。
4.3.3 添加设备
点击「新增设备」创建设备。
认证方式选择「秘钥认证」,模板选择上述步骤创建的模板「fortest」,并提交。
创建成功后会显示设备的密钥,点击「下载」保存密钥记录文本。
4.3.4 生成连接信息
为了连接设备,需要使用 MQTT连接信息生成器 生成设备的连接鉴权信息,记录下「结果(MQTT连接信息)」备用。
请保存「设备连接鉴权信息」,权信息将会在「步骤4.4」中使用。
4.3.5 配置规则引擎
进入物联网核心套件控制台,找到实例下的「规则列表」,点击「创建规则」进行规则的创建。
输入规则信息后,点击「确认」即可创建规则。
点击「编辑调试」,进入编辑界面。
编辑规则的「输入来源」,点击 topic 模板。
当设备连接、监听、断开时,日志数据会记录在$sys/log/info/#中
设备模板选择 「SYS_LOG_TOPIC」 ,可选 topic 选择「$sys/log/info/#」。
点击「规则目的地」。
选择 「函数计算 CFC」作为目的地,函数选择 Python 程序对应的函数,并点击「保存」。
规则保存成功后,进入规则列表,启动规则,规则处于「运行中」状态时,表示规则正在生效。
4.4 验证设备日志转发存储功能
经过上述步骤的操作,环境已经搭建完毕,设备消息可以经过规则引擎转发到 CFC,CFC会将产生的日志信息存储到 BOS 中。
将「步骤4.3.4」生成的连接鉴权信息填写到 MQTT 客户端中,点击「connect」。
观察 CFC 中的「日志」,发现数据已成功接收并转码。
上图 INFO 级别的日志,正是 Python 函数程序中的打印的 log。
查看 BOS,可查看到日志文件,设备日志信息存储完成,验证完成。