自定义函数与依赖包解耦下发

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
所有文档
menu
没有找到结果,请重新输入

智能边缘 BIE

  • 产品描述
    • 名词解释
    • 使用限制
    • 产品概述
    • 产品优势
    • 应用场景
  • 配置文件说明
    • baetyl-rule
    • baetyl-remote-object
    • baetyl-function
    • baetyl-broker
  • 快速入门
    • 融合模式节点安装
    • 快速入门指南
    • 离线安装k3s+docker
    • 进程模式节点安装
      • 在linux上安装
      • 在windows上安装
  • 典型实践
    • OPC-UA使用
    • 使用BIE函数计算调用文心一言
    • 边缘规则引擎实战
      • 集成Kuiper流式计算引擎
      • 边缘规则实例
    • 将AI中台模型部署至边缘节点
      • 获取AI中台模型部署包进行应用部署
      • 部署模型SDK至Atlas200DK
      • 模型中心1.0
        • 通过AI中台转换模型并下发至边缘
        • 通过AI中台直接将模型下发至边缘
      • 模型中心2.0
        • 将物体检测模型部署至边缘
        • 将图像分类模型部署至边缘
    • 部署PaddleServing模型
      • 使用BIE下发PaddleOCR模型
      • 制作GPU版本Paddle Serving推理镜像
      • 通过BIE部署Paddle Serving
    • Modbus协议采集温湿度传感器
      • 连接边缘baetyl-broker
      • 使用内置modbus驱动采集数据并进行边缘函数计算
      • 数据从baetyl-broker上传至IoTCore
    • 部署EasyDL模型SDK
      • 部署EasyDL烟火检测模型至ARM64节点
    • 部署EasyEdge模型SDK
      • 进程模式下发python SDK模型
      • 使用EasyEdge模型转换获取边缘模型
      • 部署模型SDK至Windows设备
      • 部署模型SDK至Intel Movidius设备
      • 部署模型SDK至Jetson Xavier
    • 部署自定义容器镜像模型
      • 部署mnist手写数字识别模型
      • 部署物体检测模型
    • video-infer实现边缘视频AI推断
      • 使用Movidius VPU加速边缘视频推断
      • 使用CPU实现边缘视频推断
  • 操作指南
    • 主子用户鉴权
    • 设备管理
      • 设备模拟器
      • 子设备数据云边交互方式
      • 进程模式软网关设备接入指南
      • 子设备数据云边交互方式-v2
      • 视频流管理
        • IPC子设备和驱动
        • 边缘转发RTSP视频流
      • 设备接入
        • 设备模型管理
        • 接入模板
        • 设备管理
        • 子设备绑定
      • 驱动管理
        • 进程模式软网关自定义驱动开发
        • 驱动管理
        • GO语言实现示例
        • 自定义驱动开发指南
      • 不同协议设备接入
        • BACnet设备接入
        • OPC-UA设备接入
        • Modbus 设备接入
        • IEC104设备接入
        • OPC-DA设备接入
    • 节点管理
      • 边缘应用获取云端STS鉴权
      • 进程模式节点
      • 远程MQTT消息下发
      • 节点运行模式说明
      • 节点影子
      • 远程调用
      • 容器模式节点
      • 远程调试
      • 远程SSH边缘节点
      • 边缘节点OpenAPI
      • 证书管理
      • 节点预配
    • 业务编排
      • 单元管理
      • 技能管理
      • 常见技能
    • 应用管理
      • 业务模版
      • 应用部署
        • 应用运行模式与分类说明
        • 函数应用
          • 自定义函数与依赖包解耦下发
          • 从CFC引入多个函数下发
          • 典型使用说明
          • 使用函数调用边缘AI模型
          • 自定义函数与依赖包整体下发
        • 容器应用
          • subpath子路径使用说明
          • workdir工作目录使用说明
          • Job类型容器应用
          • 容器应用状态说明
          • 原生yaml接入使用说明
          • 端口映射说明
          • 容器应用工作负载类型说明
          • Deployment类型容器应用
          • DaemonSet类型容器应用
          • QPS监控
          • emptyDir卷使用说明
          • 边缘服务调用
        • 进程应用
          • 进程应用概述
          • 可执行二进制程序类型进程应用
          • 可执行脚本类型进程应用
      • 配置管理
        • 证书
        • 函数
        • 镜像仓库凭证
        • 配置项
        • 密文
        • 镜像
        • 进程程序包
    • AI加速卡
      • AI加速卡通用资源调度方法
      • 自定义加速卡算力指标采集
      • 华为昇腾
        • 昇腾310资源监控
      • 英伟达
        • GPU资源调度-显存隔离
        • Jetson资源监控
        • GPU资源调度-显存共享
        • Jetson依赖说明
        • NVIDIA GPU资源监控
      • 寒武纪
        • MLU270资源监控
      • 百度昆仑
        • 昆仑芯片资源监控
      • 比特大陆
        • 挂载比特大陆边缘计算盒子tpu资源
        • BM-SE5资源监控
  • 服务等级协议SLA
    • 服务等级协议SLA(V1.0)
  • 备份
    • 进程模式应用
    • 部署通用CPU模型
    • 部署模型SDK至Atlas200DK
    • 适配列表
    • 连接边缘节点本地baetyl-broker
    • 使用自定义modbus应用采集
    • NVIDIA GPU资源管理
    • FAQ
    • NVIDIA Jetson专用模型部署-进程模式
    • 容器模式应用
    • 连接边缘节点本地baetyl-broker服务
    • DaemonSet类型和job类型服务部署
    • 通用CPU模型部署-容器模式
    • NVIDIA Jetson专用模型部署-容器模式
    • 功能发布记录
    • 在BIE控制台部署从AI中台下载的模型
    • EasyEdge概述
    • Nvidia_Jetson
      • 使用NVIDIA官方镜像运行模型-容器模式
      • 二进制程序运行模型-进程模式
      • 使用edgekit镜像运行模型-容器模式
    • 下载专区
      • 相关资源下载
  • 产品定价
    • 产品定价
  • 文档中心
  • arrow
  • 智能边缘BIE
  • arrow
  • 操作指南
  • arrow
  • 应用管理
  • arrow
  • 应用部署
  • arrow
  • 函数应用
  • arrow
  • 自定义函数与依赖包解耦下发
