全部產品
Search
文件中心

Apsara File Storage NAS:Function Compute掛載檔案系統

更新時間:Jul 06, 2024

Apsara File Storage NAS支援與Function Compute無縫整合。通過在Function Compute配置NAS檔案系統,函數能夠以類似於訪問本地檔案系統的方式操作NAS檔案,實現檔案持久化儲存。該方式不僅可以消除本地磁碟空間的限制,還允許不同的函數執行個體共用檔案資料。本文介紹如何為函數配置NAS。

前提條件

使用限制

  • Function Compute在同一地區下的一個函數最多支援配置5個NAS掛載點。

  • NAS掛載點設定的函數運行環境中的本地目錄不能衝突。

操作步驟

步驟一:配置NAS檔案系統

  1. 登入Function Compute控制台,在左側導覽列,單擊函數

  2. 在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。

  3. 在函數詳情頁面,選擇配置頁簽,然後在左側導覽列選擇儲存頁簽,在NAS 檔案系統地區單擊編輯,在編輯面板中配置以下參數,然後單擊部署

    配置項

    說明

    樣本

    掛載 NAS 檔案系統

    是否啟用NAS檔案系統。取值說明如下。

    • 啟用:啟用NAS檔案系統。

    • 禁用:不啟用NAS檔案系統。

    啟用

    NAS 配置方式

    NAS檔案系統的配置方式。取值說明如下。

    • 自動設定:系統自動為您建立一個名稱為Alibaba-Fc-V3-Component-Generated的通用型NAS檔案系統以及同名的專用網路、交換器和安全性群組。

      如您再次選擇自動設定,系統查詢到當前地區下已存在該NAS檔案系統,則會複用該檔案系統和相關VPC配置,不會重複建立。關於費用詳情,請參見VPC產品計費通用型NAS計費

    • 自訂配置:您需要手動設定NAS相關參數才能配置NAS檔案系統。

    自訂配置

    NAS檔案系統相關配置:NAS 配置方式選擇自訂配置時,需要填寫的配置資訊。

    NAS 檔案系統

    選擇已建立的NAS檔案系統。

    如需建立新的NAS檔案系統,單擊下方的建立新的 NAS 檔案系統,跳轉到檔案儲存體控制台手動建立。

    重要

    僅支援NFS協議類型的NAS檔案系統,不支援SMB協議類型。

    01d394****

    使用者(可選)

    訪問NAS檔案時所用的使用者,需填寫自訂的使用者ID。如您不輸入任何值,系統將使用root使用者ID,即UID=0。更多資訊,請參見NAS使用者和使用者組

    0

    使用者組(可選)

    訪問NAS檔案時所用的使用者組,需填寫自訂的使用者組ID。如您不輸入任何值,系統將使用root使用者組ID,即GID=0。更多資訊,請參見NAS使用者和使用者組

    0

    NAS 掛載點:選擇NAS掛載相關配置和設定相關目錄。關於目錄設定的更多資訊,請參見地址配置

    掛載點

    選擇與當前函數配置的專用網路和交換器匹配的NAS掛載點。

    說明
    • 配置NAS 掛載點之前,需先允許函數訪問VPC內資源,並選擇同一地區下的一個專用網路交換器。具體操作,請參見配置網路

    01d394****-e****.cn-hangzhou.nas.aliyuncs.com

    資料轉送方式

    選擇普通傳輸方式或加密傳輸方式。僅通用型NAS支援加密傳輸,加密傳輸會對資料轉送路徑進行加密,但是存在一定的資源消耗。更多資訊,請參見NFS協議檔案系統傳輸加密

    普通傳輸

    遠端目錄

    • 通用型NAS的該目錄必須以/開頭。

    • 極速型NAS的該目錄必須以/share開頭。

    若您配置的目錄在遠端NAS中不存在,Function Compute將會為您自動建立該目錄。目錄所有者為上述配置的使用者和使用者組,許可權等級為777

    更多資訊,請參見遠端目錄

    /

    函數本地目錄

    建議使用/home/mnt/tmp/data的子目錄。

    說明

    不能使用通用的Linux和Unix系統目錄及其子目錄,例如/bin/opt/var/dev等,以免掛載失敗。

    更多資訊,請參見函數本地目錄

    /mnt/nas

    image

步驟二:訪問NAS檔案

