更新时间:2026-01-09 GMT+08:00

挂载文件系统

场景介绍

文件系统挂载功能为函数提供了按需扩展的文件存储,可为多个函数、多个实例提供共享访问,函数可以像访问本地文件系统一样对这些共享文件进行读写等操作。您只需要在函数上进行相关配置,如对应的文件系统,函数访问路径等信息。

使用磁盘挂载功能需要开放如下端口:

  1. 111、445、2049、2051、2052、20048。
  2. 对于Ubuntu系统还需再开放3个端口,获取方式请在任意目录下执行如下命令。
    rpcinfo -p|grep mountd|grep tcp

具体请参见SFS服务《常见问题》中的“弹性文件服务会占用用户的哪些资源”章节。

目前FunctionGraph函数支持以下文件系统配置。

  • SFS文件系统

    弹性文件服务(Scalable File Service,SFS)提供按需扩展的高性能文件存储(NAS),可为云上多个弹性云服务器(Elastic Cloud Server,ECS),容器(CCE&CCI),裸金属服务器(BMS)提供共享访问。SFS为用户提供一个完全托管的共享文件存储,能够弹性伸缩至PB规模,具备高可用性和持久性,为海量数据、高带宽型应用提供有力支持。适用于多种应用场景,包括HPC、媒体处理、文件共享、内容管理和Web服务等。

  • SFS Turbo文件系统

    SFS Turbo为用户提供一个完全托管的共享文件存储,能够弹性伸缩至320TB规模,具备高可用性和持久性,为海量的小文件、低延迟高IOPS型应用提供有力支持。适用于多种应用场景,包括高性能网站、日志存储、压缩解压、DevOps、企业办公、容器应用等。

  • ECS共享目录

    ECS共享目录是通过nfs服务,把ECS上的指定目录设置为共享文件系统(详情请参考ECS创建nfs共享目录),函数(和ECS相同的VPC配置)可以挂载对应目录进行读写等操作,实现计算资源的动态扩展。此类型适合业务不太频繁的场景。

使用文件系统挂载功能具有以下优势:

  • 函数执行空间不仅是之前/tmp的512M,可以极大扩展存储空间。
  • 多个函数之间可以共享访问已经配置好的文件系统。
  • ECS计算资源动态扩展,利用ECS已有的存储能力实现更大的计算能力。

    您可以在/tmp路径下写临时文件,最大不能超过10,240MB。

创建委托

为函数添加文件系统配置需要先给函数设置相关服务的委托。

创建委托时,委托类型选择云服务,云服务选择FunctionGraph,因为委托数目有限,而且目前界面上不支持修改,建议可以创建一个权限较大的委托(Tenant Administrator),可以支持在函数中操作当前区域内的所有资源,请参考创建委托

添加sfs文件系统

设置委托

进入需要进行挂载配置的函数详情页,在配置页选择已有的委托(委托需要拥有当前Region的sfs administrator或者是tenant administrator的权限)。

如果没有委托,需要创建新委托,创建完后回到此界面选择。

添加挂载配置

在函数详情页单击“设置 > 磁盘挂载”页签,单击“添加挂载”,如果当前没有添加过文件系统配置,那么需要设置一下用户ID和组ID。

用户ID和用户组ID分别对应Linux系统中的uid和gid,作为函数在运行中访问文件系统的身份。

用户ID:支持输入-1或1~65534的整数且不包含1000和1002,默认值-1,表示FunctionGraph后台自动分配身份标识。

用户组ID:支持输入-1或1~65534的整数且不包含1000和1002,默认值-1,表示FunctionGraph后台自动分配身份标识。

如果已经在云上的服务器挂载过sfs,有一个目录的属主是test-user,那么就可以用id test-user命令查询对应的uid和gid。

接下来要选择需要挂载的sfs文件系统,然后设置在函数中访问的目录。

其中函数访问路径最多设置为两级,/mnt和/home都是已存在的路径,建议您挂载在/mnt或/home开头的路径下,如果直接挂载/mnt或/home一级目录,会报“failed to mount exist system path”。

添加sfs turbo文件系统

设置委托

挂载sfs turbo文件系统需要给函数设置委托(至少拥有sfs administrator以及VPC administrator权限)。如果没有对应权限的委托,需要新创建,详情请参见创建委托

