文件存储NAS支持与函数计算无缝集成。通过在函数计算配置NAS文件系统,函数能够以类似于访问本地文件系统的方式操作NAS文件,实现文件持久化存储。该方式不仅可以消除本地磁盘空间的限制,还允许不同的函数实例共享文件数据。本文介绍如何为函数配置NAS。
前提条件
使用限制
- 函数计算在同一地域下的一个函数最多支持配置5个NAS挂载点。 
- NAS挂载点设置的函数运行环境中的本地目录不能冲突。 
配置NAS文件系统
- 登录函数计算控制台,在左侧导航栏,单击函数。 
- 在顶部菜单栏,选择地域,然后在函数页面,单击目标函数。 
- 在函数详情页面,选择配置页签,单击高级配置右侧的编辑,在高级配置面板,找到存储选项,开启挂载NAS文件系统开关,按照以下操作配置完成后单击部署。 - 您可以选择自动配置或自定义配置两种方式来配置NAS文件系统。 - 自动配置- 系统自动为您创建一个名称为 - Alibaba-Fc-V3-Component-Generated的通用型NAS文件系统以及同名的专有网络、交换机和安全组。- 当您再次选择自动配置时,系统查询到当前地域下已存在该NAS文件系统,则会复用该文件系统和相关VPC配置,不会重复创建。关于费用详情,请参见VPC产品计费和通用型NAS计费。 - 自定义配置- 您需要手动选择NAS文件系统,设置用户、用户组以及NAS挂载点等NAS相关参数才能完成配置NAS文件系统。 - 重点配置项介绍如下: - 配置项 - 说明 - 示例 - NAS 文件系统 - 选择已创建的NAS文件系统。 - 如需创建新的NAS文件系统,单击下方的创建新的 NAS 文件系统,跳转到文件存储控制台手动创建。 重要- 仅支持NFS协议类型的NAS文件系统,不支持SMB协议类型。 - 01d394**** - 用户、用户组 - 需填写自定义的用户ID和用户组ID。如您不输入任何值,系统将使用root用户,即 - UID=0和- GID=0。更多信息,请参见NAS用户和用户组。- 1 - 远端目录 - 通用型NAS的该目录必须以/开头。 
- 极速型NAS的该目录必须以/share开头。 
 - 若您配置的目录在远端NAS中不存在,函数计算将会为您自动创建该目录。目录所有者为上述配置的用户和用户组,权限等级为 - 777。- 更多信息,请参见远端目录。 - / - 函数本地目录 - 建议使用/home、/mnt、/tmp或/data的子目录。 说明- 不能使用通用的Linux和Unix系统目录及其子目录,例如/bin、/opt、/var或/dev等,以免挂载失败。 - 更多信息,请参见函数本地目录。 - /mnt/nas 说明- 如果您希望不同函数可以共享NAS文件资源,您需要在为这些函数配置NAS文件系统时,使用同一个用户和用户组。 
- 上传至NAS的文件权限与本地文件权限完全相同。 
 
验证NAS是否挂载成功
准备访问NAS的函数代码
完成NAS文件系统的配置后,您可以在您的函数代码中,通过挂载时指定的路径来访问NAS文件系统。
- 在函数详情页面,单击代码页签,在代码编辑器中编写代码,然后单击部署代码。 - 本文以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))
验证结果
- 代码部署成功后,单击代码页签的测试函数。 - 执行完成后,您可以在代码页签的下方查看执行结果。在日志输出页签下可以看到函数已经成功写入NAS文件并读取NAS文件。  
- (可选)完成文件的写入和读取之后,您可以登录实例查看函数本地目录下的文件情况,确认查询到的NAS文件与上一步函数执行成功后日志输出内容是否一致。 - 您可以在函数详情页面,单击实例页签,单击目标实例操作列的登录实例。 - 如果当前没有运行中的实例,可以在代码页签单击测试函数重新执行一次函数,创建实例。 
- 成功登录实例后,您就可以通过命令查看配置的函数本地目录下的文件信息。示例如下:  
 
- (可选)您还可以使用NAS可视化浏览器应用,直接通过浏览器管理已挂载NAS文件系统中的文件。具体操作,请参见使用函数计算快速搭建可视化NAS浏览器应用。 - 针对华东1(杭州)和华东2(上海)地域,您无需搭建上述函数计算的可视化NAS浏览器应用,直接在NAS控制台,找到目标文件系统,在操作列,选择,即可进行可视化管理文件。  
相关概念
NAS用户和用户组
UserID(用户ID)和GroupID(用户组ID)取值范围为[0, 65534],如果不填写,默认值均为0,即分别表示root用户ID和root用户组ID。您需要根据需求设置文件的拥有者和相应的组权限,确保文件读写权限一致。例如,如果您希望不同函数可以共享NAS文件资源,您需要在为这些函数配置NAS文件系统时,使用同一个用户和用户组。
远端目录和函数本地目录
每个NAS挂载点的地址由远端目录和函数本地目录组成。挂载NAS的过程本质上是创建了一个从函数计算实例的本地目录到NAS远端目录的映射关系。
- 远端目录 - 远端NAS中的目录是指位于NAS文件系统中的目录,由挂载点和绝对目录两部分组成。挂载点可以通过NAS控制台来添加。将挂载点和绝对目录拼接得到远端目录。例如,NAS文件系统的挂载点是xxxx-nas.aliyuncs.com,您希望被访问的绝对目录是/workspace/document,对应完整的远端目录就是xxxx-nas.aliyuncs.com:/workspace/document。 - 您可以登录NAS控制台,在文件系统列表中,单击目标文件系统,然后单击挂载使用,以获取挂载点。 
- 函数本地目录 - 函数运行环境中的本地目录是指本地文件系统的挂载点。建议使用/home、/mnt、/tmp或/data的子目录。不能使用通用的Linux和Unix系统目录及其子目录挂载NAS,例如/bin、/opt、/var或/dev等。 
 > 浏览器
 > 浏览器