文档

函数计算挂载文件系统

更新时间:

文件存储NAS支持与函数计算无缝集成。通过在函数计算配置NAS文件系统,函数能够以类似于访问本地文件系统的方式操作NAS文件,实现文件持久化存储。该方式不仅可以消除本地磁盘空间的限制,还允许不同的函数实例共享文件数据。本文介绍如何为函数配置NAS。

前提条件

使用限制

  • 函数计算在同一地域下的一个函数最多支持配置5个NAS挂载点。

  • NAS挂载点设置的函数运行环境中的本地目录不能冲突。

操作步骤

步骤一:配置NAS文件系统

  1. 登录函数计算控制台,在左侧导航栏,单击函数

  2. 在顶部菜单栏,选择地域,然后在函数页面,单击目标函数。

  3. 在函数详情页面,选择配置页签,然后在左侧导航栏选择存储页签,在NAS 文件系统区域单击编辑,在编辑面板中配置以下参数,然后单击确定

    配置项

    说明

    示例

    挂载 NAS 文件系统

    是否启用NAS文件系统。取值说明如下。

    • 启用:启用NAS文件系统。

    • 禁用:不启用NAS文件系统。

    启用

    NAS 配置方式

    NAS文件系统的配置方式。取值说明如下。

    • 自动配置:系统自动为您配置NAS文件系统。

    • 自定义配置:您需要手动配置NAS相关参数才能配置NAS文件系统。

    说明
    • 选择自动配置前,需先允许函数访问VPC内资源,并选择一个专有网络交换机安全组。如未选择,系统将会为您自动创建以上资源并绑定到当前服务。关于费用详情,请参见VPC产品计费

    • 选择自动配置,系统将为您创建一个新的通用型NAS文件系统。如您再次选择自动配置,系统查询到前一次选择自动配置时创建的通用型NAS文件系统后,将不会再重新创建。关于费用详情,请参见通用型NAS计费

    自定义配置

    NAS文件系统相关配置:NAS 配置方式选择自定义配置时,需要填写的配置信息。

    NAS 文件系统

    选择已创建的NAS文件系统。

    如需创建新的NAS文件系统,单击下方的创建新的 NAS 文件系统,跳转到文件存储控制台手动创建。仅支持NFS协议类型的NAS文件系统,不支持SMB协议类型。

    01d394****

    用户(可选)

    访问NAS文件时所用的用户,需填写自定义的用户ID。如您不输入任何值,系统将使用root用户ID,即UID=0。更多信息,请参见NAS用户和用户组

    0

    用户组(可选)

    访问NAS文件时所用的用户组,需填写自定义的用户组ID。如您不输入任何值,系统将使用root用户组ID,即GID=0。更多信息,请参见NAS用户和用户组

    0

    NAS 挂载点:选择NAS挂载相关配置和设置相关目录。关于目录设置的更多信息,请参见地址配置

    挂载点

    选择与当前函数配置的专有网络和交换机匹配的NAS挂载点。

    说明
    • 配置NAS 挂载点之前,需先允许函数访问VPC内资源,并选择同一地域下的一个专有网络交换机。具体操作,请参见配置网络

    01d394****-e****.cn-hangzhou.nas.aliyuncs.com

    数据传输方式

    选择普通传输方式或加密传输方式。仅通用型NAS支持加密传输,加密传输会对数据传输路径进行加密,但是存在一定的资源消耗。更多信息,请参见NFS文件系统传输加密

    普通传输

    远端目录

    • 通用型NAS的该目录必须以/开头。

    • 极速型NAS的该目录必须以/share开头。

    若您配置的目录在远端NAS中不存在,函数计算将会为您自动创建该目录。目录所有者为上述配置的用户和用户组,权限等级为777

    /

    函数本地目录

    建议使用/home/mnt/tmp/data的子目录。

    说明

    不能使用通用的Linux和Unix系统目录及其子目录,例如/bin/opt/var/dev等,以免挂载失败。

    /mnt/nas

步骤二:访问NAS文件

