前言
首先介紹下在本文出現的幾個比較重要的概念:
函數計算(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
我們從
中的介紹的可以了解到,
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 倉庫首頁,可以在這裡找到更多的幫助文檔以及教程資源。
- :介紹了如何自動化配置 NAS。
- :講解了如何使用 Fun 解決機器學習場景下的依賴安裝以及大依賴的問題。