Function Compute (FC) のシナリオでは、複数のアプリケーションや関数が同じデータセットへの共有アクセスを必要とする場合があります。例えば、機械学習アプリケーションにおいて、トレーニング済みのモデルを複数の推論関数で共有するようなケースです。このような場合、関数に NAS ファイルシステムを設定してデータを保存できます。これにより、ファイル共有が可能になり、データ管理が簡素化され、ローカルディスク容量の制限も解消されます。関数に NAS ファイルシステムを設定すると、FC 関数はローカルファイルシステムと同じように、NAS ファイルの読み書きを簡単に行うことができます。
前提条件
Function Compute
関数を作成し、VPC ネットワークアクセスを設定済みであること。詳細については、「関数の作成」および「ネットワーク設定の構成」をご参照ください。
説明現在、NAS マウントポイントはプライベート VPC 環境でのみ追加できます。したがって、ネットワークを設定する際には、関数が VPC 内のリソースにアクセスできるように許可し、指定された NAS ファイルシステムにアクセスするために正しい VPC を設定する必要があります。
File Storage NAS
NAS ファイルシステムを作成し、マウントポイントを追加済みであること。詳細については、「ファイルシステムの作成」および「マウントポイントの追加」をご参照ください。
制限事項
Function Compute では、同一リージョン内の単一の関数に、最大 5 つの NAS マウントポイントと 5 つの 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 ファイルシステムを選択します。
新しい NAS ファイルシステムを作成するには、下の [新しい NAS ファイルシステムの作成] をクリックして File Storage コンソールに移動し、手動で作成します。
重要NFS プロトコルタイプの NAS ファイルシステムのみがサポートされており、SMB プロトコルタイプはサポートされていません。
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 マウントの検証
関数コードの準備
NAS ファイルシステムを設定した後、マウント時に指定したパスを通じて、関数コード内で NAS ファイルシステムにアクセスできます。
関数の詳細ページで コード タブをクリックし、コードエディタでコードを記述してから デプロイメントコード をクリックします。
この記事では、Python イベント関数のコードを例として、NAS ファイルシステムにコンテンツを書き込み、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 ファイルへの書き込みと読み取りに成功したことがわかります。

(オプション) ファイルの書き込みと読み取りの後、インスタンスにログインして関数のローカルディレクトリ内のファイルを確認し、クエリされた NAS ファイルが前のステップで成功した関数実行のログ出力と一致していることを確認できます。
関数の詳細ページで [インスタンス] タブをクリックし、対象インスタンスの [操作] 列にある [インスタンスにログイン] をクリックします。
実行中のインスタンスがない場合は、コード を 関数のテスト タブでクリックして、関数を再度実行し、インスタンスを作成できます。
インスタンスへのログインに成功したら、コマンドを使用して、設定された関数のローカルディレクトリ内のファイル情報を表示できます。例は次のとおりです:

関連概念
NAS ユーザーとユーザーグループ
ユーザー ID とグループ ID の値の範囲は [0, 65534] です。指定しない場合、デフォルトは 0 となり、それぞれ root ユーザー ID と root グループ ID を表します。ファイルの読み書き権限の一貫性を確保するために、要件に応じてファイル所有者と対応するグループ権限を設定する必要があります。例えば、異なる関数で NAS ファイルリソースを共有したい場合は、これらの関数に NAS ファイルシステムを設定する際に、同じユーザーとグループを使用する必要があります。
リモートディレクトリとローカルディレクトリ
各 NAS マウントポイントのアドレスは、[リモートディレクトリ] と [関数のローカルディレクトリ] で構成されます。NAS のマウントプロセスは、本質的に FC インスタンスのローカルディレクトリから NAS 上のリモートディレクトリへのマッピングを作成することです。
[リモートディレクトリ]
NAS 上のリモートディレクトリとは、NAS ファイルシステム内にあるディレクトリを指し、マウントポイントと絶対パスで構成されます。マウントポイントは NAS コンソールから追加できます。リモートディレクトリは、マウントポイントと絶対パスを組み合わせることで形成されます。例えば、NAS ファイルシステムのマウントポイントが xxxx-nas.aliyuncs.com で、アクセスしたい絶対ディレクトリが /workspace/document の場合、対応する完全なリモートディレクトリは 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)、一時ディスク領域、レイヤーなど、さまざまなストレージタイプをサポートしています。これらのストレージタイプの適用シナリオと違いを理解するには、「ストレージオプション」をご参照ください。
画像、動画、ドキュメントなどの大量の非構造化データを保存する必要がある場合は、OSS システムをマウントすることを推奨します。詳細については、「OSS の設定」をご参照ください。
また、Serverless Devs を使用して関数に NAS システムをマウントすることもできます。詳細については、「一般的な Serverless Devs コマンド」をご参照ください。