完成NAS文件系统的配置后,您可以通过以下步骤访问NAS文件,即可以用访问本地文件的方式访问NAS文件。

  1. 在函数详情页面,单击代码页签,在代码编辑器中编写代码,然后单击部署代码

    本文以Python函数代码为例,示例代码会完成将内容写入NAS文件和读取NAS文件内容。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import random
    import subprocess
    import string
    import os
    
    
    def handler(event, context):
        # report file system disk space usage and check NAS mount target
        out, err=subprocess.Popen(['df', '-h'], stdout=subprocess.PIPE).communicate()
        print('disk: ' + str(out))
        lines = [ l.decode() for l in out.splitlines() if str(l).find(':') != -1 ]
        nas_dirs = [ x.split()[-1] for x in lines ]
        print('uid : ' + str(os.geteuid()))
        print('gid : ' + str(os.getgid()))
    
        for nas_dir in nas_dirs:
            sub_dir = randomString(16)
            file_name = randomString(6)+'.txt'
            new_dir = nas_dir + '/' + sub_dir + '/'
            print('test file: ' + new_dir + file_name)
            # 写入NAS文件
            content = "NAS here I come"
            os.mkdir(new_dir)
            fw = open(new_dir + file_name, "w+")
            fw.write(content)
            fw.close()
            # Showing the folder tree in NAS
            for home, dirs, files in os.walk(nas_dir):
                level = home.replace(nas_dir, '').count(os.sep)
                indent = ' ' * 2 * (level)
                print('{}{}/'.format(indent, os.path.basename(home)))
                subindent = ' ' * 2 * (level + 1)
                for f in files:
                    print('{}{}'.format(subindent, f))
            # 读取NAS文件
            f = open(new_dir + file_name, "r")
            print(f.readline())
            f.close()
        
        return 'success'
    
    
    def randomString(n):
        return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(n))
      
  2. 代码部署成功后,单击代码页签的测试函数

    执行完成后,您可以在代码页签的下方查看执行结果。在日志输出页签下可以看到函数执行过程中的日志信息。

步骤三:验证NAS挂载是否成功

执行完步骤二,完成文件的写入和读取,您可以登录实例查看函数本地目录下的文件情况,同时可以在NAS控制台查看NAS的使用量验证是否成功。

  • 查看配置的函数本地目录下的文件,确认是否与函数代码操作的文件信息一致。

    1. 您可以在函数详情页面,单击实例查看实例状态为运行中的列表,选择一个实例,单击该实例操作列的登录实例。如果没有运行中的实例,可以在代码页签重新执行一次。

      image

    2. 登录实例成功后,您就可以通过命令查看配置的函数本地目录下的文件信息。示例如下:

      image

  • 查看NAS的使用量与文件操作是否一致,确认NAS是否挂载成功。具体请参见查看NAS容量监控

    image

附录

NAS用户和用户组

UserID(用户ID)和GroupID(用户组ID)取值范围为[0, 65534],您需要根据需求设置文件的拥有者和相应的组权限,确保文件读写权限一致。

UserID和GroupID值配置可选,如果不填写,默认值均为0,即分别表示root用户ID和root用户组ID。

函数计算使用非root权限执行用户代码时,如果需要挂载远端NAS的子目录,需确保函数实例中执行用户具有子目录的读写权限。

  • 使用NAS实例挂载远端NAS的根目录。具体操作,请参见操作步骤

    挂载成功后使用以下示例创建子目录,例如fc-1。然后将NAS挂载点中的远端目录由根目录修改为创建的子目录(由/修改为/fc-1),实现远端挂载子目录。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import os
    
    
    def handler(event, context):
        print('uid : ' + str(os.geteuid()))
        print('gid : ' + str(os.getgid()))
    
        # 请手动更改为 NAS 挂载的本地目录
        local_nas_dir = "/mnt/nas"
        # 请手动更改为目标子目录名
        target_sub_dir = "fc-1"
    
        # 在 FC 中利用当前实例执行用户权限创建目标目录
        new_dir = local_nas_dir + '/' + target_sub_dir + '/'
        print('new_dir : ' + str(new_dir))
    
        os.mkdir(new_dir)
        return 'success'
      
  • 要挂载的子目录在远端NAS中不存在,在配置远端目录后,函数计算会自动为您创建该目录,该目录所有者即为配置的用户和用户组,权限为777。

说明
  • 如果您希望不同函数可以共享NAS文件资源,您需要在配置函数的NAS文件系统时UserId和GroupId设置相同的值。

  • 上传至NAS的文件权限与本地文件权限完全相同。

地址配置

每个NAS 挂载点地址由远端目录函数本地目录组成。远端目录与本地目录结合,实现从NAS文件系统中的某个目录到本地文件系统中的某个目录的映射。

  • 远端目录

    远端NAS中的目录是指服务需要访问的NAS文件系统的目录,由挂载点和绝对目录两部分组成。挂载点可以通过NAS控制台来添加。将挂载点和绝对目录拼接得到远端目录。例如,如果NAS文件系统的挂载点是xxxx-nas.aliyuncs.com,您希望被访问的绝对目录是/workspace/document,对应完整的远端目录就是xxxx-nas.aliyuncs.com:/workspace/document

    您可以登录NAS控制台,在文件系统列表中,单击目标文件系统,然后单击挂载使用,以获取挂载点。

  • 函数本地目录

    函数运行环境中的本地目录是指本地文件系统的挂载点。不能使用通用的Linux和Unix系统目录及其子目录挂载NAS,例如/bin/opt/var/dev等,函数计算允许您使用非系统目录/mnt/home/data等挂载NAS。

相关文档

  • 如果您希望了解函数计算使用NAS的适用场景及差异,请参见函数存储选型

  • 您可以通过函数计算Serverless应用中心的fc-nas-filemgr应用,快速搭建可视化NAS浏览器。具体操作,请参见快速入门(FC)

  • 本页导读 (1)
文档反馈