File Storage NAS (NAS) は Function Compute とシームレスに連携します。関数に NAS ファイルシステムを設定することで、ローカルファイルシステム上のファイルと同じように NAS ファイルにアクセスできます。これにより、永続ストレージが提供され、ローカルディスク容量の制限が解消され、異なる関数インスタンス間でファイルデータを共有できるようになります。このトピックでは、関数に NAS ファイルシステムを設定する方法について説明します。
前提条件
NAS ファイルシステムが作成されていること。詳細については、「ファイルシステムの作成」をご参照ください。
関数が作成されていること。詳細については、「Web 関数の作成」をご参照ください。
関数のネットワーク設定が構成されていること。詳細については、「ネットワーク設定の構成」をご参照ください。
制限
Function Compute 関数は、単一リージョンで最大 5 つの NAS マウントターゲットをサポートします。
関数のランタイム環境で NAS マウントターゲットに指定されたローカルディレクトリは、競合してはなりません。
NAS ファイルシステムの設定
-
Function Compute コンソールにログインします。左側のナビゲーションペインで、を選択します。
-
上部のナビゲーションバーで、リージョンを選択します。関数リスト ページで、対象の関数をクリックします。
-
関数詳細ページで、設定 タブを選択し、詳細設定 の横にある 変更 をクリックします。 詳細設定 パネルで、ストレージ セクションに移動し、[NAS ファイルシステムのマウント] を有効にして必要な設定を行い、デプロイ をクリックします。
NAS ファイルシステムは、自動設定 または カスタム設定 のいずれかを使用して設定できます。
自動設定
システムは、
Alibaba-Fc-V3-Component-Generatedという名前の汎用 NAS ファイルシステムと、同名の VPC、vSwitch、およびセキュリティグループを自動的に作成します。同じリージョンで再度 自動設定 を使用すると、システムは新規作成するのではなく、既存の NAS ファイルシステムと VPC 設定を再利用します。 料金の詳細については、「VPC 課金」と「汎用 NAS の課金」をご参照ください。
カスタム設定
NAS ファイルシステムを手動で選択し、ユーザー、ユーザーグループ、マウントターゲットなどのパラメーターを設定する必要があります。
次の表に、主要なパラメーターを示します。
パラメーター
説明
例
[NAS ファイルシステム]
既存の NAS ファイルシステムを選択します。
NAS ファイルシステムを作成するには、NAS ファイルシステムの作成 をクリックして、ファイルストレージコンソールで作成します。
重要NFS プロトコルを使用する NAS ファイルシステムのみがサポートされます。SMB プロトコルを使用する NAS ファイルシステムはサポートされていません。
01d394****
[ユーザー]、[ユーザーグループ]
カスタムユーザー ID とユーザーグループ ID を指定します。指定しない場合、設定はデフォルトで root ユーザー (
UID=0およびGID=0) になります。詳細については、「NAS ユーザーとユーザーグループ」をご参照ください。1
[リモートディレクトリ]
-
汎用 NAS ファイルシステムの場合、このディレクトリは / で始まる必要があります。
-
エクストリーム NAS ファイルシステムの場合、このディレクトリは /share で始まる必要があります。
指定したディレクトリが NAS 上に存在しない場合、FC は自動的に作成します。新しいディレクトリの所有者は指定したユーザーとユーザーグループになり、権限として
777が付与されます。詳細については、「リモートディレクトリ」をご参照ください。
/
[関数ローカルディレクトリ]
/home 、/mnt、/tmp、または /data のサブディレクトリを使用することを推奨します。
説明/bin、/opt、/var、/dev など、一般的な Linux および Unix のシステムディレクトリやそのサブディレクトリは使用しないでください。使用した場合、マウントが失敗する可能性があります。
詳細については、「関数のローカルディレクトリ」をご参照ください。
/mnt/nas
説明-
複数の関数間で NAS リソースを共有するには、各関数に同じユーザーとユーザーグループを設定します。
-
NAS に書き込まれたファイルは、関数内でローカルに作成されたファイルと同じ権限になります。
-
マウントの確認
NAS にアクセスするための関数コードの準備
NAS ファイルシステムを設定した後、マウント先として指定したローカルディレクトリパスを使用してコード内でアクセスできます。
-
関数詳細ページで、コード タブをクリックします。 コードエディターでコードを記述し、デプロイメントコード をクリックします。
このトピックでは、Python のイベント駆動型関数を例として使用します。このコードは、NAS ファイルシステムに対してコンテンツの書き込みと読み取りを行います。
#!/usr/bin/env python # -*- coding: utf-8 -*- import random import subprocess import string import os def handler(event, context): # ファイルシステムのディスク領域使用量をレポートし、NAS マウントターゲットを確認します 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() # 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 ファイルへの書き込みと読み取りに成功したことを確認できます。
C9JFL0.txt DCFIC887M7R74WYH/ 5CXI5H.txt H0630SH2QHPL9MHZ/ EUV7ZA.txt H4UNM032L2TDLPPQ/ YXDBPM.txt HYMF79FH11AYW66D/ LU3WNG.txt Z3QNEH0MY0K3VM6G/ 9D3FM2.txt fc-1/ modelscope-60c13a-model-download-func/ NAS here I come FC Invoke End RequestId: 1-66878b18-16cd285c-27f5980efe23 -
(オプション) 関数を実行した後、インスタンスにログインして、関数のローカルディレクトリ内のファイルを表示し、ログ出力と一致することを確認できます。
-
関数の詳細ページで、インスタンス タブをクリックします。対象インスタンスの 操作 列で、インスタンスに接続 をクリックします。
インスタンスが実行されていない場合は、コード タブで 関数のテスト をクリックして関数を再度実行し、インスタンスを作成します。
-
インスタンスにログインした後、コマンドを実行して、設定した関数のローカルディレクトリ内のファイルを表示できます。
root@c-668b4cff-xxx:/code# cd /mnt/nas root@c-668b4cff-xxx:/mnt/nas# ls 0Q0V5ZYWMW7SLUYV BVT5FA0OV9ZLIZMU DCFIC887M7R74WYH F8I2CGH79QQGPZKC HO63OSH2QHPL9MHZ H4UNM032L2TDLPPQ HYMF79FH11AYW66D KEDRGMD67X64A6FD Z3QNEH0MY0K3VM6G fc-1 modelscope-60c13a-model-download-func root@c-668b4cff-xxx:/mnt/nas# cd ../ root@c-668b4cff-xxx:/mnt# cd nas/Z3QNEH0MY0K3VM6G root@c-668b4cff-xxx:/mnt/nas/Z3QNEH0MY0K3VM6G# ls 9D3FM2.txt root@c-668b4cff-xxx:/mnt/nas/Z3QNEH0MY0K3VM6G#
-
関連概念
NAS のユーザーとユーザーグループ
ユーザー ID とグループ ID の値の範囲は 0 から 65534 です。これらの値を指定しない場合、両方ともデフォルトで 0 になり、それぞれルートユーザー ID とルートグループ ID に対応します。一貫した読み取りおよび書き込みアクセスを確保するには、必要に応じてファイルの所有者と対応するグループ権限を設定する必要があります。たとえば、異なる関数で NAS ファイルリソースを共有する場合は、これらの関数に NAS ファイルシステムを設定するときに、同じユーザーとユーザーグループを使用する必要があります。
リモートディレクトリと関数のローカルディレクトリ
NAS ファイルシステムをマウントすると、関数の環境にある関数ローカルディレクトリが、NAS ファイルシステム内のリモートディレクトリにマッピングされます。
-
[リモートディレクトリ]
リモートディレクトリは、/workspace/document のような、NAS ファイルシステム上のディレクトリパスです。このパスが xxxx-nas.aliyuncs.com などのマウントターゲットと組み合わさり、マウント用の完全なアドレスになります。完全なマウントソースは xxxx-nas.aliyuncs.com:/workspace/document のようになります。
マウントターゲットを見つけるには、NAS コンソールにログインし、ファイルシステムをクリックして、[マウントの使用状況] をクリックします。
-
[関数ローカルディレクトリ]
関数のランタイム環境のローカルディレクトリは、ローカルファイルシステムのマウントポイントとして使用されます。/home、/mnt、/tmp、または /data のサブディレクトリを使用することを推奨します。/bin、/opt、/var、/dev など、一般的な Linux および Unix のシステムディレクトリまたはそのサブディレクトリを使用して NAS ファイルシステムをマウントしないでください。
関連ドキュメント
Function Compute で NAS を使用するシナリオとストレージタイプ間の違いの詳細については、「関数のストレージタイプの選択」をご参照ください。