天天看點

開發函數計算的正确姿勢 —— Fun 自動化 NAS 配置

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 服務,我們通常需要經過以下幾個步驟:

  1. 登陸 vpc 控制台,依次建立
    1. 專有網絡
    2. 建立交換機
    3. 建立安全組
  2. 登陸 nas 控制台,依次建立
    1. 檔案系統
    2. 添加挂載點
  3. 編寫 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

 的配置,部署操作會自動比傳統配置方式多幾步:

  1. 自動建立 VPC 相關的資源
  2. 自動建立 NAS 相關的資源
  3. 檢測在函數計算配置的挂載目錄是否存在,如果不存在,則自動建立

經過上面三步自動化的操作,我們就可以直接在函數計算使用 NAS 服務了。 

注意:

  1. NasConfig: Auto

     的部署效果是幂等的,即,如果依賴的相關資源不存在,則會自動建立,如果相關資源已經存在,則會直接使用相關資源。
  2. fun local、fun deploy 均支援

    NAsConfig: Auto

     配置
  3. 使用

    NasConfig: Auto

     時,NAS 檔案系統會被自動挂載到函數計算運作環境的

    /mnt/auto

     目錄

4. 總結

相對于傳統的 NAS 配置方法,新的配置方法可以極大的減少了使用者配置 NAS 服務與函數計算的步驟。通過新的配置方法,使用者可以更友善的在函數計算中使用 NAS 服務存放資料模型、語言依賴等資源。

5. 更多參考

  1. Fun 首頁 
  2. 開發函數計算的正确姿勢——tensorflow serving

繼續閱讀