Apsara File Storage NAS支援與Function Compute無縫整合。通過在Function Compute配置NAS檔案系統,函數能夠以類似於訪問本地檔案系統的方式操作NAS檔案,實現檔案持久化儲存。該方式不僅可以消除本地磁碟空間的限制,還允許不同的函數執行個體共用檔案資料。本文介紹如何為函數配置NAS。
前提條件
使用限制
Function Compute在同一地區下的一個函數最多支援配置5個NAS掛載點。
NAS掛載點設定的函數運行環境中的本地目錄不能衝突。
操作步驟
步驟一:配置NAS檔案系統
登入Function Compute控制台,在左側導覽列,單擊函數。
在頂部功能表列,選擇地區,然後在函數頁面,單擊目標函數。
在函數詳情頁面,選擇配置頁簽,然後在左側導覽列選擇儲存頁簽,在NAS 檔案系統地區單擊編輯,在編輯面板中配置以下參數,然後單擊部署。
配置項
說明
樣本
掛載 NAS 檔案系統
是否啟用NAS檔案系統。取值說明如下。
啟用:啟用NAS檔案系統。
禁用:不啟用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
步驟二:訪問NAS檔案
完成NAS檔案系統的配置後,您可以在您的函數代碼中,通過掛載時指定的路徑來訪問NAS檔案。
在函數詳情頁面,單擊代碼頁簽,在代碼編輯器中編寫代碼,然後單擊部署代碼。
本文以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))
代碼部署成功後,單擊代碼頁簽的測試函數。
執行完成後,您可以在代碼頁簽的下方查看執行結果。在日誌輸出頁簽下可以看到函數執行過程中的日誌資訊。
步驟三:驗證NAS掛載是否成功
執行完步驟二,完成檔案的寫入和讀取,您可以登入執行個體查看函數本地目錄下的檔案情況,同時可以在NAS控制台查看NAS的使用量驗證是否成功。
查看配置的函數本地目錄下的檔案,確認是否與函數代碼操作的檔案資訊一致。
您可以在函數詳情頁面,單擊執行個體頁簽,查看執行個體狀態為運行中的列表,選擇一個執行個體,單擊該執行個體操作列的登入執行個體。如果沒有運行中的執行個體,可以在代碼頁簽單擊測試函數執行一次函數,拉起執行個體。
登入執行個體成功後,您就可以通過命令查看配置的函數本地目錄下的檔案資訊。樣本如下:
查看NAS的使用量與檔案操作是否一致,確認NAS是否掛載成功。具體請參見查看NAS容量監控。
附錄
NAS使用者和使用者組
UserID(使用者ID)和GroupID(使用者組ID)取值範圍為[0, 65534],您需要根據需求設定檔案的擁有者和相應的組許可權,確保檔案讀寫權限一致。
UserID和GroupID值配置可選,如果不填寫,預設值均為0,即分別表示root使用者ID和root使用者組ID。
Function Compute使用非root許可權執行使用者代碼時,如果需要掛載遠端NAS的子目錄,需確保函數執行個體中執行使用者具有子目錄的讀寫權限。操作步驟如下:
為NAS執行個體掛載遠端NAS的根目錄。具體操作,請參見步驟一:配置NAS檔案系統。
使用以下樣本建立子目錄,本樣本中建立的子目錄為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'
將NAS掛載點中的遠端目錄由根目錄修改為建立的子目錄(由/修改為/fc-1),實現遠端掛載子目錄。
如果需要掛載的子目錄在遠端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的適用情境及差異,請參見函數儲存選型。