全部产品
云市场
云游戏

使用 fun nas 管理 NAS 文件

更新时间:2020-02-05 13:32:19

本文介绍如何创建 NAS 及其依赖资源,以及在创建后如何管理 NAS 文件。

背景信息

通过 NasConfig: Auto 一键创建 NAS 及其依赖的 VPC 资源

在使用函数计算过程中,可以通过 NAS 来存放一些体积较大且不易变动的资源。这使得即使在依赖比较大的场景下,依旧可以借助函数计算来快速开发一个 Serverless 应用。但是 NAS 在帮助函数计算解决大依赖问题的同时,由于其自身的配置比较复杂,也增加了函数计算的使用难度。为了简化 NAS 的使用体验,Fun 工具添加了一个新的配置项 NasConfig: Auto 。通过该属性,您可以一键将 NAS 及其依赖的 VPC 资源一同创建出来。

通过 fun nas 管理 NAS 文件以及上传本地 NAS 文件

但是即使配置好了 NAS 服务,仍要面对这样一个问题,那就是如何将本地的资源上传到 NAS 文件系统中呢?

上传资源到 NAS 文件系统中通常有以下三种方案:

除了以上三种方案以外,还有一个更为简单的方式,您可以通过 fun nas 管理 NAS 文件以及上传本地 NAS 文件。

fun nas 本身实现思路是上述第三个方案的升级版,但是解决了其存在的一些问题,例如:

  • 需要手动部署一套服务。
  • 不支持目录上传。
  • 不支持大于 6 MB 的文件上传。

部署 NAS

传统的配置方式

操作步骤

  1. 登录 VPC 控制台,依次创建:

    1. 专有网络

    2. 交换机

    3. 安全组

  2. 登录 NAS 控制台,依次创建:

    1. 文件系统

    2. 添加挂载点

  3. 编写 template.yml,复制上面步骤创建好的资源,并编写 VpcConfig 以及 NasConfig 的配置。

    template.yml 的内容如下。

    1. ROSTemplateFormatVersion: '2015-09-01'
    2. Transform: 'Aliyun::Serverless-2018-04-03'
    3. Resources:
    4. nasDemo:
    5. Type: 'Aliyun::Serverless::Service'
    6. Properties:
    7. VpcConfig:
    8. VpcId: 'vpc-bp12hm92gdpcjtai7****'
    9. VSwitchIds: [ 'vsw-bp1gitru7oicyyb4u****' ]
    10. SecurityGroupId: 'sg-bp1243pi65bw4cjj****'
    11. NasConfig:
    12. UserId: 10003
    13. GroupId: 10003
    14. MountPoints:
    15. - ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
    16. MountDir: '/mnt/nas'

完成上述步骤后,您即可使用 fun local 或者 fun deploy 部署和调试。

新的配置方式

如果您只想使用 NAS,但是又不想关心专有网络、交换机、挂载点等概念,您可以直接使用新的配置 NasConfig: Auto

使用 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. NasConfig: Auto

有了 NasConfig: Auto,您就不再需要声明 VPC 的配置以及 NAS 的配置,在使用 fun deploy 时,Fun 会自动生成相关的配置。

部署日志过程如下。

  1. Waiting for service nasDemo to be deployed...
  2. ... ...
  3. using 'VpcConfig: Auto', Fun will try to generate related vpc resources automatically
  4. ... ...
  5. generated auto VpcConfig done: {"vpcId":"vpc-bp1pcr7o8ksmgojt4****","vswitchIds":["vsw-bp13qdw9qe1i2it4y****"],"securityGroupId":"sg-bp161u0547x0lq5k****"}
  6. using 'NasConfig: Auto', Fun will try to generate related nas file system automatically
  7. ... ...
  8. generated auto NasConfig done: {"UserId":10003,"GroupId":10003,"MountPoints":[{"ServerAddr":"****c4a7ac-vrk7.cn-hangzhou.nas.aliyuncs.com:/nasDemo","MountDir":"/mnt/auto"}]}
  9. Checking if nas directories /mnt/auto/nasDemo exists, if not, it will be created automatically
  10. Checking nas directories done ["/mnt/auto/nasDemo"]
  11. ... ...
  12. service nasDemo deploy success

从上面的部署日志中可以发现,由于多了 NasConfig: Auto 的配置,部署操作会自动比传统配置方式多三步:

  1. 自动创建 VPC 相关的资源。
  2. 自动创建 NAS 相关的资源。
  3. 检测在函数计算配置的挂载目录是否存在,如果不存在,则自动创建。

经过上面三步自动化的操作后,您就可以直接在函数计算使用 NAS 服务了。

注意:

  • NasConfig: Auto 的部署效果是幂等的,即如果依赖的相关资源不存在,则会自动创建,如果相关资源已经存在,则会直接使用相关资源。
  • fun localfun deploy 均支持 NasConfig: Auto 配置。
  • 使用 NasConfig: Auto 时,NAS 文件系统会被自动挂载到函数计算运行环境的 /mnt/auto 目录。

