Function Computeを使用する場合、異なるアプリケーションや関数間で同じデータセットにアクセスする必要がある場合があります。 例えば、機械学習アプリケーションでは、訓練されたモデルは、複数の推論関数によって共有される必要がある。 Apsara File Storage NAS (NAS) ファイルシステムを設定して、データを保存および共有できます。 これにより、オンプレミスディスク容量のデータ管理とアドレス制限が簡素化されます。 関数のNASファイルシステムを設定した後、関数は、オンプレミスのファイルシステムと同じ方法で、NASファイルシステムからデータを読み書きできます。
始める前に
Function Compute
関数を作成し、関数のVPCアクセスを設定します。 詳細については、「関数の作成」および「ネットワーク設定の設定」をご参照ください。
説明NASファイルシステムは、プライベート仮想プライベートクラウド (VPC) でのみ設定できます。 したがって、NASマウントを設定する場合は、関数がVPCにアクセスすることを許可し、関数ネットワーク設定でVPCを正しく設定する必要があります。
NAS
NASファイルシステムを作成し、ファイルシステムのマウントターゲットを追加します。 詳細については、「ファイルシステムの作成」および「マウントターゲットの作成」をご参照ください。
制限事項
リージョン内のFunction Computeの関数に対して、最大5つのNASマウントターゲットと5つのObject Storage Service (OSS) マウントターゲットを設定できます。
同じ関数の場合、NASマウントターゲットの関数ランタイム内のローカルディレクトリをOSSマウントターゲットのものと同じにすることはできません。
NASファイルシステムの設定
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。
関数の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[ストレージ] をクリックします。 [NAS] セクションで、[変更] をクリックします。 NASパネルで、次のパラメーターを設定し、[デプロイ] をクリックします。
NASファイルシステムを設定するには、設定モードとして [自動設定] または [カスタム設定] を選択します。
自動設定
システムは、
Alibaba-Fc-V3-Component生成
という名前の汎用NASファイルシステムと、同じ名前のVPC、vSwitch、およびセキュリティグループを自動的に作成します。次回 [自動設定] を選択すると、前述のNASファイルシステムが既にリージョンに存在することが検出されます。 この場合、システムはファイルシステムと関連するVPC設定を再使用し、ファイルシステムを再作成しません。 VPCおよびNASの課金の詳細については、「課金」および「汎用NASファイルシステムの課金」をご参照ください。
カスタマイズ設定
このオプションを選択した場合、NASファイルシステムを手動で選択し、ユーザー、ユーザーグループ、NASマウントターゲットなどの関連設定を設定する必要があります。
次の表に、主要なパラメーターを示します。
パラメーター
説明
例
ApsaraファイルストレージNAS
既存のNASファイルシステムを選択します。
新しいNASファイルシステムを作成するには、パラメーターの下にある [NASファイルシステムの作成] をクリックしてNASコンソールに移動します。
重要NFS (Network File System) ベースのNASファイルシステムのみがサポートされています。 SMB (Server Message Block) ベースのNASファイルシステムはサポートされていません。
01d394 ****
ユーザーとユーザーグループ
カスタムユーザーIDとユーザーグループIDを入力します。 値を指定しない場合は、システムルートIDが使用されます。 具体的には、
UID=0
、GID=0
である。 詳細については、「NASユーザーとユーザーグループ」をご参照ください。1
リモートディレクトリ
リモートディレクトリを指定します。 汎用NASファイルシステムのリモートディレクトリは /で始まる必要があります。
極端なNASファイルシステムのリモートディレクトリは、/shareで始まる必要があります。
指定したリモートディレクトリがリモートNASファイルシステムに存在しない場合、Function Computeは自動的にディレクトリを作成します。 ディレクトリの所有者は、構成した前述のユーザーおよびユーザーグループであり、アクセス許可レベルは
777
です。詳細については、「リモートディレクトリ」をご参照ください。
/
ローカル関数ディレクトリ
/home、/mnt、/tmp、または /dataのサブディレクトリを使用することを推奨します。
説明/bin、/opt、/var、/devなどの一般的なLinuxおよびUNIXシステムディレクトリとそのサブディレクトリは使用しないでください。 さもなければ、取付けは失敗するかもしれません。
詳細については、「ローカルディレクトリ」をご参照ください。
/mnt/nas
説明異なる機能で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): # 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) # Write data to the NAS file system. 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)) # Read data from the NAS file system. 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ユーザーとユーザーグループ
ユーザIDおよびユーザグループIDの有効値は [0, 65534] である。 ユーザーIDまたはユーザーグループIDに値を指定しない场合. デフォルトの値は0で、それぞれルートユーザーIDとルートユーザーグループIDを示します。 ファイルの読み取り権限と書き込み権限が一致するように、ファイルに対する所有者と対応するグループ権限を指定する必要があります。 たとえば、異なる機能でNASファイルリソースを共有する場合は、これらの機能のNASマウントを設定するときに同じユーザーとユーザーグループを使用する必要があります。
リモートディレクトリとローカルディレクトリ
各NASマウントターゲットのエンドポイントは、リモートディレクトリとローカルディレクトリで構成されます。 NASファイルシステムをマウントするプロセスは、基本的に、Function Computeインスタンスのローカルディレクトリから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ファイルシステムをマウントすることはできません。
関連ドキュメント
Function Computeは、NAS、Object storage Service (OSS) 、一時ハードディスク、およびレイヤーのストレージタイプをサポートしています。 シナリオとこれらのストレージタイプの違いの詳細については、「関数ストレージの選択」をご参照ください。
画像、ビデオ、ドキュメントなどの非構造化データを大量に保存する必要がある場合は、OSSファイルシステムをマウントすることを推奨します。 詳細については、「OSSファイルシステムの設定」をご参照ください。
Serverless Devsを使用して、NASシステムを関数にマウントすることもできます。 詳細については、「Serverless Devsの一般的なコマンド」をご参照ください。