1. 前言
首先介绍下在本文出现的几个比较重要的概念:
函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。
Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。
NAS: 阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。在函数计算的场景中,由于其有代码包的限制,可以使用 NAS 存放一些不经常变动的文件,比如数据模型、静态资源等。参考。
备注:请确保 Fun 工具版本在 2.16.0+
在很多函数计算的实战文章里,比如《开发函数计算的正确姿势——tensorflow serving》,我们都通过 NAS 存放一些体积比较大且不易变动的资源。这使得即使在依赖比较大的场景下,我们依旧可以借助于函数计算快速开发一个 Serverless 应用。 NAS 在帮助函数计算解决大依赖问题的同时,由于其自身 NAS 本身的配置也比较复杂,也增加了函数计算的使用难度。
为了简化使用 NAS 的体验,我们在 Fun 2.16.0 添加了一个新的配置项 NasConfig: Auto
。通过该属性,可以一键将 nas 及其依赖的 vpc 资源一同创建出来。
下面,我们先回顾下传统的 NAS 配置方法,再介绍下新的 NAS 配置方法,看新的配置方法是如何实现简化 NAS 配置步骤的效果的。
2. 传统的配置方式
在《开发函数计算的正确姿势 —— 本地运行、调试、发布 NAS 函数》中,我们已经介绍过,如何在配置、调试、发布函数计算与 NAS 服务。
从文章中的介绍来看,通常情况下,为了在函数计算中使用 NAS 服务,我们通常需要经过以下几个步骤:
-
登陆 vpc 控制台,依次创建
- 专有网络
- 创建交换机
- 创建安全组
-
登陆 nas 控制台,依次创建
- 文件系统
- 添加挂载点
- 编写 template.yml,复制上面步骤创建好的资源,并编写 [VpcConfig]() 以及 NasConfig 的配置
完成上面的步骤后,template.yml 的内容如下:
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
nasDemo:
Type: 'Aliyun::Serverless::Service'
Properties:
VpcConfig:
VpcId: 'vpc-bp12hm92gdpcjtai7ua82'
VSwitchIds: [ 'vsw-bp1gitru7oicyyb4uiylj' ]
SecurityGroupId: 'sg-bp1243pi65bw4cjj4bks'
NasConfig:
UserId: 10003
GroupId: 10003
MountPoints:
- ServerAddr: '012194b28f-ujc20.cn-hangzhou.nas.aliyuncs.com:/'
MountDir: '/mnt/nas'
最后使用 fun local 或者 fun deploy 就可以进行调试以及部署了。
3. 新的配置方式
如果仅仅想使用 nas,但又不想关心专有网络、交换机、挂载点等相关概念,可以直接使用 Fun 2.16.0 提供的新的配置 NasConfig: Auto
。
一个使用了 NasConfig 的服务示例如下:
ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
nasDemo:
Type: 'Aliyun::Serverless::Service'
Properties:
NasConfig: Auto
有了 NasConfig: Auto
,不需要声明 VPC 的配置以及 NAS 的配置,在使用 fun deploy
时,Fun 会自动生成相关的配置。
部署日志类似如下:
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-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":"0294c4a7ac-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
的配置,部署操作会自动比传统配置方式多几步:
- 自动创建 VPC 相关的资源
- 自动创建 NAS 相关的资源
- 检测在函数计算配置的挂载目录是否存在,如果不存在,则自动创建
经过上面三步自动化的操作,我们就可以直接在函数计算使用 NAS 服务了。
注意:
-
NasConfig: Auto
的部署效果是幂等的,即,如果依赖的相关资源不存在,则会自动创建,如果相关资源已经存在,则会直接使用相关资源。 - fun local、fun deploy 均支持
NAsConfig: Auto
配置 - 使用
NasConfig: Auto
时,NAS 文件系统会被自动挂载到函数计算运行环境的/mnt/auto
目录
4. 总结
相对于传统的 NAS 配置方法,新的配置方法可以极大的减少了用户配置 NAS 服务与函数计算的步骤。通过新的配置方法,用户可以更方便的在函数计算中使用 NAS 服务存放数据模型、语言依赖等资源。