智能边缘BIE

    如何在函数计算CFC中配置多个函数

    函数计算CFC调用的入口只能为一个,但这不意味着函数计算CFC只能编写一个函数,你可以编写多个函数并相互调用。

    进行本文操作之前, 先根据 快速入门-建立核心 创建一个核心。

    计算服务的存储卷创建

    CFC 函数创建

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

    首先,在创建CFC存储卷前需要先新增相应的CFC函数,从百度智能云控制台进入 函数计算CFC,点击“创建函数”按钮,选择“空白函数”。

    cfc-create-buttom.png

    然后,函数名称取名 “bie-cfc-demo”,运行时选择 “Python 3.6”,点击“提交”按钮。

    cfc-create.png

    创建成功,我们点击 “进入代码编辑页”。

    cfc-create-success.png

    CFC函数代码页面自动为我们生成 “Hello World” 函数。

    cfc-edit-page.png

    函数的入口只能拥有一个,但支持添加多个函数,互相调用,我们新增两个函数:

    def add(event, context):
        result = {}
        result['result'] = event['x'] + event['y'] + event['z']
        result['result2'] = add2(event, context)['result']
        return result
    
    def add2(event, context):
        result = {}
        result['result'] = event['x'] + event['y'] + event['z']
        return result

    我们新增了 addadd2 两个函数,可以看到 add 函数中调用了 add2 函数。然后当前代码点击“保存”按钮,处理程序中修改入口函数为 index.add ,并点击“确定”按钮。

    cfc-edit-code.png

    代码新增完成后,我们进行一个测试,来确认代码执行是否正常。点击函数代码页面中的“测试”按钮,如下图:

    cfc-edit-test-button.png

    我们在测试事件页面中,新建一个测试用例,例子如下:

    {
        "x": 1,
        "y": 2,
        "z": 3
    }

    事件模板我们选择 “HelloWorld模板”,事件名称我们取名为 “biecfccompute”,下面测试代码框我们输入上面的json代码,点击“创建”按钮,后续我们还会用到这个测试事件。

    cfc-edit-test-create.png

    弹出消息显示“创建成功”,随后我们点击 “执行” 按钮来对新增的 addadd2 函数进行测试。

    cfc-edit-test-success.png

    测试结果 {"result": 6, "result2": 6} 为我们 add 函数的结果,可以看到,输出结果正确。

    然后,我们再对 add2 函数进行测试,我们回到函数代码页面,修改处理程序为 index.add2 ,并点击“确定”按钮。

    cfc-edit-change.png

    修改处理程序后我们还需要进行测试,来查看是否修改成功,选择 biecfccompute 测试事件再次进行测试,点击“执行”按钮。

    cfc-edit-test-add2.png

    可以看到结果为 {"result": 6} ,输出结果正确。

    最后,我们需要发布新版本,才可以被存储卷引入。

    cfc-edit-publish.png

    CFC 存储卷创建

    回到智能边缘控制台,CFC相关存储卷需要两个,为 bie-cfc-compute-codebie-cfc-compute-conf,分别是用来保存代码和配置。

    bie-cfc-compute-code 存储卷

    首先在存储卷页面点击“创建存储卷”按钮,选择模板 CFC函数模板,命名为 bie-cfc-compute-demo 并点击确定。

    cfc-compute-volume-create.png

    进入该CFC存储卷的页面,点击“引入CFC函数”按钮。

    cfc-compute-volume-create02.png

    我们选择刚才创建的CFC函数 bie-cfc-demo

    cfc-compute-volume-addcfc.png

    引入完成后,需要进行一次发布新版本。

    cfc-compute-volume-publish.png

    bie-cfc-compute-conf 存储卷

    我们在存储卷页面,点击 "创建存储卷" 按钮,取名为 bie-cfc-compute-conf ,模板选择 baetyl 模块配置。

    cfc-conf-volume-create.png

    存储卷的 service.yml 我们输入如下配置并保存。

    functions:
      - name: 'add'
        handler: 'index.add'
        codedir: 'var/db/baetyl/compute'
      - name: 'add2'
        handler: 'index.add2'
        codedir: 'var/db/baetyl/compute'

    cfc-conf-volume-edit.png

    最后我们需要发布新版本。

    6-publish-cfc-conf.png

    baetyl-hub 服务的存储卷创建

    共三个存储卷,分别为:

    • bie-demo-hub-conf
    • bie-demo-hub-log
    • bie-demo-hub-data

    具体见 配置发布与下发 ,我们只需要创建这三个存储卷。

    baetyl-function-manager 服务的存储卷创建

    我们在存储卷页面,点击 "创建存储卷" 按钮,模板选择baetyl模块配置。

    cfc-manager-volume-create.png

    进入 bie-cfc-func-conf 存储卷,修改 service.yml 我们输入如下配置并保存。

    hub:
      address: tcp://local-hub:1883
      username: test
      password: hahaha
    rules:
      - clientid: localfunc-1
        subscribe:
          topic: t
        function:
          name: add
        publish:
          topic: t/add
      - clientid: localfunc-2
        subscribe:
          topic: t
        function:
          name: add2
        publish:
          topic: t/add2
    functions:
      - name: add
        service: function-compute
      - name: add2
        service: function-compute
    logger:
      path: var/log/baetyl/service.log
      level: "debug"

    cfc-manager-volume-edit.png

    同样,最后我们需要发布新版本。

    cfc-manager-volume-publish.png

    添加/创建 服务

    我们创建了所有需要用到的6个存储卷。

    下面我们进入智能边缘核心页面,选择我们第一步所创建的核心,进行配置。

    baetyl-hub 服务配置

    点击"添加服务"按钮。

    10-create-service.png

    我们取名为 local-hub,模块选择 baetyl-hub,端口映射输入 1883:1883,随后点击存储卷挂载,挂载相应的三个存储卷。

    映射端口为 1883 并不是强制的,具体映射端口与各服务配置文件保持一致即可。例如 local-hub 服务针对 tcp 连接监听 8883 端口,其他服务与 local-hub 服务建立连接时,相应连接端口也一并设置为 8883 即可。

    11-hub.png cfc-core-hub-create04.png

    挂载 bie-demo-hub-confbie-demo-hub-logbie-demo-hub-data 三个存储卷。

    12-hub-conf.png 13-hub-log.png 14-hub-data.png

    最后可以看到总共是挂载了三个存储卷。

    15-three-vol.png

    baetyl-function-manager 服务配置

    点击新增服务,我们取名为 local-function-manager,模块选择 baetyl-function-manager

    16-service-manager.png

    挂载 bie-cfc-func-conf 存储卷。

    20-cfc-config.png 21-cfc-config.png

    baetyl-function-python36 服务配置

    点击新增服务,我们取名为 function-compute,模块选择 baetyl-function-python36

    22-python36.png

    存储卷选择挂载 bie-cfc-compute-confbie-cfc-compute-code

    23-compute.png 18-man-ser.png 24-code.png

    查看最终配置结果并发布

    服务配置完成,我们的核心服务如下图:

    19-all-ser.png

    核对服务配置无误,点击 “发布” 按钮发布此版本。

    cfc-core-publish.png

    发布完成,可以看到最新版本为 “v2” 版本,点击 "下载" 按钮,注意需要选择包括主程序的下载。

    cfc-core-download.png

    启动的步骤可参照 快速入门

    最后同样用 mqttbox 发送消息来进行测试,mqttbox 的使用可以参照 使用MQTTBox订阅数据检查结果 ,我们的输入用例为 {"x":1,"y":2,"z":3}, 结果如图,输出结果正是我们在CFC函数中 addadd2 函数计算的结果。

    mqttbox-result.png

    上一篇
    如何在自定义存储卷中添加python代码并调用
    下一篇
    应用模版