本文介绍如何配置NAS及其依赖资源,以及在配置成功后如何通过fun nas的相关命令管理NAS文件。

背景信息

  • 通过NasConfig: Auto一键配置NAS及其依赖的VPC资源

    在使用函数计算过程中,可以通过NAS来存放一些体积较大且不易变动的资源,配置NAS及其资源后,可以让指定服务下的函数访问NAS文件系统时如同访问本地文件系统一样,这使得即使在依赖比较大的场景下,依旧可以借助函数计算来快速开发一个Serverless应用。

    但是NAS在帮助函数计算解决大依赖问题的同时,由于其自身的配置比较复杂,也增加了函数计算的使用难度。为了简化NAS的使用体验,Funcraft工具添加了一个新的配置项NasConfig: Auto,通过该属性,您可以一键配置NAS及其依赖的VPC资源。

  • 通过fun nas管理NAS文件以及上传本地NAS文件
    即使配置好了NAS服务,仍需面对上传本地资源到NAS文件系统中等问题,上传资源到NAS文件系统中通常有以下几种方案:
    • 购买一台ECS,然后挂载NAS,通过FTP或者网盘等实现将文件上传到NAS。
    • 使用在线迁移服务,将OSS资源迁移到NAS。更多信息,请参见如何将阿里云OSS的资源迁移至阿里云NAS
    • 借助函数计算,开发一个Serverless的NAS文件管理应用。更多信息,请参见开发NAS文件管理应用
    • 通过fun nas命令管理NAS文件及上传本地NAS文件。
      fun nas本身实现思路是上述借助函数计算,开发一个Serverless的NAS文件管理应用的升级版,解决了以下问题,例如:
      • 需要手动部署一套服务。
      • 不支持目录上传。
      • 不支持大于6 MB的文件上传。

fun nas功能介绍

执行以下命令获取fun nas的功能介绍。
fun nas -h
预期输出:
Usage: fun nas [options] [command]

Operate your remote NAS file system locally.

Options:
  -h, --help      display help for command

Commands:
  info            Print nas config information, such as local temp directory of NAS.
  init            For each service with NAS config, create local NAS folder and deploy fun nas server service.
  sync            Synchronize the local NAS directory with the remote NAS file system.
  ls              List contents of remote NAS directory
  rm              Remove remote NAS file.
  cp              copy local file/folder to remote NAS
  help [command]  display help for command

配置NAS

本文主要介绍两种方式配置NAS,成功配置后您的函数可以访问指定的NAS资源,建议您使用方式二配置NAS。

方式一

使用控制台配置NAS及其依赖资源。

  1. 登录VPC控制台,创建专有网络、交换机及安全组,更多信息,请参见专有网络和交换机概述
  2. 登录NAS控制台,创建文件系统及添加挂载点,更多信息,请参见NAS使用流程
  3. 编写template.yml,复制上面步骤创建好的资源,并编写VpcConfigNasConfig的配置后保存文件。
     ROSTemplateFormatVersion: '2015-09-01'
     Transform: 'Aliyun::Serverless-2018-04-03'
     Resources:
       nasDemo:
         Type: 'Aliyun::Serverless::Service'
         Properties:
           VpcConfig:
             VpcId: 'vpc-bp12hm92gdpcjtai7****'
             VSwitchIds: [ 'vsw-bp1gitru7oicyyb4u****' ]
             SecurityGroupId: 'sg-bp1243pi65bw4cjj****'
           NasConfig:
             UserId: 10003
             GroupId: 10003
             MountPoints:
                - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
                 MountDir: '/mnt/nas'

    完成上述步骤后,您就可以使用fun localfun deploy进行部署和调试了。

方式二

使用template.yml文件及fun deploy命令配置NAS及其依赖资源。

说明 如果您需要使用NAS及其依赖资源,但是又不想涉及专有网络、交换机及挂载点等,建议您使用方式二进行配置。
  1. 在函数根目录下新建一个template.yml文件,具体信息,请参见template.yml,使用NasConfig: Auto服务的示例修改文件内容。
    ROSTemplateFormatVersion: '2015-09-01'
    Transform: 'Aliyun::Serverless-2018-04-03'
    Resources:
      nasDemo:
        Type: 'Aliyun::Serverless::Service'
        Properties:
          NasConfig: Auto
  2. 在根目录中执行fun deploy命令。
    预期输出:
    Waiting for service nasDemo to be deployed...
        ... ...
        using 'VpcConfig: Auto', Fun will try to generate related vpc resources automatically
            ... ...
        generated auto VpcConfig done:  {"vpcId":"vpc-bp1pcr7o8ksmgojt4****","vswitchIds":["vsw-bp13qdw9qe1i2it4y****"],"securityGroupId":"sg-bp161u0547x0lq5k****"}
        using 'NasConfig: Auto', Fun will try to generate related nas file system automatically
            ... ...
        generated auto NasConfig done:  {"UserId":10003,"GroupId":10003,"MountPoints":[{"ServerAddr":"****c4a7ac-vrk7.cn-hangzhou.nas.aliyuncs.com:/nasDemo","MountDir":"/mnt/auto"}]}
        Checking if nas directories /mnt/auto/nasDemo exists, if not, it will be created automatically
        Checking nas directories done ["/mnt/auto/nasDemo"]
        ... ...
    service nasDemo deploy success            
    说明
    • NasConfig: Auto的部署效果是幂等的,即如果依赖的相关资源不存在,则会自动创建,如果相关资源已经存在,则会直接使用相关资源。
    • fun localfun deploy均支持NasConfig: Auto配置。
    • 使用NasConfig: Auto时,NAS文件系统会被自动挂载到函数计算运行环境的/mnt/auto目录中。

