阿里云文件存储NAS(Apsara File Storage NAS)是一种分布式的网络文件存储系统,为ECS、HPC、Docker、BatchCompute等提供安全、无限容量、高性能、高可靠、简单易用的文件存储服务。

背景信息

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

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

前提条件

配置NAS

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

  1. 登录函数计算控制台
  2. 在左侧导航栏,单击服务及函数
  3. 在顶部菜单栏,选择地域。
  4. 服务列表页面,找到目标服务。在其操作列,单击配置
  5. 在编辑服务页面的存储配置区域,配置以下参数,然后单击保存
    存储配置
    • NAS 文件系统:是否启用NAS文件系统。取值说明如下:
      • 启用:启用NAS文件系统。
      • 禁用:不启用NAS文件系统。
    • 配置方式:NAS文件系统的配置方式。取值说明如下:
      • 自动配置:系统自动为您配置NAS文件系统。
        说明
        • 选择自动配置前,需先允许函数访问VPC内资源,并选择一个专有网络交换机安全组。如未选择,系统将会为您自动创建以上资源并绑定到当前服务。关于费用详情,请参见产品计费
        • 选择自动配置,系统将为您创建一个新的通用型NAS文件系统。如您再次选择自动配置,系统查询到前一次选择自动配置时创建的通用型NAS文件系统后将不会再重新创建。关于费用详情,请参见通用型NAS计费说明
      • 自定义配置:您需要手动配置如下参数才能配置NAS文件系统。
        • (可选)用户:在文本框中填写自定义的用户ID。如您不输入任何值,系统将随机选择一个用户。更多信息,请参见NAS用户和用户组
        • (可选)用户组:在文本框中填写自定义的用户组ID。如您不输入任何值,系统将随机选择一个用户组。更多信息,请参见NAS用户和用户组
        • 挂载点:在列表中选择已添加的通用型NAS或极速型NAS,同时填写远端 NAS 中的目录函数运行环境中的本地目录。更多信息,请参见地址配置
          • 远端 NAS 中的目录:通用型NAS必须以/开头,极速型NAS必须以/share开头。
          • 函数运行环境中的本地目录:必须为/home或者/mnt的子目录。
    说明
    • 配置挂载点之前,需先允许函数访问VPC内资源,并选择同一地域下的一个专有网络交换机。具体信息,请参见配置网络
    • 一个服务最多可以挂载5个NAS挂载点。

NAS用户和用户组

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

UserID和GroupID取值范围从-1到65534,不包括0(为了执行安全,函数计算暂时不提供root用户的方式),其中-1代表系统默认值。UserID和GroupID值配置可选,如果不填写UserID,系统会使用-1作为UserID值;如果不填写GroupID,系统会用UserID值作为GroupID值。

函数计算执行用户代码时,使用非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文件系统的挂载点是xxxx-nas.aliyuncs.com,您希望被访问的绝对目录是/workspace/document,对应完整的远端目录就是xxxx-nas.aliyuncs.com:/workspace/document

    您可以登录NAS控制台,在文件系统列表中,单击操作列的管理。然后单击左侧导航栏的挂载使用,在挂载点列表中获取挂载点。

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

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

更多信息

除了通过控制台,您还可以使用Serverless Devs为服务挂载NAS系统。更多操作,请参见YAML文件的使用指南非YAML文件的使用指南