设置VPC

sfs turbo涉及VPC内部网络访问,添加sfs turbo文件系统前需要给函数配置sfs turbo对应的VPC。

  1. 在弹性文件服务中,获取需要挂载的文件系统的VPC和子网信息,具体操作请参考SFS服务的“管理文件系统”章节。
  2. 参见函数配置VPC,开启VPC访问,输入1中获取的VPC和子网。

添加挂载-SFS Turbo

添加sfs turbo和添加sfs过程相似,只要选好需要挂载的文件系统,设置好函数访问路径即可。

添加ECS共享目录

添加委托

挂载ECS共享目录需要给函数设置委托(至少拥有tenant guest以及VPC administrator权限),如果没有对应权限的委托,需要新创建,详情请参见创建委托

配置VPC

添加ECS共享目录前,也需要给函数配置ECS对应的VPC,可以到ECS详情页的“基本信息”页签中查看“虚拟私有云”。单击虚拟私有云名称,进入虚拟私有云的详情页,查看子网。

获取到这两个信息后,可以在函数配置中配置对应的VPC。

添加挂载-ECS

需要在界面上输入ECS上的共享目录路径信息和函数访问路径。

后续操作

当函数挂载了文件系统配置后,对函数访问路径的读写就相当于对相关文件系统的读写。

如果把日志路径配置为函数访问路径的子目录,就可以轻松实现函数日志的持久化。

如下以函数挂载SFS Turbo为例,同时使用“统计web服务器访问情况”的函数模板,对运行在云上的服务器进行日志分析。

  1. 登录函数工作流控制台,在左侧导航栏选择“函数模板”。
  2. 在“函数模板”界面右上角搜索框中,输入“统计web服务器访问情况”进行搜索。
  3. 在搜索结果中,单击“使用模板”进入配置界面,参数配置如下:

    • 区域:选择与创建的VPC、文件系统一致的区域,创建VPC和文件系统的详情请参见函数配置VPC、SFS服务的“创建文件系统”章节。
    • 项目:默认。
    • 函数名称:自定义。
    • 委托名称:选择拥有文件系统、VPC和APIG权限的委托,创建委托详情请参见创建委托
    • 企业项目:根据实际业务选择。
    • 环境变量:参数“access_log_path”是日志文件的地址,此处配置为“/home/test/access_log.log”。

      文件系统是绝对路径,使用文件系统时需在前面添加“/”;如不挂载文件系统,则无需添加“/”,则参数配置为“code/access_log.log”。

    • 触发器类型:默认为“API 网关服务(APIG)”,APIG配置详情请参见使用APIG(专享版)触发器
    • API名称:自定义。
    • 分组:根据实际业务选择。
    • 发布环境:选择“RELEASE”。
    • 安全认证:选择“None”。
    • 请求协议、后端超时(毫秒):默认。

  4. 参数配置完成后,单击“创建函数”,完成“统计web服务器访问情况”的函数创建。
  5. 进入创建好的函数详情页中,选择“代码”页签,在“index.py”文件中添加如下代码,然后单击“部署”。

    import shutil
    shutil.copyfile('/opt/function/code/access_log.log', '/home/test/access_log.log')

    同时,添加公共依赖包“Jinja2-2.10”,添加依赖包详情请参见如何为函数添加依赖包

    如果不挂载文件系统,则无需增加以上代码。

  6. 在函数详情页中,选择“设置 > 网络配置”,开启“函数访问VPC内资源”。“VPC”和“子网”选择已创建好的VPC和子网,单击“保存”。
  7. 选择“磁盘挂载”,单击“添加挂载”,然后选择“SFS Turbo”。

    • 文件系统名称:选择已经创建好的SFS Turbo文件系统。
    • 函数访问路径:配置为“/home/test”。
    • 共享目录路径:文件系统共享的路径,默认不填写表示函数能访问到文件系统所有目录路径。如果配置具体目录路径,则表示函数只能访问该目录路径。

  8. 选择“代码”,选择“配置测试事件”,然后创建空白模板,最后单击“创建”。
  9. 选择刚才创建好的测试事件,单击“测试”。

    图1 测试结果

  10. 选择“设置 > 触发器”,复制APIG的URL,然后用浏览器打开该URL。

    图2 打开URL结果