自定义函数运行包并下发边缘节点
所有文档

          智能边缘 BIE

          自定义函数运行包并下发边缘节点

          在编写函数时,我们常常会需要引用第三方依赖,本文将介绍如何把代码以及第三方依赖上传至云端 BOS,并在函数应用中引入该函数。

          本文将以 Python3.6 为例进行说明。

          配置项创建

          代码开发

          在将代码上传到云端前,我们需要先在开发机上开发和测试代码。

          我们编写的用例是获取 https://cloud.baidu.com/ 的 headers 信息,新建一个文件夹,代码文件命名 index.py,代码如下:

          #!/usr/bin/env python3
          # -*- coding: utf-8 -*-
          
          import requests
          
          def handler(event, context):
            """
            data: {"action": "A"}
            """
            if 'action' in event:
              if event['action'] == 'A':
                r = requests.get('https://cloud.baidu.com/')
                if str(r.status_code) == '200':
                  event['info'] = dict(r.headers)
                else:
                  event['info'] = 'exception found'
              else:      event['info'] = 'action error'
            else:
              event['error'] = 'action not found'
          
            return event

          可以看到我们用到了 requests 库,接下来我们需要把 requests 源码下载到此文件夹内,命令行输入:

          pip3 download requests

          image.png

          下载完成之后,我们发现文件夹内有多个 .whl 结尾的压缩包。

          image.png

          解压 .whl 压缩包,得到源码。

          unzip -d . "*.whl"

          image.png

          这样我们就得到了源码,但压缩包和 .dist-info 并不是我们所需要的,为了使文件体积尽量的小,我们可以把这些文件删除,命令行输入:

          rm -rf *.whl *.dist-info

          image.png

          然后我们进行一个简单的测试,看下 index.py 是否可以正确的输出我们想要的内容。

          在此文件夹下新建一个 test.py 文件,代码内容如下:

          import index
          
          event = {}
          event['action'] = "A"
          print(index.handler(event, ""))

          可以看到正确输出了我们想要的 handler 内容,测试完成我们可以删除此文件。

          image.png

          index.py 和5个源码文件夹压缩成ZIP包,然后上传到云端 BOS。

          image.png

          创建配置项

          我们需要创建"配置项"来引入上步中上传到 BOS 的函数。

          我们需要设置配置项函数标签,表示这个是一个函数配置项,可供函数应用引用。

          image.png

          然后选择"引入文件",选中刚才上传到 BOS 的文件,并选择"解压",点击确定,完成导入操作。

          image.png

          应用创建

          创建函数应用,并选择上步创建的配置项。

          image.png

          新建节点

          接下来我们配置边缘规则 baetyl-broker、baetyl-rule 模块来调用上述函数。

          在节点创建界面,新建节点。

          image.png

          并将上步中创建的应用绑定到该节点上。

          image.png

          配置 baetyl-rule

          在节点"应用部署"菜单栏,选择 baetyl-rule 模块,点击查看。

          image.png

          然后点击数据卷,选择第一个配置项进行配置。

          image.png

          baetyl-rule 的配置如下:

          rules:
            - name: rule1
              source:
                topic: broker/topic1
              target:
                topic: broker/topic2
              function:
                name: bie-python/process
          
          logger:
            level: debug
            encoding: console

          函数的完整路径是 [服务名称/函数入口] ,则上述 process 这个python函数的完整调用路径就是:bie-python/process。

          配置 baetyl-broker

          按照上步方法配置 baetyl-broker, 配置文件如下:

          listeners:
            - address: tcp://0.0.0.0:8004
          principals:
            - username: test
              password: hahaha
              permissions:
                - action: pub
                  permit: ["#"]
                - action: sub
                  permit: ["#"]
          
          logger:
            level: info

          并在 baetyl-broekr 的服务配置界面添加 8004 端口,将服务暴露到宿主机上。

          image.png

          上述配置成成功后,在端侧执行 kubectl 可以看到如下现象:

          image.png

          端侧验证

          等待上述服务部署到端侧后,我们使用 mqttbox 发送消息到 baetyl-broker 来进行测试。

          首先我们使用 mqttbox 连接,连接信息如下:

          image.png

          连接成功后,如下所示:

          image.png

          我们的输入用例为 {"action":"A"} 结果如图,输出结果正是请求 https://cloud.baidu.com/ 的 header 内容。

          image.png

          上一篇
          在CFC中配置多个函数并下发边缘节点
          下一篇
          边缘规则引擎实战