文件存储NAS支持与函数计算无缝集成。通过在函数计算配置NAS文件系统,函数能够以类似于访问本地文件系统的方式操作NAS文件,实现文件持久化存储。该方式不仅可以消除本地磁盘空间的限制,还允许不同的函数实例共享文件数据。本文介绍如何为函数配置NAS。
前提条件
使用限制
函数计算在同一地域下的一个函数最多支持配置5个NAS挂载点。
NAS挂载点设置的函数运行环境中的本地目录不能冲突。
操作步骤
步骤一:配置NAS文件系统
登录函数计算控制台,在左侧导航栏,单击函数。
在顶部菜单栏,选择地域,然后在函数页面,单击目标函数。
在函数详情页面,选择配置页签,然后在左侧导航栏选择存储页签,在NAS 文件系统区域单击编辑,在编辑面板中配置以下参数,然后单击部署。
配置项
说明
示例
挂载 NAS 文件系统
是否启用NAS文件系统。取值说明如下。
启用:启用NAS文件系统。
禁用:不启用NAS文件系统。
启用
NAS 配置方式
NAS文件系统的配置方式。取值说明如下。
自动配置:系统自动为您配置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文件。
在函数详情页面,单击代码页签,在代码编辑器中编写代码,然后单击部署代码。
本文以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容量监控。
附录
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的适用场景及差异,请参见函数存储选型。