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
- 使用
時,NAS 檔案系統會被自動挂載到函數計算運作環境的NasConfig: Auto
目錄/mnt/auto
4. 總結
相對于傳統的 NAS 配置方法,新的配置方法可以極大的減少了使用者配置 NAS 服務與函數計算的步驟。通過新的配置方法,使用者可以更友善的在函數計算中使用 NAS 服務存放資料模型、語言依賴等資源。