前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。
NAS: 阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。在函数计算的场景中,由于其有代码包的限制,可以使用 NAS 存放一些不经常变动的文件,比如数据模型、静态资源等。参考。
备注:请确保 Fun 工具版本在 2.16.0+
在很多函数计算的实战文章里,比如《开发函数计算的正确姿势——tensorflow serving》,我们通过 NAS 存放一些体积比较大且不易变动的资源。这使得即使在依赖比较大的场景下,我们依旧可以借助于函数计算快速开发一个 Serverless 应用。但 NAS 在帮助函数计算解决大依赖问题的同时,由于其自身的配置也比较复杂,也增加了函数计算的使用难度。
我们已经通过《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》 这篇文章了解了如何简化 NAS 的配置。但即使配置好了 NAS 服务,我们还要面对一个问题,那就是如何将本地的资源上传到 nas 文件系统中呢?
上传资源到 NAS 通常有几种方案可以选择:
- 购买一台 ECS,然后挂载 NAS,通过 FTP 或者网盘等实现将文件上传到 NAS 的目的
- 使用在线迁移服务,将 OSS 资源迁移到 NAS,参考
- 借助于函数计算,开发一个 Serverless 的 NAS 文件管理应用,参考
本次,我们介绍一个更简单的方式,即通过 fun nas
管理 nas 文件以及上传本地文件 nas。
fun nas 本身实现思路是上面第三个方案的升级版,但解决了其存在的一些问题,比如
- 需要手动部署一套服务的问题
- 不支持目录上传的问题
- 不支持大于 6M 的文件上传的问题
- 等等
下面,我们从一个简单的示例来看一下 fun nas 的使用体验。
Fun Nas 使用体验一览
要使用 Fun Nas 条件非常简单,只需要在 template.yml 中包含 NAS 的相关配置即可。
接下来我们从头开始创建一个 Fun 项目,体验 Fun Nas 的相关功能。
我们创建一个空白目录,然后创建一个名为 template.yml
的文件,内容填写为:
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
NasDemo:
Type: 'Aliyun::Serverless::Service'
Properties:
NasConfig: Auto
我们从 《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》中的介绍的可以了解到, NasConfig
这一行配置就是帮助我们配置 NAS 服务的,如果已经存在了 NAS 服务,可以填写自己的配置信息。
1. 使用 fun nas init 进行初始化配置
接下来,同样是在该目录,我们使用 fun nas init 初始化配置。
$ 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-bp1pcr7o8ksmgojt4rfws","vswitchIds":["vsw-bp13qdw9qe1i2it4y0700"],"securityGroupId":"sg-bp161u0547x0lq5k6i5x"}
using 'NasConfig: Auto', Fun will try to generate related nas file system automatically
... ...
generated auto NasConfig done: {"UserId":10003,"GroupId":10003,"MountPoints":[{"ServerAddr":"0dc9c4a6d9-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 相关的资源就创建完毕了。我们就可以继续使用 fun nas 的其他命令了。
注意: 修改了 nas 的相关配置,需要重新执行 fun nas init。
2. 使用 fun nas info 查看 nas 的相关信息
接下来,我们我们使用 fun nas info,查看本地 nas 目录:
$ fun nas info
Local NAS folder of service NasDemo includes:
/NasDemo/.fun/nas/auto-default/NasDemo
怎么理解这个本地 nas 目录呢?可以把它想成同步盘,也就是只要你将文件、资源存放到这个目录,那么就可以通过 fun nas sync 命令一键将这些资源按照本地的目录结构同步到 NAS 上。
3. 使用 fun nas sync 将本地 nas 资源同步到 nas 服务
就像上一步介绍的,我们只需要将想要上传到 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 目录文件有变动,只需要重新执行 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 服务中的资源。
$ 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
Fun Nas 动态演示
更多参考
- Fun:Fun 的 github 仓库首页,可以在这里找到更多的帮助文档以及教程资源。
- 《开发函数计算的正确姿势 —— Fun 自动化 NAS 配置》:介绍了如何自动化配置 NAS。
- 《开发函数计算的正确姿势——tensorflow serving》:讲解了如何使用 Fun 解决机器学习场景下的依赖安装以及大依赖的问题。