完成NAS檔案系統的配置後,您可以在您的函數代碼中,通過掛載時指定的路徑來訪問NAS檔案。

  1. 在函數詳情頁面,單擊代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼

    本文以Python函數代碼為例,範例程式碼會完成將內容寫入NAS檔案和讀取NAS檔案內容。

    說明

    以下代碼不適用於Web函數。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import random
    import subprocess
    import string
    import os
    
    
    def handler(event, context):
        # report file system disk space usage and check NAS mount target
        out, err=subprocess.Popen(['df', '-h'], stdout=subprocess.PIPE).communicate()
        print('disk: ' + str(out))
        lines = [ l.decode() for l in out.splitlines() if str(l).find(':') != -1 ]
        nas_dirs = [ x.split()[-1] for x in lines ]
        print('uid : ' + str(os.geteuid()))
        print('gid : ' + str(os.getgid()))
    
        for nas_dir in nas_dirs:
            sub_dir = randomString(16)
            file_name = randomString(6)+'.txt'
            new_dir = nas_dir + '/' + sub_dir + '/'
            print('test file: ' + new_dir + file_name)
            # 寫入NAS檔案
            content = "NAS here I come"
            os.mkdir(new_dir)
            fw = open(new_dir + file_name, "w+")
            fw.write(content)
            fw.close()
            # Showing the folder tree in NAS
            for home, dirs, files in os.walk(nas_dir):
                level = home.replace(nas_dir, '').count(os.sep)
                indent = ' ' * 2 * (level)
                print('{}{}/'.format(indent, os.path.basename(home)))
                subindent = ' ' * 2 * (level + 1)
                for f in files:
                    print('{}{}'.format(subindent, f))
            # 讀取NAS檔案
            f = open(new_dir + file_name, "r")
            print(f.readline())
            f.close()
        
        return 'success'
    
    
    def randomString(n):
        return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(n))
      
  2. 代碼部署成功後,單擊代碼頁簽的測試函數

    執行完成後,您可以在代碼頁簽的下方查看執行結果。在日誌輸出頁簽下可以看到函數執行過程中的日誌資訊。

步驟三:驗證NAS掛載是否成功

執行完步驟二,完成檔案的寫入和讀取,您可以登入執行個體查看函數本地目錄下的檔案情況,同時可以在NAS控制台查看NAS的使用量驗證是否成功。

  • 查看配置的函數本地目錄下的檔案,確認是否與函數代碼操作的檔案資訊一致。

    1. 您可以在函數詳情頁面,單擊執行個體頁簽,查看執行個體狀態為運行中的列表,選擇一個執行個體,單擊該執行個體操作列的登入執行個體。如果沒有運行中的執行個體,可以在代碼頁簽單擊測試函數執行一次函數,拉起執行個體。

      image

    2. 登入執行個體成功後,您就可以通過命令查看配置的函數本地目錄下的檔案資訊。樣本如下:

      image

  • 查看NAS的使用量與檔案操作是否一致,確認NAS是否掛載成功。具體請參見查看NAS容量監控

    image

附錄

NAS使用者和使用者組

UserID(使用者ID)和GroupID(使用者組ID)取值範圍為[0, 65534],您需要根據需求設定檔案的擁有者和相應的組許可權,確保檔案讀寫權限一致。

UserID和GroupID值配置可選,如果不填寫,預設值均為0,即分別表示root使用者ID和root使用者組ID。

Function Compute使用非root許可權執行使用者代碼時,如果需要掛載遠端NAS的子目錄,需確保函數執行個體中執行使用者具有子目錄的讀寫權限。操作步驟如下:

  1. 為NAS執行個體掛載遠端NAS的根目錄。具體操作,請參見步驟一:配置NAS檔案系統

  2. 使用以下樣本建立子目錄,本樣本中建立的子目錄為fc-1

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import os
    
    
    def handler(event, context):
        print('uid : ' + str(os.geteuid()))
        print('gid : ' + str(os.getgid()))
    
        # 請手動更改為 NAS 掛載的本地目錄
        local_nas_dir = "/mnt/nas"
        # 請手動更改為目標子目錄名
        target_sub_dir = "fc-1"
    
        # 在 FC 中利用當前執行個體執行使用者權限建立目標目錄
        new_dir = local_nas_dir + '/' + target_sub_dir + '/'
        print('new_dir : ' + str(new_dir))
    
        os.mkdir(new_dir)
        return 'success'
    
  3. 將NAS掛載點中的遠端目錄由根目錄修改為建立的子目錄(由/修改為/fc-1),實現遠端掛載子目錄。

    image

說明
  • 如果需要掛載的子目錄在遠端NAS中不存在,配置遠端目錄後,Function Compute會自動為您建立該目錄,該目錄所有者即為配置的使用者和使用者組,許可權為777。

  • 如果您希望不同函數可以共用NAS檔案資源,您需要在為這些函數配置NAS檔案系統時,分別將UserId和GroupId設定為相同的值。

  • 上傳至NAS的檔案許可權與本地檔案許可權完全相同。

地址配置

每個NAS 掛載點地址由遠端目錄函數本地目錄組成。掛載NAS的過程本質上是建立了一個從Function Compute執行個體的本地目錄到NAS遠端目錄的映射關係。

  • 遠端目錄

    遠端NAS中的目錄是指位於NAS檔案系統中的目錄,由掛載點和絕對目錄兩部分組成。掛載點可以通過NAS控制台來添加。將掛載點和絕對目錄拼接得到遠端目錄。例如,NAS檔案系統的掛載點是xxxx-nas.aliyuncs.com,您希望被訪問的絕對目錄是/workspace/document,對應完整的遠端目錄就是xxxx-nas.aliyuncs.com:/workspace/document

    您可以登入NAS控制台,在檔案系統列表中,單擊目標檔案系統,然後單擊掛載使用,以擷取掛載點。

  • 函數本地目錄

    函數運行環境中的本地目錄是指本地檔案系統的掛載點。建議使用/home/mnt/tmp/data的子目錄。不能使用通用的Linux和Unix系統目錄及其子目錄掛載NAS,例如/bin/opt/var/dev等。

相關文檔

如果您希望瞭解Function Compute使用NAS的適用情境及差異,請參見函數儲存選型