由于函数计算的各个语言环境内无法包含所有的依赖库,因此您使用FC组件成功部署项目后可能会调用失败。例如您编写的Python函数需要访问MySQL库,在调用函数时由于Python的运行环境内没有该库导致函数执行失败,因此在部署前需安装MySQL依赖库。本文介绍如何在各个语言下使用FC组件安装依赖。
前提条件
操作步骤
除了.NET Core外,Java、Node.js、Python、PHP和容器镜像都可以支持资源的快速构建。FC组件针对不同的语言分别支持以下包管理器manifest:
Python pip包管理器的requirements.txt文件。
Node.js npm包管理器的package.json文件。
Java maven包管理器的pom.xml文件。
PHP包管理器的composer.json文件。
容器镜像的Dockerfile文件。
包管理器文件需存放在代码目录中,即s.yaml文件内配置的codeUri
参数信息中。
Python
本文以Python 3为例,介绍如何安装依赖:
开发编辑源代码(图示中①)。
在项目目录中执行以下命令安装依赖:
s build --use-docker
执行该命令后,Serverless Devs会根据requirements.txt文件的内容下载对应的依赖至.s目录中(图示中②)。
执行以下命令部署项目:
s deploy
执行部署命令后,Serverless Devs会根据交付产物.s目录内的内容创建函数,同时设置依赖库的环境变量(图示中③),便于函数直接引入对应的代码依赖库。在执行输出的过程中您可以看到添加的环境变量如下图所示:
Node.js
本文以Node.js 10为例,介绍如何安装依赖:
开发编辑源代码(图示中①)。
在项目目录中执行以下命令安装依赖:
s build --use-docker
执行该命令后,Serverless Devs会根据package.json文件的内容下载对应的依赖至.s目录中(图示中②)。
执行以下命令部署项目:
s deploy
执行部署命令后,Serverless Devs会根据交付产物.s文件内的内容创建函数,同时设置依赖库的环境变量(图示中③),便于函数直接引入对应的代码依赖库。在执行输出的过程中您可以看到添加的环境变量如下图所示:
Java
本文以Java 8为例,介绍如何安装依赖:
开发编辑源代码(图示中①)。
在项目目录中执行以下命令,编译Java工程安装依赖:
s build --use-docker
执行该命令后,Serverless Devs会根据pom.xml文件的内容下载对应的依赖至.s目录中(图示中②)。
执行以下命令部署项目:
s deploy
执行部署命令后,Serverless Devs会根据交付产物.s文件内的内容创建函数,同时设置依赖库的环境变量,便于函数直接引入对应的代码依赖库。在执行的输出如下图所示:
PHP
本文以PHP 7.2为例,介绍如何安装依赖:
开发编辑源代码(图示中①)。
在项目目录中执行以下命令安装依赖:
s build --use-docker
执行该命令后,Serverless Devs会根据composer.json文件的内容下载对应的依赖至.s目录中(图示中②)。
执行以下命令部署项目:
s deploy
执行部署命令后,Serverless Devs会根据交付产物.s文件内的内容创建函数,同时设置依赖库的环境变量,便于函数直接引入对应的代码依赖库。在执行输出的过程中您可以看到添加的环境变量如下图所示:
Custom Container
本文以Custom Container为例,介绍如何安装依赖:
开发编辑源代码,修改s.yml文件,将文件内的
image
修改成您的ACR镜像。在项目目录中执行以下命令安装依赖:
s build --use-docker --dockerfile ./Dockerfile
执行该命令后,Serverless Devs会根据Dockerfile文件的内容下载对应的依赖至.s目录中。
执行以下命令部署项目:
s deploy -y
更多信息
在代码包的场景中,除了各个语言的库以外,还有一种更复杂的情况。例如在函数计算中部署Puppeteer应用,如果该应用的运行环境为Node.js,Puppeteer库还需要安装底层的So库,存放在apt-get.list文件内。
apt-get.list文件需要您手动创建,用于存放扩展库。同时,该文件需存放在代码目录中,即s.yaml文件内配置的codeUri
参数信息中。
创建Puppeteer项目,然后开发编辑源代码(图示中①)。
在目标目录中执行以下命令,初始化项目。
s init devsapp/start-puppeteer -d start-puppeteer
说明-d用于指定项目名称,本示例以start-puppeteer为例。
进入项目目录。
初始化项目的模板内包含Node.js+NAS部署和Container部署两种部署模式,本文介绍如何通过Node.js+NAS部署项目。
在项目目录中执行以下命令,进入项目目录:
cd start-puppeteer
在start-puppeteer项目内执行以下命令,进入nodejs12项目。
cd nodejs12
安装依赖。执行该命令后,Serverless Devs会根据package.json和apt-get.list文件的内容将对应的依赖下载至.s目录中(图示中②)。
说明通过该步骤下载的依赖与源代码打包成的交付产物ZIP包内不包含.fcignore文件。因为下载的依赖会被直接上传到NAS内,同时,打包成的交付产物也会比较小。
执行以下命令安装依赖:
s build
可选:执行以下命令,初始化NAS。
当您的s.yml文件内的nasConfig参数设置为
Auto
时,您可以执行该命令创建NAS;当您已经指定了nasConfig参数,则无需执行该命令。s nas init
执行以下命令将下载的apt-get依赖库上传至NAS。同时,apt-get库会被自动添加至
LD_LIBRARY_PATH
内(图示中③)。s nas upload -r ./.s/build/artifacts/puppeteer-nodejs12/html2png/.s/root /mnt/auto/root
执行以下命令将下载的npm依赖库上传至NAS(图示中④)。
s nas upload -r ./.s/build/artifacts/puppeteer-nodejs12/html2png/node_modules /mnt/auto/node_modules
执行以下命令,运行本地函数:
s local start
执行输出:
[2021-08-11T11:03:46.053] [INFO ] [FC-LOCAL-INVOKE] - HttpTrigger httpTrigger of puppeteer-nodejs12/html2png was registered url: http://localhost:7928/2016-08-15/proxy/puppeteer-nodejs12/html2png/ methods: GET,POST,PUT authType: anonymous Tips for next step ====================== * Deploy Resources: s deploy fc-puppeteer-nodejs12-html2png: status: succeed function compute app listening on port 7928!
执行以下命令,部署函数:
s deploy
执行部署命令后,Serverless Devs会根据交付产物.s文件内的内容创建函数,同时设置依赖库的环境变量,便于函数直接引入对应的代码依赖库。在执行输出的过程中您可以看到添加的环境变量如下图所示: