上云无忧 > 文档中心 > 百度智能云智能边缘 - 自定义函数与依赖包解耦下发
智能边缘
百度智能云智能边缘 - 自定义函数与依赖包解耦下发

文档简介:
1、背景描述: 在使用边缘函数时,边缘函数常常需要使用import来引用第三方依赖。本文将介绍如何将依赖包上传至对象存储,以及如何在编写函数代码时直接引用依赖包。本文将以 Python3.6 为例进行说明。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

1、背景描述

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

2、本地测试代码开发

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

2.1、测试用例说明

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

2.2、用例代码

新建一个代码文件,命名为 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

2.3、依赖包整理

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

# 进入python3-request文件夹 cd python3-request # 下载request库 pip3 download requests

执行过程如下图所示:

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

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

unzip -d . "*.whl"

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

rm -rf *.whl *.dist-info

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

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

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

2.4、函数本地测试

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

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

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

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

import index

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

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

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

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

3、创建配置项

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

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

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

3.2、创建函数python-code-1

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

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

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys 
sys.path.append("/var/lib/baetyl/python3") 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

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

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

4、应用创建

1、创建函数应用bie-python

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

  • 基本信息

    • 函数配置项:选择前面创建的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两个系统应用,如下图所示:

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

6、配置 baetyl-rule

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

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

baetyl-rule 的配置如下:

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

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

7、配置 baetyl-broker

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

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

session: sysTopics: - $link - $baetyl logger: level: debug encoding: console listeners: - address:
 'tcp://0.0.0.0:8883' principals: - username: test password: test permissions: - action: pub permit: - '#' - action: sub permit: - '#'

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

8、端侧验证

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

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

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

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

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

相似文档
  • 1、场景: 边缘节点上部署了AI模型,现在希望使用函数触发式调用AI模型,并将AI模型返回结果发送到边缘Broker当中,供其他用户应用订阅。 2、方案: 整体边缘函数调用结构如下图所示:
  • 配置项是一种用于存储应用所需配置信息的资源类型,配置项允许您将配置文件从应用容器镜像中解耦,从而增强应用的可移植性。和密文类型配置存储敏感信息不同,配置项主要用于存储常规的配置信息,例如一组配置文件。
  • 函数配置项是配置项的子集,默认添加了函数标签。用于存储函数应用需要加载的程序脚本,支持 Python36、Nodejs10、SQL 等运行时。添加函数标签后,可以在创建函数应用时选择该配置项使用。
  • 1、简介: 进程程序包(简称“程序包”),是一种特殊的配置项,它指定了进程模式应用的程序服务入口。 一个程序包对应一个程序入口,一个进程模式应用可以包含多个程序包。即部署一个进程模式应用,可以下发多个程序服务。
  • 密文用于存储敏感数据,例如密码,令牌或密钥。它们可能包含一个或多个键值对。与添加配置项一样,应用服务将密文以数据卷挂载的方式使用。例如,在“卷配置”中挂载密文类型的卷,使其成为 Pod 中的文件。对于密文的任何更新,都会通过 Report/Desire 机制自动更新到正在使用它的 Pod 里。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部