文件存储NAS是一种分布式的网络文件存储系统,为ECS、HPC、Docker、BatchCompute等提供安全、高性能、高可靠、简单易用的文件存储服务。本文介绍如何通过函数计算控制台配置NAS文件系统。

背景信息

阿里云函数计算支持与文件存储NAS无缝集成。您可以在函数计算的服务上配置NAS,包括NAS的地域、挂载点、分组等信息。配置成功后,该服务下的函数就可以像访问本地文件系统一样访问指定的NAS文件系统。

使用NAS作为函数计算的挂载点的优势如下。
  • 可以将临时文件存储到NAS中,临时文件大小不受实例本地磁盘空间限制。
  • 多个函数可以共用一个NAS,实现文件共享。

前提条件

配置NAS

函数计算的NAS配置为服务级别,为一个服务配置NAS挂载点后,此服务下的所有函数都可以访问指定NAS文件系统上的文件。

  1. 登录函数计算控制台,在左侧导航栏,单击服务及函数
  2. 在顶部菜单栏,选择地域,然后在服务列表页面,单击目标服务操作列的配置
  3. 在编辑服务页面的存储配置区域,配置以下参数,然后单击保存
    存储配置
    • 挂载 NAS 文件系统:是否启用NAS文件系统。取值说明如下。
      • 启用:启用NAS文件系统。
      • 禁用:不启用NAS文件系统。
    • NAS 配置方式:NAS文件系统的配置方式。取值说明如下。
      • 自动配置:系统自动为您配置NAS文件系统。
        说明
        • 选择自动配置前,需先允许函数访问VPC内资源,并选择一个专有网络交换机安全组。如未选择,系统将会为您自动创建以上资源并绑定到当前服务。关于费用详情,请参见VPC产品计费
        • 选择自动配置,系统将为您创建一个新的通用型NAS文件系统。如您再次选择自动配置,系统查询到前一次选择自动配置时创建的通用型NAS文件系统后,将不会再重新创建。关于费用详情,请参见通用型NAS计费
      • 自定义配置:您需要手动配置如下参数才能配置NAS文件系统。
        • NAS 文件系统:选择已创建的NAS文件系统。如需创建新的NAS文件系统,单击下方的创建新的 NAS 文件系统,跳转到文件存储控制台手动创建。仅支持NFS协议类型的NAS文件系统,不支持SMB协议类型。
        • (可选)用户:在文本框中填写自定义的用户ID。如您不输入任何值,系统将使用root用户ID,即UID=0。更多信息,请参见NAS用户和用户组
        • (可选)用户组:在文本框中填写自定义的用户组ID。如您不输入任何值,系统将使用root用户组ID,即GID=0。更多信息,请参见NAS用户和用户组
        • NAS 挂载点:选择NAS挂载相关配置和设置相关目录。关于目录设置的更多信息,请参见地址配置
          • 挂载点:选择与当前服务配置的专有网络和交换机匹配的NAS挂载点。
          • 数据传输方式:选择普通传输方式或加密传输方式。仅通用型NAS支持加密传输,加密传输会对数据传输路径进行加密,但是存在一定的资源消耗。更多信息,请参见NFS文件系统传输加密
          • 远端 NAS 中的目录:通用型NAS的该目录必须以/开头,极速型NAS的该目录必须以/share开头。若您配置的目录在远端NAS中不存在,函数计算将会为您自动创建该目录。目录所有者为上述配置的用户和用户组,权限等级为777
          • 函数运行环境中的本地目录:必须为/home/mnt/data的子目录。
    说明
    • 配置NAS 挂载点之前,需先允许函数访问VPC内资源,并选择同一地域下的一个专有网络交换机。具体操作,请参见配置网络
    • 一个服务最多可以挂载5个NAS挂载点。

NAS用户和用户组

在配置函数的NAS挂载时,首先需要配置UserID(用户ID)和GroupID(用户组ID),这两个值等同于文件系统中的用户和组的概念。请根据需求设置文件的拥有者和相应的组权限,确保文件读写权限一致。

UserID和GroupID取值范围为[0, 65534]。UserID和GroupID值配置可选,如果不填写UserID,系统会使用root用户ID,即0UserID值为0;如果不填写GroupID,系统会使用root用户组ID,即GroupID值为0

函数计算使用非root权限执行用户代码时,如果需要挂载远端NAS的子目录,需确保函数实例中执行用户具有子目录的读写权限。建议您选择以下两种方法中任意一种进行操作。
  • 使用NAS实例挂载远端NAS的根目录。具体操作,请参见配置NAS

    挂载成功后使用以下示例创建子目录,例如fc-1。然后将NAS挂载点中的远端 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 = "/home/app"
      # 请手动更改为目标子目录名
      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'
    挂载子目录
  • 使用云服务器ECS挂载NAS。具体操作,请参见使用ECS挂载NAS文件系统

    挂载成功后创建子目录,然后执行chmod 777为子目录授权。

说明
  • 系统默认的用户和用户组无文件的读写权限,因此建议您将UserId和GroupId设置为具体的值,即1~65534的任意数字。此时,该服务下不同函数可以共享这些文件资源。
  • 上传至NAS的文件权限与本地文件权限完全相同。

地址配置

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

  • 远端 NAS 中的目录

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

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

  • 函数运行环境中的本地目录

    函数运行环境中的本地目录是指本地文件系统的挂载点。不能使用通用的Linux和Unix系统目录,例如binoptvardev等挂载NAS,函数计算允许您使用非系统目录mnthomedata挂载NAS。

更多信息

您还可以使用Serverless Devs为服务挂载NAS系统。具体操作,请参见使用s nas相关命令挂载硬盘