扩展函数的存储空间
FuncitonGraph提供了磁盘挂载功能,通过挂载文件系统可为函数带来如下优势:
- 相比于临时存储空间/tmp,可以极大的扩展函数的执行存储空间。
- 多个函数之间可以挂载同一个文件系统,共享访问已经配置好的文件系统。
- 利用ECS已有的存储能力,可实现计算资源的动态扩展。

函数的临时存储空间/tmp路径下可以写临时文件,最大不能超过10,240MB。
目前FunctionGraph支持挂载以下文件系统:
- SFS Turbo文件系统
专属弹性文件服务(SFS Turbo)为用户提供一个完全托管的共享文件存储,能够弹性伸缩至PB级规模,最高可提供亚毫秒级低时延、千万级IOPS、百GB带宽。具备高可用性和持久性,为海量的小文件、低延迟高IOPS型应用提供有力支持。详情请参见SFS产品介绍。
- ECS共享目录
ECS共享目录,是通过NFS服务把ECS上的指定目录设置为共享目录,函数可以挂载对应目录进行读写等操作,实现计算资源的动态扩展。此类型适合业务不太频繁的场景。
- SFS容量型文件系统(仅存量用户使用)
弹性文件服务(Scalable File Service,SFS)容量型文件系统为用户提供一个完全托管的共享文件存储,能够弹性伸缩至PB规模,具备高可用性和持久性,为海量数据、高带宽型应用提供有力支持。详情请参见SFS产品介绍。
约束与限制
- 当前挂载SFS容量型文件系统仅支持存量用户使用,请选择SFS Turbo文件系统和ECS共享目录进行挂载。
- 使用磁盘挂载功能需要文件系统开放如下端口:
对于Ubuntu系统还需再开放3个端口,获取方式请在任意目录下执行如下命令。
rpcinfo -p|grep mountd|grep tcp
具体请参见弹性文件服务会占用用户的哪些资源。
前提条件
- 挂载SFS Turbo文件系统
- 挂载ECS共享目录
- 已创建待挂载的ECS,具体操作请参见购买ECS。
创建ECS时请记录ECS所使用的VPC和子网信息。
- 已在ECS上创建NFS共享目录,具体操作请参考在ECS创建NFS共享目录。
- 已创建挂载ECS共享目录所需的相关委托,具体操作请参见配置函数的委托权限。
- 已创建待挂载的ECS,具体操作请参见购买ECS。
- 挂载SFS容量型文件系统
挂载SFS Turbo文件系统
- 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页。
- 在“设置”页签下选择“权限”,配置函数访问SFS Turbo文件系统的委托。
- “函数配置委托”参数选择前提条件中已创建的委托权限。
- 单击“保存”完成配置。
- 在“设置”页签下选择“网络配置”,配置函数访问SFS Turbo文件系统的VPC网络。
- 开启“函数访问VPC内资源”。
- 配置“VPC”和“子网”为前提条件中记录的VPC和子网。
- 单击“保存”完成配置。
- 在“设置”页签下选择“磁盘挂载”。
- 单击“添加挂载”,在弹窗中配置SFS Turbo文件系统的挂载信息。
表1 挂载SFS Turbo文件系统参数说明 参数
说明
用户ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户ID。
对于SFS Turbo文件系统,保持默认值-1。
用户组ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户组ID。
对于SFS Turbo文件系统,保持默认值-1。
文件系统来源
选择要挂载的文件系统类型,此处选择“SFS Turbo”,即SFS Turbo文件系统。
文件系统名称
选择要挂载的SFS Turbo文件系统名称。
共享目录路径
文件系统共享的目录路径,路径须以“/”开头,例如:/a。
不配置表示函数能访问文件系统所有的目录路径。如果配置具体目录路径,则表示函数只能访问该目录路径。
函数访问路径
函数访问文件系统中文件时所使用的目录路径,路径须以“/”开头,且最多设置为两级,建议配置为/mnt或/home开头的二级目录。
不能使用系统已存在的目录,否则会报“failed to mount exist system path”错误。
例如,共享目录路径为“/a”,其下有文件“/a/b”和“/a/c/d”,函数访问路径为“/mnt/test”,则函数访问文件b和文件d的路径为“/mnt/test/b”和“/mnt/test/c/d”。
- 单击“确定”,完成挂载配置。
挂载ECS共享目录
- 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页。
- 在“设置”页签下选择“权限”,配置函数访问ECS共享目录的委托权限。
- “函数配置委托”参数选择前提条件中已创建的委托。
- 单击“保存”完成配置。
- 在“设置”页签下选择“网络配置”,配置函数访问ECS共享目录的VPC网络。
- 开启“函数访问VPC内资源”。
- 配置“VPC”和“子网”为前提条件中记录的VPC和子网。
- 单击“保存”完成配置。
- 在“设置”页签下选择“磁盘挂载”。
- 单击“添加挂载”,在弹窗中配置ECS共享目录的挂载信息。
表2 挂载ECS共享目录参数说明 参数
说明
用户ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户ID。
- 对于使用Windows系统的ECS,保持默认值-1。
- 对于使用Linux系统的ECS,为系统中的uid。例如Linux系统的用户名为test-user,则可以在系统中使用用id test-user命令查询uid和gid。
用户组ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户组ID。
- 对于使用Windows系统的ECS,保持默认值-1。
- 对于使用Linux系统的ECS,为系统中的gid。例如Linux系统的用户名为test-user,则可以在系统中使用用id test-user命令查询gid。
文件系统来源
选择要挂载的文件系统类型,此处选择“ECS”,即ECS共享目录。
云服务器名称
选择要挂载的ECS名称。
共享目录路径
文件系统共享的目录路径,路径须以“/”开头,例如:/a。
不配置表示函数能访问文件系统所有的目录路径,如果配置具体目录路径,则表示函数只能访问该目录路径。
函数访问路径
函数访问文件系统中文件时所使用的目录路径,路径须以“/”开头,且最多设置为两级,建议配置为/mnt或/home开头的二级目录。
不能使用系统已存在的目录,否则会报“failed to mount exist system path”错误。
例如,共享目录路径为“/a”,其下有文件“/a/b”和“/a/c/d”,函数访问路径为“/mnt/test”,则函数访问文件b和文件d的路径为“/mnt/test/b”和“/mnt/test/c/d”。
- 单击“确定”,完成挂载配置。
在ECS创建NFS共享目录
- Linux系统(CentOS、SUSE、Euler OS、Fedora、OpenSUSE等)
- 配置Yum源。
- 在/etc/yum.repos.d目录下创建文件euleros.repo(文件名称euleros可自定义,但文件扩展名必须以“.repo”结尾)。
- 执行以下命令编辑euleros.repo文件。
vi /etc/yum.repos.d/euleros.repo
- 在euleros.repo文件中添加如下配置信息。
[base] name=EulerOS-2.0SP3 base baseurl=http://repo.huaweicloud.com/euler/2.3/os/x86_64/ enabled=1 gpgcheck=1 gpgkey=http://repo.huaweicloud.com/euler/2.3/os/RPM-GPG-KEY-EulerOS
Euler 2.0SP5版本yum添加的配置信息如下:
[base] name=EulerOS-2.0SP5 base baseurl=http://repo.huaweicloud.com/euler/2.5/os/x86_64/ enabled=1 gpgcheck=1 gpgkey=http://repo.huaweicloud.com/euler/2.5/os/RPM-GPG-KEY-EulerOS
表3 参数说明 名称
说明
name
仓库的名称。
baseurl
仓库的地址。
- 使用http协议的网络地址:http://path/to/repo
- 使用本地仓库地址:file:///path/to/local/repo
gpgcheck
表示是否进行gpg(GNU Private Guard)校验,以确定RPM包来源的有效性和安全性。
- 1:表示进行gpg校验。
- 0:表示不进行gpg校验。
- 不配置:默认行gpg校验。
- 按“Esc”退出编辑模式,然后输入“:wq”并回车,保存euleros.repo文件并退出。
- 执行以下命令清理缓存。
yum clean all
- 执行以下命令安装nfs-utils。
yum install nfs-utils
- 设置共享目录。
- 执行以下命令编辑/etc/exports文件。
vi /etc/exports
- 在exports文件中添加如下配置信息。
/sharedata 192.168.0.0/24(rw,sync,no_root_squash)
/sharedata表示要共享的目录路径,192.168.0.0/24表示目录要共享给该网段的其他服务器。
- 按“Esc”退出编辑模式,然后输入“:wq”并回车,保存exports文件并退出。
- 执行以下命令编辑/etc/exports文件。
- 执行以下命令启动nfs服务。
systemctl start rpcbind service nfs start
- 执行以下命令判断是否设置成功。
exportfs -v
如果回显信息有打印刚配置的共享目录路径,表示设置成功。
- 修改共享目录。
如果需要修改或新增共享目录,参考3修改配置文件,修改完成后执行以下命令重启nfs服务。
service nfs restart
- 设置rpcbind开机启动(可选)
systemctl enable rpcbind
- 配置Yum源。
- Linux系统(Ubuntu)
- 执行以下命令安装nfs-kernel-server。
sudo apt-get update sudo apt install nfs-kernel-server
- 设置共享目录。
- 执行以下命令编辑/etc/exports文件。
vim /etc/exports
- 在exports文件中添加如下配置信息。
/sharedata 192.168.0.0/24(rw,sync,no_root_squash)
/sharedata表示要共享的目录路径,192.168.0.0/24表示目录要共享给该网段的其他服务器。
- 按“Esc”退出编辑模式,然后输入“:wq”并回车,保存exports文件并退出。
- 执行以下命令编辑/etc/exports文件。
- 执行以下命令启动nfs服务。
service nfs-kernel-server restart
- 执行以下命令判断是否设置成功。
exportfs -v
如果回显信息有打印刚配置的共享目录路径,表示设置成功。
- 修改共享目录。
如果需要修改或新增共享目录,参考2修改配置文件,修改完成后执行以下命令重启nfs服务。
service nfs restart
- 设置rpcbind开机启动(可选)
systemctl enable rpcbind
- 执行以下命令安装nfs-kernel-server。
- Windows系统(WinNFSd软件)
- 从sourceforge获取WinNFSd软件。
- 解压WinNFSd软件,并在解压后的目录中创建一个文件夹“nfs”。
- 设置“nfs”文件夹的共享和读写权限。
- 右键单击“nfs”文件夹,选择“属性”。
- 选择“共享”页签,然后单击“共享(S)...”。
- 添加“Everyone”用户,然后单击“共享(H)”。
图1 添加Everyone用户
- 选择“安全”页签,在“组或用户名(G)”列表中选择“Everyone”,然后单击“编辑(E)...”。
- 在弹出的“安全”设置窗口中,在“组或用户名(G)”列表中选择“Everyone”,在“Everyone的权限(P)”列表中的“允许”勾选框下勾选“读取”和“写入”,最后单击“确定”。
- 关闭所有的防火墙,包括“域网络”、“专用网络”和“公用网络”,等使用完后,再打开防火墙。
- 进入路由器的虚拟服务器进行端口映射,打开外部网络的端口111、2049及1058。
- 执行以下命令设置NFS共享,更多的命令解释请参考https://github.com/winnfsd/winnfsd。
WinNFSd.exe -addr IP地址 F:\nfs /nfs
IP地址为Windows系统的本机IP地址192.168.x.x,F:\nfs为nfs文件夹的实际路径。
- Windows系统(haneWIN NFS Server软件)
- 从官网获取haneWIN NFS Server软件。
注意,haneWIN NFS Server为收费软件。
- 以Windows系统管理员身份运行软件包中的“.exe”文件,安装haneWIN NFS Server。
- 安装完成后打开“NFS Server”软件,选择“Edit > Preferences”。
- 选择“Exports”页签,单击“Edit exports file”,配置共享目录,“NFS”、“Server”和“PortMapper”页签下的配置保持默认,完成后单击“Save”保存。
配置共享目录的格式为“D:\share -public -name:nfs”,表示将“D:\share”文件夹权限设置为“public”,同时定义了一个别名“nfs”。
- 单击“确定”完成配置。
- 关闭所有的防火墙,包括“域网络”、“专用网络”和“公用网络”,等使用完后,再打开防火墙。
可以在Linux系统中执行如下命令挂载目录,验证文件共享是否成功。
mount -t nfs -o nolock 192.168.xxx.xxx:/nfs /mnt
- “192.168.xxx.xxx”是Windows系统的IP地址。
- “nfs”是配置共享目录时创建的别名。
- “/mnt”是指定将远程目录挂载到本地的“/mnt”目录下。
- 从官网获取haneWIN NFS Server软件。
挂载SFS容量型文件系统(仅存量用户使用)
- 登录函数工作流控制台,在左侧的导航栏选择“函数 > 函数列表”。
- 单击函数的名称,进入函数详情页。
- 在“设置”页签下选择“权限”,配置函数访问SFS容量型文件系统的委托权限。
- “函数配置委托”参数选择前提条件中已创建的委托。
- 单击“保存”完成配置。
- 在“设置”页签下选择“磁盘挂载”。
- 单击“添加挂载”,在弹窗中配置SFS容量型文件系统的挂载信息。
表4 挂载SFS容量型文件系统参数说明 参数
说明
用户ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户ID。
对于SFS容量型文件系统,保持默认值-1。
用户组ID
函数访问文件系统所需要的身份标识,取值范围为-1或1~65534的整数且不包含1000和1002,默认值为-1,表示由系统自动分配用户组ID。
对于SFS容量型文件系统,保持默认值-1。
文件系统来源
选择要挂载的文件系统类型,此处选择“SFS”,即SFS容量型文件系统。
文件系统名称
选择要挂载的SFS容量型文件系统名称。
共享目录路径
文件系统共享的目录路径,路径须以“/”开头,例如:/a。
不配置表示函数能访问文件系统所有的目录路径,如果配置具体目录路径,则表示函数只能访问该目录路径。
函数访问路径
函数访问文件系统中文件时所使用的目录路径,路径须以“/”开头,且最多设置为两级,建议配置为/mnt或/home开头的二级目录。
不能使用系统已存在的目录,否则会报“failed to mount exist system path”错误。
例如,共享目录路径为“/a”,其下有文件“/a/b”和“/a/c/d”,函数访问路径为“/mnt/test”,则函数访问文件b和文件d的路径为“/mnt/test/b”和“/mnt/test/c/d”。
- 单击“确定”,完成挂载配置。
磁盘挂载应用示例
当函数挂载了文件系统后,对函数访问路径的读写就相当于对相关文件系统的读写。
如果把日志路径配置为函数访问路径的子目录,就可以轻松实现函数日志的持久化。
如下以函数挂载SFS Turbo为例,同时使用“统计web服务器访问情况”的函数模板,对运行在云上的服务器进行日志分析。
- 登录函数工作流控制台,在左侧导航栏选择“函数模板”。
- 在“函数模板”界面上方的搜索框中,输入“统计web服务器访问情况”进行搜索。
- 在搜索结果中,单击模板上的“使用模板”进入配置界面,并配置函数的参数信息。
表5 函数参数说明 参数
说明
函数模板
函数模板的名称,固定为“统计web服务器访问情况”。
区域
选择与创建的VPC、文件系统一致的区域,创建VPC和文件系统的详情请参见配置函数访问公网或VPC网络、创建文件系统。
项目
选择默认项目。
函数名称
函数的名称,自定义。
委托名称
选择拥有文件系统、VPC和APIG权限的委托,创建委托详情请参见配置函数的委托权限。
企业项目
仅开通企业项目后可看到该参数,开通方法请参见如何开通企业项目。
选择已创建的企业项目,将函数添加至企业项目中,默认选择“default”。
运行时
固定为“Python 3.9”。
创建触发器
创建函数时是否同步创建函数的触发器,勾选“API 网关服务(APIG)”。
触发器类型
默认为“API 网关服务(APIG)”。
API名称
API的名称,自定义。
分组
选择API所归属的API分组。
发布环境
选择API的发布环境,选择“RELEASE”。
安全认证
选择API的安全认证方式,选择“None”。
请求协议
选择API所使用的请求协议,保持默认“HTTPS”。
后端超时(毫秒)
配置API的后端超时时间,保持默认“5000”。
环境变量
参数“access_log_path”是日志文件的地址,此处配置为“/home/test/access_log.log”。
文件系统是绝对路径,使用文件系统时需在前面添加“/”;如不挂载文件系统,则无需添加“/”,则参数配置为“code/access_log.log”。
- 参数配置完成后,单击“创建函数”,完成“统计web服务器访问情况”函数的创建。
- 单击创建好的函数名称,进入函数详情页,选择“代码”页签,在“index.py”文件中添加如下代码,然后单击“部署代码”。
import shutil shutil.copyfile('/opt/function/code/access_log.log', '/home/test/access_log.log')
图2 添加代码 - 在页面最下方的“代码依赖包”处,单击“添加依赖包”,为函数添加公共依赖包“Jinja2-2.10”。
- 在“设置”页签下,选择“网络配置”,开启“函数访问VPC内资源”。
- 选择“磁盘挂载”,单击“添加挂载”,配置磁盘挂载信息。
表6 挂载参数说明 参数
说明
用户ID
函数访问文件系统所需要的身份标识。对于SFS Turbo文件系统,保持缺省值-1。
用户组ID
函数访问文件系统所需要的身份标识。对于SFS Turbo文件系统,保持缺省值-1。
文件系统来源
选择“SFS Turbo”,即SFS Turbo文件系统。
文件系统名称
选择已经创建好的SFS Turbo文件系统。
共享目录路径
文件系统共享的目录路径,路径须以“/”开头,例如:/a。
不配置表示函数能访问文件系统所有的目录路径,如果配置具体目录路径,则表示函数只能访问该目录路径。
函数访问路径
函数访问文件系统中文件时所使用的目录路径,路径须以“/”开头,且最多设置为两级,建议配置为/mnt或/home开头的二级目录。
不能使用系统已存在的目录,否则会报“failed to mount exist system path”错误。
例如,共享目录路径为“/a”,其下有文件“/a/b”和“/a/c/d”,函数访问路径为“/mnt/test”,则函数访问文件b和文件d的路径为“/mnt/test/b”和“/mnt/test/c/d”。
- 在“代码”页签下的“代码源”处,选择“配置测试事件”,在配置测试事件弹窗中选择“空白模板”,然后单击“创建”。
图4 配置测试事件
- 选择刚创建的测试事件,单击“测试”。
图5 测试结果
- 在“设置”页签下,选择“触发器”,复制APIG触发器的“调用URL”。
图6 复制URL
- 用浏览器打开上一步复制的URL,查看函数的调用结果。
图7 打开URL结果