相关操作

您可以通过以下不同的命令,了解fun nas的相关功能。

您需要在函数根目录下新建一个template.yml文件,具体信息,请参见template.yml,使用NasConfig服务示例修改文件内容,如下所示。
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  nasDemo:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      NasConfig: Auto            
  • 在根目录中执行以下命令,初始化配置:
    fun nas init
    预期输出:
    start fun nas init... 
    Waiting for service fun-nas-NasDemo to be deployed...   
      ... ...     
        using 'VpcConfig: Auto', Fun will try to generate related vpc resources automatically     
      ... ...     
        generated auto VpcConfig done:  {"vpcId":"vpc-bp1pcr7o8ksmgojt4****","vswitchIds":["vsw-bp13qdw9qe1i2it4y****"],"securityGroupId":"sg-bp161u0547x0lq5k****"}     
        using 'NasConfig: Auto', Fun will try to generate related nas file system automatically     
      ... ...     
        generated auto NasConfig done:  {"UserId":100**,"GroupId":100**,"MountPoints":[{"ServerAddr":"****c4a6d9-gry74.cn-hangzhou.nas.aliyuncs.com:/fun-nas-NasDemo","MountDir":"/mnt/auto"}]}     
        Checking if nas directories /mnt/auto/fun-nas-NasDemo exists, if not, it will be created automatically     
        Checking nas directories done ["/mnt/auto/fun-nas-NasDemo"]     
      ... ... 
    service fun-nas-NasDemo deploy success
     
    Fun nas init Success 
    
    Tips for next step 
    ====================== 
    $ fun nas info      # Show NAS info 
    $ fun nas ls        # List NAS files 
    $ fun nas sync      # Synchronize files to nas 
    $ fun deploy        
    # Deploy Resources
    说明 您执行fun nas init命令后,NAS及VPC相关资源已成功创建,如果您修改了NAS或VPC的相关配置,您只需重新执行fun nas initfun vpc init命令进行一次初始化配置即可。
  • 在根目录中执行以下命令查看NAS目录。
    fun nas info
    预期输出:
    Local NAS folder of service NasDemo includes: 
    /NasDemo/.fun/nas/auto-default/NasDemo
  • 在根目录中执行以下命令同步本地NAS资源信息,如果本地资源有变更,您只需重新执行以下命令即可。
    fun nas sync
    预期输出:
    Starting upload /NasDemo/.fun/nas/auto-default/NasDemo to nas://NasDemo:/mnt/auto/ 
    NAS path checking... 
    zipping /NasDemo/.fun/nas/auto-default/NasDemo
      /NasDemo/.fun/nas/auto-default/.NasDemo.zip - zipped
    generate tmpDir: /NasDemo/.fun/nas/auto-default/.fun_nas_tmp/42658c92eef63f2b3b13e5f46315ee7d
    Split zip file to 1 small files 
    Uploading... 
    Upload /NasDemo/.fun/nas/auto-default/NasDemo to /mnt/auto/ done!
  • 您可以在根目录中通过以下两种方式命令查看NAS服务中的文件。
    • 指定列出某个服务下的NAS路径内容:fun nas ls nas://ServiceName/Path。执行以下命令查看NAS服务中的资源。
      fun nas ls -a nas://NasDemo/mnt/auto
      预期输出:
      total 10 
      drwxr-xr-x 4 user10003 10003 4096 Aug  4 11:38 . 
      drwxr-xr-x 1 root      root  4096 Aug  4 11:37 .. 
      drwxr-xr-x 4 user10003 10003 4096 Aug  4 11:38 .fun_nas_tmp 
      -rw-r--r-- 1 user10003 10003   19 Aug  4 11:38 test 
      drwxr-xr-x 2 user10003 10003 4096 Aug  4 11:38 testDir
    • 如果模板文件template.yml的文件中只包含一个服务,您可以将ServiceName省略掉,即fun nas ls nas:///Path,执行以下命令查看NAS服务中的资源。
      fun nas ls -a nas://mnt/auto

fun nas相关命令的动态演示

fun nas