天天看點

開發函數計算的正确姿勢 —— 使用 Fun NAS 管理 NAS 資源

前言

首先介紹下在本文出現的幾個比較重要的概念:

函數計算(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 通常有幾種方案可以選擇:

  1. 購買一台 ECS,然後挂載 NAS,通過 FTP 或者網盤等實作将檔案上傳到 NAS 的目的
  2. 使用線上遷移服務,将 OSS 資源遷移到 NAS,
  3. 借助于函數計算,開發一個 Serverless 的 NAS 檔案管理應用,

本次,我們介紹一個更簡單的方式,即通過  

fun nas

  管理 nas 檔案以及上傳本地檔案 nas。

fun nas 本身實作思路是上面第三個方案的更新版,但解決了其存在的一些問題,比如

  1. 需要手動部署一套服務的問題
  2. 不支援目錄上傳的問題
  3. 不支援大于 6M 的檔案上傳的問題
  4. 等等

下面,我們從一個簡單的示例來看一下 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 支援兩種協定格式:

  1. 指定列出某個 service 下的 nas 路徑内容:fun nas ls nas://ServiceName/Path。本例中可以是 nas://NasDemo/mnt/auto
  2. 如果模闆檔案(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 NAS 管理 NAS 資源

更多參考

  1. Fun :Fun 的 github 倉庫首頁,可以在這裡找到更多的幫助文檔以及教程資源。
  2. :介紹了如何自動化配置 NAS。
  3. :講解了如何使用 Fun 解決機器學習場景下的依賴安裝以及大依賴的問題。

繼續閱讀