fun nas 使用体验一览

本文以从头开始创建一个 Fun 项目为例,带您体验 fun nas 的相关功能。

前提条件

在正式操作之前,您需要先创建一个空白目录,然后在该目录创建一个名为 template.yml 的文件,添加 NAS 的相关配置。

template.yml 的内容如下。

  1. ROSTemplateFormatVersion: '2015-09-01'
  2. Transform: 'Aliyun::Serverless-2018-04-03'
  3. Resources:
  4. NasDemo:
  5. Type: 'Aliyun::Serverless::Service'
  6. Properties:
  7. NasConfig: Auto

操作步骤

  1. 在该目录使用 fun nas init 初始化配置。

    1. $ fun nas init
    2. start fun nas init...
    3. Waiting for service fun-nas-NasDemo to be deployed...
    4. ... ...
    5. using 'VpcConfig: Auto', Fun will try to generate related vpc resources automatically
    6. ... ...
    7. generated auto VpcConfig done: {"vpcId":"vpc-bp1pcr7o8ksmgojt4****","vswitchIds":["vsw-bp13qdw9qe1i2it4y****"],"securityGroupId":"sg-bp161u0547x0lq5k****"}
    8. using 'NasConfig: Auto', Fun will try to generate related nas file system automatically
    9. ... ...
    10. generated auto NasConfig done: {"UserId":100**,"GroupId":100**,"MountPoints":[{"ServerAddr":"****c4a6d9-gry74.cn-hangzhou.nas.aliyuncs.com:/fun-nas-NasDemo","MountDir":"/mnt/auto"}]}
    11. Checking if nas directories /mnt/auto/fun-nas-NasDemo exists, if not, it will be created automatically
    12. Checking nas directories done ["/mnt/auto/fun-nas-NasDemo"]
    13. ... ...
    14. service fun-nas-NasDemo deploy success
    15. Fun nas init Success
    16. Tips for next step
    17. ======================
    18. $ fun nas info # Show NAS info
    19. $ fun nas ls # List NAS files
    20. $ fun nas sync # Synchronize files to nas
    21. $ fun deploy # Deploy Resources

    fun nas init 执行完成后,NAS、VPC 相关的资源创建完毕,然后可使用 fun nas 的其他命令。

    注意:修改了 NAS 的相关配置,需要重新执行 fun nas init

  2. 使用 fun nas info 查看本地 nas 目录。

    1. $ fun nas info
    2. Local NAS folder of service NasDemo includes:
    3. /NasDemo/.fun/nas/auto-default/NasDemo

    说明: 您可以将本地 nas 目录理解为同步盘,即只要您将文件、资源存放到这个目录,那么就可以通过 fun nas sync 命令一键将这些资源按照本地的目录结构同步到 NAS 上。

  3. 使用 fun nas sync 将本地 NAS 资源同步到 NAS 服务。就像上一步介绍的,您只需要将想要上传到 NAS 的文件存放到本地相应的目录即可。

    1. $ fun nas sync
    2. Starting upload /NasDemo/.fun/nas/auto-default/NasDemo to nas://NasDemo:/mnt/auto/
    3. NAS path checking...
    4. zipping /NasDemo/.fun/nas/auto-default/NasDemo
    5. /NasDemo/.fun/nas/auto-default/.NasDemo.zip - zipped
    6. generate tmpDir: /NasDemo/.fun/nas/auto-default/.fun_nas_tmp/42658c92eef63f2b3b13e5f46315ee7d
    7. Split zip file to 1 small files
    8. Uploading...
    9. Upload /NasDemo/.fun/nas/auto-default/NasDemo to /mnt/auto/ done!

    说明: 如果本地 nas 目录文件有变动,只需重新执行 fun nas sync 即可。

  4. 使用 fun nas ls 查看 NAS 服务中的文件。

    fun nas ls 支持两种协议格式:

    • 指定列出某个 Service 下的 nas 路径内容:fun nas ls nas://ServiceName/Path。本例中可以是 nas://NasDemo/mnt/auto。

    • 如果模板文件 template.yml 中只包含一个 Service,则可以省略这里的 ServiceName,即 fun nas ls nas:///Path。本例中可以是 nas:///mnt/auto。

    使用 fun nas ls nas://NasDemo/mnt/auto 查看远端 NAS 服务中的资源。

    1. $ fun nas ls -a nas://NasDemo/mnt/auto
    2. total 10
    3. drwxr-xr-x 4 user10003 10003 4096 Aug 4 11:38 .
    4. drwxr-xr-x 1 root root 4096 Aug 4 11:37 ..
    5. drwxr-xr-x 4 user10003 10003 4096 Aug 4 11:38 .fun_nas_tmp
    6. -rw-r--r-- 1 user10003 10003 19 Aug 4 11:38 test
    7. drwxr-xr-x 2 user10003 10003 4096 Aug 4 11:38 testDir

fun nas 动态演示