本页目录
  • 1、背景描述
  • 2、本地测试代码开发
  • 2.1、测试用例说明
  • 2.2、用例代码
  • 2.3、依赖包整理
  • 2.4、函数本地测试
  • 2.5、上传依赖包至对象存储
  • 3、创建配置项
  • 3.1、创建配置项python3-request-package
  • 3.2、创建函数python-code-1
  • 4、应用创建
  • 5、创建测试边缘节点
  • 6、配置 baetyl-rule
  • 7、配置 baetyl-broker
  • 8、端侧验证

自定义函数与依赖包解耦下发

更新时间:2025-08-21

1、背景描述

在使用边缘函数时,边缘函数常常需要使用import来引用第三方依赖。本文将介绍如何将依赖包上传至对象存储,以及如何在编写函数代码时直接引用依赖包。本文将以 Python3.6 为例进行说明。

2、本地测试代码开发

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

2.1、测试用例说明

我们编写的用例是获取 https://cloud.baidu.com/ 的 headers 信息

2.2、用例代码

新建一个代码文件,命名为 index.py,代码如下:

Python
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4import requests
5
6def handler(event, context):
7  """
8  data: {"action": "A"}
9  """
10  if 'action' in event:
11    if event['action'] == 'A':
12      r = requests.get('https://cloud.baidu.com/')
13      if str(r.status_code) == '200':
14        event['info'] = dict(r.headers)
15      else:
16        event['info'] = 'exception found'
17    else:      event['info'] = 'action error'
18  else:
19    event['error'] = 'action not found'
20
21  return event

2.3、依赖包整理

在用例代码当中,我们我们看到使用了 requests 库,我们需要把 requests 这个依赖包下载下载。在本地新建一个文件夹python3-request,进入到文件夹内,执行request下载命令。

Shell
1# 进入python3-request文件夹
2cd python3-request
3# 下载request库
4pip3 download requests

执行过程如下图所示:

image.png

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

image.png

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

Shell
1unzip -d . "*.whl"

image.png

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

Shell
1rm -rf *.whl *.dist-info

执行完毕以后,就只剩下request依赖包以及request自身的依赖,如下图所示:

image.png

执行压缩命令,得到request依赖包的zip文件

