网站开发工程师的证件,c 网站开发平台,南宁做网站科技公司,珠海市官网网站建设平台前言
首先介绍下在本文出现的几个比较重要的概念#xff1a; 函数计算#xff08;Function Compute#xff09;: 函数计算是一个事件驱动的服务#xff0c;通过函数计算#xff0c;用户无需管理服务器等运行情况#xff0c;只需编写代码并上传。函数计算准备计算资源 函数计算Function Compute: 函数计算是一个事件驱动的服务通过函数计算用户无需管理服务器等运行情况只需编写代码并上传。函数计算准备计算资源并以弹性伸缩的方式运行用户代码而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。Fun: Fun 是一个用于支持 Serverless 应用部署的工具能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件template.yml协助您进行开发、构建、部署操作。Fun 的更多文档参考。fun install: fun install 是 fun 工具的一个子命令用于安装 pip 和 apt 依赖提供了命令行接口和 fun.yml 描述文件两种形式。 备注: 本文介绍的技巧需要 Fun 版本大于等于 2.9.3。
函数计算安装第三方依赖一大痛点文章 函数计算安装依赖库方法小结 对可能会遇到的问题和解决方法做了细致总结fun install 是基于之前的经验和成果将最佳实践的方法固化到工具中方便用户便捷的安装依赖。
初始化
使用 fun install init 在当前目录初始化一个 fun.yml 文件。这一步不是必须的如果您打算手写 fun.yml 然后通过 fun install 命令批量执行 taskinit 是一个好的开始。
在函数计算项目根目录执行 fun install init 命令选择一个 runtime。
$ fun install init
? Select runtime (Use arrow keys)python2.7python3nodejs6nodejs8java8php7.2
然后会在当前目录生成一个 fun.yml 文件内容如下
runtime: python2.7
tasks: []
安装 pip 包依赖
下面的命令安装 python 的 tensorflow 包
$ fun install --runtime python2.7 --package-type pip tensorflow
skip pulling image aliyunfc/runtime-python2.7:build-1.2.0...
Task [UNNAMED] PYTHONUSERBASE/code/.fun/python pip install --user tensorflow
说明
--runtime 指定 runtime如果已经初始化 fun.yml 文件 由于 fun.yml 里声明了 runtime ,该选项可以省略。--package-type 指定安装依赖的类型pip 和 apt 是目前的两个可选值。tensorflow 是一个 pip 包名。
命令执行在 fc-docker 提供的 container 中容器内部执行的命令会逐行打印出来比如上面命令中内部真实执行了 PYTHONUSERBASE/code/.fun/python pip install --user tensorflow 命令。
安装完成以后会在生成一个 .fun 目录 可执行文件会被放置到 .fun/python/bin 目录下库文件放置到 .fun/python/lib/python2.7/site-packages 下。
.fun
└── python├── bin│ ├── freeze_graph│ ├── markdown_py│ ├── pbr│ ├── saved_model_cli│ ├── tensorboard│ ├── tflite_convert│ ├── toco│ └── toco_from_protos└── lib└── python2.7└── site-packages├── tensorboard├── tensorboard-1.12.2.dist-info├── tensorflow├── tensorflow-1.12.0.dist-info├── termcolor-1.1.0.dist-info...
相比之前的 pip install -t . package-name 方式fun install 安装文件的存放位置更有组织依赖文件和代码文件分离开了便于清理、拆分后借助 OSS 或 NAS 初始化依赖文件。但是组织过后也带来一个新问题需要用户自定义环境变量库文件才能被程序找到。为了方便用户使用提供了一个 fun install env 打印出必要的环境变量。
$ fun install env
LD_LIBRARY_PATH/code/.fun/root/usr/lib/x86_64-linux-gnu:/code:/code/lib:/usr/local/lib
PATH/code/.fun/root/usr/local/bin:/code/.fun/root/usr/local/sbin:/code/.fun/root/usr/bin:/code/.fun/root/usr/sbin:/code/.fun/root/sbin:/code/.fun/root/bin:/code/.fun/python/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/sbin:/bin
PYTHONUSERBASE/code/.fun/python
关于如果设定函数计算的环境变量请参考 https://help.aliyun.com/document_detail/69777.html 。如果您使用 fun local 和 fun deploy 进行调试和部署您无需关注环境变量问题已经帮您设定好了。
使用 --save 持久化
install 命令加上 --save 参数会将命令持久化成 task 保存到 fun.yml 文件中。
$ fun install --runtime python2.7 --package-type pip --save tensorflow
skip pulling image aliyunfc/runtime-python2.7:build-1.2.0...
Task [UNNAMED] PYTHONUSERBASE/code/.fun/python pip install --user tensorflow
上面的命令多加了一行 --save 参数查看 fun.yml 内容
runtime: python2.7
tasks:- pip: tensorflowlocal: true
之后直接执行 fun install 不带参数就可以依次执行任务。
$ fun install
skip pulling image aliyunfc/runtime-python2.7:build-1.2.0...
Task [UNNAMED] PYTHONUSERBASE/code/.fun/python pip install --user tensorflow
使用 -v 显示详细日志
$ fun install -v
skip pulling image aliyunfc/runtime-python3.6:build-1.2.0...
Task [UNNAMED] apt-get update (if need)
Ign http://mirrors.aliyun.com stretch InRelease
Get:1 http://mirrors.aliyun.com stretch-updates InRelease [91.0 kB]
Get:2 http://mirrors.aliyun.com stretch-backports InRelease [91.8 kB]
Get:3 http://mirrors.aliyun.com stretch/updates InRelease [94.3 kB]
Hit http://mirrors.aliyun.com stretch Release.gpg
Hit http://mirrors.aliyun.com stretch Release
Get:4 http://mirrors.aliyun.com stretch-updates/main Sources [3911 B]
....
安装 apt 包依赖
函数计算使用 apt-get 安装依赖是另一类常见的安装问题使用 fun install 也可以方便的安装。
$ fun install --runtime python3 --package-type apt libzbar0
skip pulling image aliyunfc/runtime-python3.6:build-1.2.0...
Task [UNNAMED] apt-get update (if need) apt-get install -y -d -odir::cache/code/.fun/tmp libzbar0 bash -c for f in $(ls /code/.fun/tmp/archives/*.deb); do dpkg -x $f /code/.fun/root; done; bash -c rm -rf /code/.fun/tmp/archives
使用方法及其参数和 pip 包依赖类似只需要将 --package-type 设定成 apt, 包名使用日常 apt-get 可以安装的 deb 包名即可。
使用 fun.yml
fun.yml 由一组 task 组成执行 fun install 命令时会依次执行 task 达到批量安装的效果。
fun.yml 的文件格式如下
runtime: python3
tasks:- name: install libzbar0apt: libzbar0local: true- name install Pillow by pippip: Pillowlocal: true- name: just test shell taskshell: echo 111 1.txt
runtime 是必填的字段。目前 task 有三种类型apt, pip 和 shell。fun.yml 文件放置在 template.yml 文件中函数 codeUri 指向的目录如果 template.yml 里声明了多个函数并且放置在不同的 codeUri 目录需要创建多个 fun.yml 文件。
所有 task 的 name 字段是可选的没有 name 字段的时候执行的时候会输出为
Task [UNNAMED]
apt/pip task
apt 和 pip 类型的 task 都是 install task 的子类型描述格式类似
name: install libzbar0
apt: libzbar0
local: true
上面的 task 描述与下面的命令是等价的
fun install --package-type apt libzbar0
在使用 fun install 安装的过程中使用 --save 参数可以在当前目录的 fun.yml 文件中生成上面 task 的描述结构。
local 字段默认为 true表示依赖会被装在当前目录的 .fun 子目录下打包 zip 的时候回一并打包进去。设定为 false依赖安装到系统目录这种情况一般用于编译依赖比如某个执行文件或者库是编译或者构建期需要的运行期不要那可以设定 local: false打包的时候会被忽略不影响最终 zip 包的文件尺寸。
shell task
shell 类型的 task 是为基于源码编码的安装场景设计的。
name: install from source
shell: ./autogen.sh --disable-report-builder --disable-lpsolve --disable-coinmp
示例
下面是一个 python3 实现简单二维码识别程序部署到函数计算的例子。源码位于 https://github.com/aliyun/fun/tree/master/examples/install/pyzbar_example
本例子使用 pip 的 pyzbar 库进行二维码识别pyzbar 依赖 apt-get 安装的 libzbar0 库。装载图片需要 pip 的 Pillow 库。所以 fun.yml 的文件描述如下
runtime: python3
tasks:- apt: libzbar0local: true- pip: Pillowlocal: true- pip: pyzbarlocal: true
使用 fun install 安装依赖
$ fun install
skip pulling image aliyunfc/runtime-python3.6:build-1.2.0...
Task [UNNAMED] apt-get update (if need) apt-get install -y -d -odir::cache/code/.fun/tmp libzbar0 bash -c for f in $(ls /code/.fun/tmp/archives/*.deb); do dpkg -x $f /code/.fun/root; done; bash -c rm -rf /code/.fun/tmp/archives
Task [UNNAMED] PYTHONUSERBASE/code/.fun/python pip install --user Pillow
Task [UNNAMED] PYTHONUSERBASE/code/.fun/python pip install --user pyzbar
template.yml 文件内容如下
ROSTemplateFormatVersion: 2015-09-01
Transform: Aliyun::Serverless-2018-04-03
Resources:pyzbar-srv:Type: Aliyun::Serverless::Servicepyzbar-fun:Type: Aliyun::Serverless::FunctionProperties:Handler: index.handlerRuntime: python3Timeout: 60MemorySize: 128CodeUri: .
index.py 文件内容如下
from pyzbar.pyzbar import decode
from pyzbar.pyzbar import ZBarSymbol
from PIL import Imagedef handler(event, context):img Image.open(./qrcode.png)return decode(img, symbols[ZBarSymbol.QRCODE])[0].data
使用 fun local 在本地执行
fun local invoke pyzbar-fun
skip pulling image aliyunfc/runtime-python3.6:1.2.0...
ThalassiodraconRequestId: 964980d1-1f1b-4f91-bfd8-eadd26a307b3 Billed Duration: 630 ms Memory Size: 1998 MB Max Memory Used: 32 MB
Thalassiodracon 即为识别后的输出结果。
小结
本文介绍了 fun 工具的一个新特性 fun install 使用 fun install 可以方便的安装 apt 和 pip 软件包对于多次安装的工程化需求可以考虑将安装步骤持久化为 fun.yml 文件. fun.yml 文件提供了比命令行更多的功能可以编写 shell 类型的 task以支持源码安装的场景。可以通过设定 local: false将依赖安装的系统目录以解决编译依赖而非运行依赖的情况。 原文链接 本文为云栖社区原创内容未经允许不得转载。