一、内置依赖
云函数 SCF 各个运行时已内置部分常用依赖库,你可前往各运行时代码开发中查询:
·Node.js
·Python
·PHP
·Golang
二、安装依赖库
你可以将 SCF 代码所有的依赖库保存在代码包中,并上传至云端以供 SCF 使用。SCF 已支持的运行时及使用方法如下:
三、Node.js 运行时
Node.js 运行时支持以下三种依赖库安装方法:
依赖库同代码一起打包上传在线依赖安装使用依赖管理工具
通过依赖管理工具,例如 npm,在本地安装依赖后同函数代码一同打包上传。
注意:打包时函数入口文件需要在 zip 包的根目录下。如果打包整个文件夹并上传 zip 包,则会因解压后无法在根目录找到入口文件而导致函数创建失败。
这篇以安装 lodash 库为例:
1. 在本地终端中执行 mkdir test-package 命令,创建一个目录用于存放函数代码和依赖库。
2. 执行以下命令,在该目录下安装 lodash 依赖库。
cd test-packagenpm install lodash
3. 在该目录下创建函数入口文件 index.js 并在代码中引用 lodash 库。
'use strict';const _ = require('lodash');exports.main_handler = async (event, context) => { console.log("Hello World") console.log(event) console.log(event["non-exist"]) console.log(context) return event};
4. 将函数代码及依赖库一同压缩为 zip 包,在 Serverless 控制台 中上传打包的 zip 包并创建一个新函数。操作步骤如下:
4.1 登录 Serverless 控制台,单击左侧导航栏的函数服务。
4.2 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
4.3 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Node.js12.16。
·提交方法:选择本地上传zip包。
4.4 单击完成即可创建函数。
Node.js 运行时提供了在线依赖安装功能,可根据 package.json 中配置的依赖信息在线安装依赖包。详情请参见 在线依赖安装。
云函数在线编辑器 Serverless Web IDE 提供了终端功能,并在终端中内置了包管理工具 npm。注意Serverless Web IDE 对较新版本运行环境支持存在延时,如果对应运行环境下控制台未开放 Serverless Web IDE,请使用依赖库同代码一起打包上传或在线依赖安装方式进行依赖安装。这篇以在终端中安装 lodash 库为例:1. 登录 Serverless 控制台,在左侧选择函数服务。2. 在函数列表中,单击函数名,进入该函数的详情页面。3. 在“函数管理”页面中,选择函数代码 > 代码编辑,查看并编辑函数。4. 在 IDE 顶部的菜单栏终端中选择新终端,打开终端窗口。5. 在终端中执行如下命令,安装依赖库 lodash:cd src # 依赖库需要安装在与函数入口文件同一级的目录下,即需要进入`src`目录后再执行依赖安装操作。npm install lodash # 可通过终端查看 npm 版本6. 安装完成后,在 IDE 左侧的文件树中查看 package.json 和 node_modules。7. 单击部署后依赖库即可与函数代码一同打包上传到云端。如下:
四、Python 运行时
Python 运行时支持以下两种依赖库安装方法:
依赖库同代码一起打包上传使用依赖管理工具
通过依赖管理工具,例如 pip,在本地安装依赖后同函数代码一同打包上传。
这篇以安装 numpy 库为例:
1. 在本地终端中执行 mkdir test-package 命令,创建一个目录用于存放函数代码和依赖库。
2. 执行以下命令,在该目录下安装 numpy 依赖库。
cd test-packagepip install numpy -t . # 请关注所用 pip 版本是否适配函数运行环境,例如 python3.6 下请使用 pip36
3. 在该目录下创建函数入口文件 index.py 并在代码中引用 numpy 库。
# -*- coding: utf8 -*-import jsonimport numpydef main_handler(event, context): print("Received event: " + json.dumps(event, indent = 2)) print("Received context: " + str(context)) print("Hello world") return("Hello World")
4. 将函数代码及依赖库一同压缩为 zip 包,在 Serverless 控制台 中上传打包的 zip 包并创建一个新函数。操作步骤如下:
4.1 登录 Serverless 控制台,单击左侧导航栏的函数服务。
4.2 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
4.3 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Python 3.6。
·提交方法:选择本地上传zip包。
4.4 单击完成即可创建函数。
云函数在线编辑器 Serverless Web IDE 提供了终端功能,并在终端中内置了包管理工具 pip。
注意:Serverless Web IDE 对较新版本运行环境支持存在延时,如果对应运行环境下控制台未开放 Serverless Web IDE,请使用依赖库同代码一起打包上传或在线依赖安装方式进行依赖安装。
这篇以在终端中安装 numpy 库为例:
1. 登录 Serverless 控制台,在左侧选择函数服务。
2. 在函数列表中,单击函数名,进入该函数的详情页面。
3. 在“函数管理”页面中,选择函数代码 > 代码编辑,查看并编辑函数。
4. 在 IDE 顶部的菜单栏终端中选择新终端,打开终端窗口。
5. 在终端中执行如下命令,安装依赖库 numpy:
cd src # 依赖库需要安装在与函数入口文件同一级的目录下,即需要进入`src`目录后再执行依赖安装操作。pip install numpy -t . # 可通过终端查看 pip 版本,确认是否适配函数运行环境
6. 安装完成后,在 IDE 左侧的文件树中查看已安装的依赖库。
7. 单击部署后依赖库即可与函数代码一同打包上传到云端。
五、PHP 运行时
注意:SCF 支持的 PHP 版本为 PHP 8.0、PHP 7.4、PHP 7.2 和 PHP 5.6,PHP 不同的小版本号存在不兼容的可能,请核对版本号后进行依赖安装。
安装自定义库安装自定义扩展
通过依赖管理工具,例如 composer,在本地安装依赖后同函数代码一同打包上传。
注意:打包时函数入口文件需要在 zip 包的根目录下。如果打包整个文件夹并上传 zip 包,则会因解压后无法在根目录找到入口文件而导致函数创建失败。
这篇以 PHP7.2 安装 requests 库为例:
1. 在本地终端中执行 mkdir test-package 命令,创建一个目录用于存放函数代码和依赖库。
2. 在 test-package下创建Composer.json并指定需要安装的依赖库及版本。
{"require": { "requests": ">=1.0" }}
3. 执行以下命令,在该目录下安装 requests 依赖库。
cd test-packagecomposer install
4. 在该目录下创建函数入口文件 index.php 并在代码中引用 requests 库。
<?phprequire 'vendor/autoload.php';function main_handler($event, $context) { return "hello world";}?>
5. 将函数代码及依赖库一同压缩为 zip 包,在 Serverless 控制台 中上传打包的 zip 包并创建一个新函数。操作步骤如下:
5.1 登录 Serverless 控制台,单击左侧导航栏的函数服务。
5.2 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
5.3 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Php7.2。
·提交方法:选择本地上传zip包。
5.4 单击完成即可创建函数。
在函数入口文件的同级目录下创建扩展文件夹 php_extension 并添加自定义扩展文件 .so 和配置文件 php.ini,同函数代码一起打包上传。
这篇以 PHP7.2 安装自定义扩展 swoole.so 为例。
1. 在本地终端中执行 mkdir test-package 命令,创建一个目录用于存放函数代码和依赖库。
2. 执行以下命令在 test-package 创建文件夹 php_extension,并将扩展对应的配置文件 php.ini 和扩展文件 .so 放在该目录下,目录结构如下:
|____php_extension| |____php.ini| |____swoole.so|____index.php
3. 自定义扩展支持从代码中或层中加载,如果扩展以层的形式上传,请确保上传到层的 zip 解压后的目录格式如下:
|____php_extension| |____swoole.so
4. php.ini 写法:
·扩展在代码目录下:
extension=/var/user/php_extension/swoole.so
·扩展在层目录下:
extension=/opt/php_extension/swoole.so
5. 在该目录下创建函数入口文件 index.php,可通过extension_loaded( )函数检查扩展是否加载成功,加载成功返回true,否则返回false。
<?phpfunction main_handler($event, $context) { var_dump(extension_loaded('swoole')); return "hello world";}?>
6. 将函数代码及依赖库一同压缩为 zip 包,在 Serverless 控制台 中上传打包的 zip 包并创建一个新函数。操作步骤如下:
1. 登录 Serverless 控制台,单击左侧导航栏的函数服务。
6.1 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
6.2 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Php7.2。
·提交方法:选择本地上传zip包。
6.3 单击完成即可创建函数。
六、Java 运行时
通过依赖管理工具,例如 maven,在本地安装依赖后同函数代码一同打包上传。
1. 在本地终端中执行 mkdir test-package 命令,创建一个目录用于存放函数代码和依赖库。
2. 在该目录下创建 pom.xml,并在 pom.xml 中配置依赖信息。
3. 在项目文件夹根目录下执行 mvn package 命令,编译输出如下:
[INFO] Scanning for projects…[INFO][INFO] ————————————————————————[INFO] Building java-example 1.0-SNAPSHOT[INFO] ————————————————————————[INFO]…[INFO] ————————————————————————[INFO] BUILD SUCCESS[INFO] ————————————————————————[INFO] Total time: 1.785 s[INFO] Finished at: 2017-08-25T10:53:54+08:00[INFO] Final Memory: 17M/214M[INFO] ————————————————————————
4. 将函数代码及依赖库一同压缩为 jar 包,在 Serverless 控制台 中上传打包的 jar 包并创建一个新函数。操作步骤如下:
4.1 登录 Serverless 控制台,单击左侧导航栏的函数服务。
4.2 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
4.3 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Java8。
·提交方法:选择本地上传zip包。
4.4 单击完成即可创建函数。
七、Go 运行时
使用方法:打包时上传最终的二进制文件。
Go 运行时的依赖库同代码一起编译后得到二进制文件,在 Serverless 控制台 中上传打包的二进制文件并创建一个新函数。操作步骤如下:
1. 登录 Serverless 控制台,单击左侧导航栏的函数服务。
2. 在主界面上方选择期望创建函数的地域,并单击新建,进入函数创建流程。
3. 在“新建函数”页面,填写函数基本信息。如下:
·创建方式:选择使用从头开始来新建函数。
·运行环境:选择Go1。
·提交方法:选择本地上传zip包。
4. 单击完成即可创建函数。