Function Compute (FC) では、複数のアプリケーションや関数が同じデータセットへのアクセスを共有する必要がある場合があります。たとえば、機械学習アプリケーションでは、トレーニング済みモデルを複数の推論関数間で共有する必要があります。関数に NAS ファイルシステムを設定して、このデータを保存できます。これにより、ファイル共有が可能になり、データ管理が簡素化され、ローカルディスク容量の制限を克服できます。関数に NAS ファイルシステムを設定すると、FC 関数はローカルファイルシステム上のファイルと同じように NAS ファイルの読み書きができます。
前提条件
-
Function Compute
関数は作成済みで、VPC にアクセスできるよう設定されている必要があります。詳細については、「関数の作成」および「ネットワーク設定」をご参照ください。
説明NAS マウントターゲットは VPC 内でのみ追加できます。そのため、NAS ファイルシステムが存在する特定の VPC にアクセスするように、関数のネットワーク設定を構成する必要があります。
-
File Storage NAS
NAS ファイルシステムを作成し、マウントターゲットを追加しておく必要があります。詳細については、「ファイルシステムの作成」および「マウントターゲットの追加」をご参照ください。
制限
-
Function Compute では、1 つの関数で、同一リージョン内の最大 5 つの NAS マウントターゲットと 5 つの Object Storage Service (OSS) マウントターゲットをサポートします。
-
NAS と OSS のマウントターゲットのローカルディレクトリは競合してはなりません。
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 に指定されたディレクトリが存在しない場合、Function Compute が自動的にそのディレクトリを作成します。 作成されたディレクトリは、指定したユーザーおよびユーザーグループが所有者となり、
777の権限が付与されます。詳細については、「リモートディレクトリ」をご参照ください。
/
[関数ローカルディレクトリ]
/home、/mnt、/tmp、または /data のサブディレクトリを使用することを推奨します。
説明/bin、/opt、/var、/dev などの一般的な Linux および Unix システムディレクトリやそのサブディレクトリに NAS ファイルシステムをマウントしないでください。マウントに失敗することがあります。
詳細については、「関数のローカルディレクトリ」をご参照ください。
/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 ユーザーとユーザーグループ
UserID と GroupID の値は 0 から 65534 の範囲で指定できます。これらの値を指定しない場合、両方ともデフォルトで 0 に設定され、それぞれ root ユーザー ID と root グループ ID に対応します。一貫した読み書きアクセスを確保するために、必要に応じてファイルの所有者と対応するグループ権限を設定する必要があります。たとえば、複数の関数で NAS ファイルリソースを共有する場合は、これらの関数の NAS ファイルシステムを設定する際に、同じユーザーとユーザーグループを使用する必要があります。
リモートディレクトリと関数のローカルディレクトリ
NAS ファイルシステムをマウントすると、関数の環境内の関数ローカルディレクトリが、NAS ファイルシステム内のリモートディレクトリにマッピングされます。
-
[リモートディレクトリ]
リモートディレクトリは、NAS ファイルシステム上のディレクトリパスです (例: /workspace/document)。このパスは、マウントターゲット (例: xxxx-nas.aliyuncs.com) と組み合わされて、マウント用の完全なアドレスとなります。完全なマウントソースは xxxx-nas.aliyuncs.com:/workspace/document のようになります。
マウントターゲットを見つけるには、NAS コンソールにログインし、お使いのファイルシステムをクリックしてから、[マウントの使用状況]をクリックします。
-
[関数ローカルディレクトリ]
関数のランタイム環境内のローカルディレクトリは、ローカルファイルシステム上のマウントポイントとして機能します。/home、/mnt、/tmp、または /data のサブディレクトリを使用することを推奨します。/bin、/opt、/var、/dev などの一般的な Linux および Unix システムディレクトリやそのサブディレクトリに NAS ファイルシステムをマウントしないでください。
関連ドキュメント
-
FC は、File Storage NAS、Object Storage Service (OSS)、一時ディスク、レイヤーなど、複数のストレージタイプをサポートしています。これらのストレージタイプのユースケースと違いを理解するには、「関数のストレージタイプの選択」をご参照ください。
-
画像、動画、ドキュメントなどの大量の非構造化データを保存する場合は、Object Storage Service (OSS) の使用を推奨します。詳細については、「OSS マウントターゲットの設定」をご参照ください。
-
Serverless Devs を使用して NAS ファイルシステムを関数にマウントすることもできます。詳細については、「一般的な Serverless Devs コマンド」をご参照ください。