Shell
1# 进入python3-request文件夹
2cd python3-request
3# 将当前目录下的所有内容压缩到python3-request.zip文件当中
4zip -r python3-request.zip ./*

2.4、函数本地测试

在上传python3-request.zip依赖包之前,

我们可以先做一个简单的测试,看下 index.py 是否可以正确的输出我们想要的header。

1、将 index.pycopy到python3-request目录下。

2、在python3-request目录下新建一个 test.py 文件,代码内容如下:

Python
1import index
2
3event = {}
4event['action'] = "A"
5print(index.handler(event, ""))

3、执行python3 test.py查看输出结果。可以看到正确输出了我们想要的 handler 内容,如下图所示:

image.png

2.5、上传依赖包至对象存储

将 python3-request.zip 上传到云端 对象存储,可点击此处下载。

image.png

3、创建配置项

3.1、创建配置项python3-request-package

创建配置项python3-request-package,该配置项为函数依赖包,配置项信息如下图所示:

image.png

  • 类型:HTTP
  • URL:https://bie-document.gz.bcebos.com/baetyl-function/python3-request.zip
  • 文件名称:python3-request.zip
  • 是否解压:是

3.2、创建函数python-code-1

创建函数python-code-1,如下图所示:

image.png

函数代码是在本地测试代码index.py基础上做的修改,代码如下所示:

Python
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4import sys 
5sys.path.append("/var/lib/baetyl/python3") 
6import requests
7
8def handler(event, context):
9  """
10  data: {"action": "A"}
11  """
12  if 'action' in event:
13    if event['action'] == 'A':
14      r = requests.get('https://cloud.baidu.com/')
15      if str(r.status_code) == '200':
16        event['info'] = dict(r.headers)
17      else:
18        event['info'] = 'exception found'
19    else:      event['info'] = 'action error'
20  else:
21    event['error'] = 'action not found'
22
23  return event

可以看到,多了如下两行代码,改代码主要是用于引用依赖包函数。

Python
1import sys 
2sys.path.append("/var/lib/baetyl/python3") 

4、应用创建

1、创建函数应用bie-python

2、配置函数应用,如下图所示:

image.png

  • 基本信息

    • 函数配置项:选择前面创建的python-code-1
    • 运行时:选择python3
  • 函数列表

    • 函数名称:process
    • 函数入口:index.handler,因为python-code-1函数的名称是index.py,函数当中定义了handler,所以此处为index.handler
    • 容器目录:.,使用点号,表示当前目录
  • 卷配置

    • 前三个是默认配置卷,不用修改
    • 添加一个配置项,选择前面创建的python3-request-package,卷名称也使用python3-request-package即可。

5、创建测试边缘节点

1、新建一个边缘节点,开通baetyl-rule和baetyl-function两个系统应用,如下图所示:

image.png

2、将bie-python这个函数应用部署到测试节点,部署完毕以后的应用清单如下图所示:

image.png

6、配置 baetyl-rule

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

image.png

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

image.png

baetyl-rule 的配置如下:

YAML
1rules:
2  - name: rule1
3    source:
4      topic: broker/topic1
5    target:
6      topic: broker/topic2
7    function:
8      name: bie-python/process
9
10logger:
11  level: debug
12  encoding: console

函数的完整路径是 服务名称/函数入口 ,则上述函数的调用路径为bie-python/process。

7、配置 baetyl-broker

参考 baetyl-rule 应用的配置方法,同步配置 baetyl-broker 应用。

修改broker-conf配置文件,配置内容如下:

YAML
1session:
2  sysTopics:
3    - $link
4    - $baetyl
5logger:
6  level: debug
7  encoding: console
8listeners:
9  - address: 'tcp://0.0.0.0:8883'
10principals:
11  - username: test
12    password: test
13    permissions:
14      - action: pub
15        permit:
16          - '#'
17      - action: sub
18        permit:
19          - '#'

为 baetyl-broekr 添加一个8883:8883的端口映射,将baetyl-broker服务暴露到宿主机上,边缘通过MQTT-BOX进行测试

image.png

8、端侧验证

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

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

image.png

2、连接成功后,可以看到Connected,如下所示:

image.png

3、点击Add Subscriber,订阅broker/topic1和broker/topic2两个topic。

4、在上图的Payload处,输入 {"action":"A"} ,然后点击Publish。然后可以在broker/topic2处看到我们请求的 https://cloud.baidu.com/ 的 header 内容。如下图所示:

image.png

上一篇
应用运行模式与分类说明
下一篇
从CFC引入多个函数下发