全部产品
云市场

挂载NAS访问

更新时间:2019-09-02 10:12:17

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

阿里云函数计算现在可以与NAS无缝集成。这使您的函数可以像访问本地文件系统一样编写访问存储在其中一个NAS文件系统上的文件。 您所要做的是服务上配置NAS,其中包括NAS的区域、挂载点、分组等信息。 配置成功后,该服务下的函数就可以像访问本地文件系统一样访问指定的NAS文件系统。

使用NAS作为函数计算的挂载点的好处:

  1. 函数的执行空间不受大小限制
  2. 多个函数可以共用一个NAS,实现文件共享

注意:在配置NAS之前,您需要先开通NAS。

配置 NAS

NAS配置是在函数的服务上做配置,服务下的所有函数都可以访问配置的NAS文件系统上的文件。

需要配置VPC

您需要先开通VPC功能,才能配置NAS, 这是因为NAS目前只能在用户私有的VPC环境才能添加挂载点,因此用户必须确保配置正确的VPC才能访问指定的NAS文件系统。

NAS配置文件

NAS详细配置如下

  1. "nasMountConfig": {
  2. "ServerAddr" : string,
  3. "MountDir" : string
  4. }
  5. "nasConfig" : {
  6. "UserId" : int,
  7. "GroupId" : int,
  8. "MountPoints" : [nasMountConfig]
  9. }
文件系统的 UserId and GroupId

在函数计算里NAS配置是在服务上做配置,服务下的所有函数可以共用一个NAS,在配置函数的NAS挂载时,首先需要配置UserID(用户ID)和GroupID(用户组ID),这两个值等同于文件系统中的用户和组的概念,您可以分配不同用户在同一个组也可以分配不同的用户使用不同的组,请根据需求设置文件的拥有者和相应的组权限,确保文件读写权限一致,设置之前,确保您的NAS配置相应的权限,详见NAS的权限设置

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

建议您将 userId 和 groupId 设置为具体的值(1-65534的任意数字),这样该服务下不同函数都可以共享这些文件资源。

Tips:上传至 NAS 的文件权限与本地文件权限相同,因此您需要为文件设置 group 用户的可读/写权限。

地址配置

在NAS配置的第二部分增加挂载点配置(nasMountConfig)。一个服务最多可以挂载 5 个NAS挂载点。每个挂载点配置(nasMountConfig)由远程目录(ServerAddr)和本地目录(MountDir)组成。

远程目录(ServerAddr)

远程目录描述了服务需要访问的NAS文件系统的远程目录,由挂载点(MountPoint)和绝对目录(absolute directory)两部分组成。挂载点可以通过NAS控制台来添加(如下面的图示)mount point将挂载点和绝对目录拼接就可以得到远程目录。例如,如果NAS文件系统的挂载点是“xxxx-nas.aliyuncs.com”, 您希望被访问的绝对目录是 “/workspace/document”,对应完整的远程目录就是 xxxx-nas.aliyuncs.com:/workspace/document

本地目录(MountDir)

本地目录是指本地文件系统的挂载点,请不要使用通用的Linux&&Unix系统目录,例如“bin”、“opt”、“var”、“dev”等挂载NAS。我们允许您使用“mnt”、“home”等非系统目录挂载NAS。

本地目录与远程目录结合,形成了从NAS文件系统中的某个目录到本地文件系统中的一个目录的映射。按照前面的示例,如果在配置中中将“MountDir”设置为/mnt/fc,则该服务下可以使用本地diretory/mnt/fc作为NAS文件系统中的远程/workspace/document目录。

使用控制台配置NAS(推荐)

您可以在控制台上创建/更新服务的时候配置NAS挂载 。仅当服务配置了VPC时才启用NAS配置的选项。如果未填写用户ID和用户组ID,系统默认用户组ID为-1。控制台的下拉框里包含了所有在VPC中可以被访问的NAS挂载点。您可以从中选择,再填写远程目录来组成ServerAddr。缺省的远程目录是根目录。示例如下:

NAS挂载点:XXXXXX.cn-hangzhou.nas.aliyuncs.com

远程目录:workspace

本地目录:/mnt/

完整的映射地址:XXXXXX.cn-hangzhou.nas.aliyuncs.com:/workspace -> /mnt/

create service

使用 Fun 配置 NAS(推荐)

使用 fun deploy 时,可以直接通过 NasConfig 属性,直接在 template.yml 中配置 NAS 功能。

一个包含了 NasConfig 的简单示例如下:

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. nasDemo:
  5. Type: 'Aliyun::Serverless::Service'
  6. Properties:
  7. Description: 'fc nas test'
  8. Policies:
  9. - AliyunECSNetworkInterfaceManagementAccess
  10. VpcConfig:
  11. VpcId: 'vpc-bp12hm92gdpcjtai7ua82'
  12. VSwitchIds: [ 'vsw-bp1gitru7oicyyb4uiylj' ]
  13. SecurityGroupId: 'sg-bp1243pi65bw4cjj4bks'
  14. NasConfig:
  15. UserId: -1
  16. GroupId: -1
  17. MountPoints:
  18. - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
  19. MountDir: '/mnt/test'

上面示例的含义是:声明一个名为 FunDemo 的 服务,并为这个服务配置了 VPC 以及 NAS 功能。

更多的配置规则 请参考

更多更完整的示例 请参考

Fun 的更多教程 请参考

如何使用SDK配置NAS

您可以通过调用SDK的方式来创建和更新NAS的配置。 下面是用Python2.7实现代码段,可以使用下面代码来创建挂载NAS的服务。

  1. vpcConfig = {
  2. 'vpcId': 'my-vpcId',
  3. 'vSwitchIds': [id],
  4. 'securityGroupId': 'my-securityGroupId'
  5. }
  6. nasConfig = {
  7. "userId": my-uid,
  8. "groupId": my-gid,
  9. "mountPoints": [
  10. {
  11. "serverAddr": 'xxx-nas.com:/fc',
  12. "mountDir": '/mount/dir'
  13. }
  14. ]
  15. }
  16. service = client.create_service(name, role=self.vpcRole, vpcConfig=vpcConfig, nasConfig=nasConfig)