Apsara File Storage NAS (NAS) は、Function Computeとシームレスに統合されています。 Function Compute関数にNASファイルシステムをマウントして、オンプレミスのファイルシステムにアクセスするのと同様の方法でNASファイルシステム内のファイルにアクセスできるようにすることができます。 NASを使用すると、ファイルの永続的なストレージを実装できます。 この機能により、オンプレミスディスクの制限がなくなり、さまざまな関数インスタンスでファイルを共有できます。 このトピックでは、Function Compute関数にNASファイルシステムをマウントする方法について説明します。
前提条件
NASファイルシステムが作成されます。 詳細については、「ファイルシステムの作成」をご参照ください。
関数が作成されます。 詳細については、「web関数の作成」をご参照ください。
機能のネットワーク設定が構成されています。 詳細については、「ネットワーク設定の構成」をご参照ください。
制限事項
リージョン内のFunction Compute関数に最大5つのNASマウントターゲットを設定できます。
NASマウント対象の関数実行環境のローカルディレクトリは競合しません。
手順
手順1: NASファイルシステムの設定
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。
上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。
関数の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[ストレージ] タブをクリックします。 [NAS] セクションで、[変更] をクリックします。 NASパネルで、次のパラメーターを設定し、[デプロイ] をクリックします。
パラメーター
説明
例
NASファイルシステムのマウント
NASマウントを有効にするかどうかを指定します。 有効な値:
有効
無効化
有効にする
NAS設定モード
NASファイルシステムの設定モードを指定します。 有効な値:
自動設定: システムはNASファイルシステムを自動的に設定します。
カスタム設定: パラメーターを使用してNASファイルシステムを手動で設定します。
説明[自動設定] を選択する前に、関数がVPC内のリソースにアクセスできるようにし、VPC、vSwitch、セキュリティグループのパラメーターを設定する必要があります。 これらのパラメーターを設定しない場合、システムは上記のリソースを自動的に作成し、サービスに割り当てます。 課金の詳細については、「課金」をご参照ください。
[自動設定] を選択すると、汎用NASファイルシステムが作成されます。 NASファイルシステムの作成後に [自動設定] を再度選択した場合、システムは、前回 [自動設定] を選択したときに作成された既存の汎用NASファイルシステムを照会して使用します。 課金の詳細については、「汎用NASファイルシステムの課金」をご参照ください。
カスタマイズ設定
NASファイルシステムのパラメーター: NAS設定方法をカスタム設定に設定した場合、設定を指定する必要があります。
ApsaraファイルストレージNAS
作成したNASファイルシステムを選択します。
新しいNASファイルシステムを作成するには、パラメーターの下部にある [NASファイルシステムの作成] をクリックしてNASコンソールに移動します。 NFS (Network File System) ベースのNASファイルシステムのみがサポートされています。 SMB (Server Message Block) ベースのNASファイルシステムはサポートされていません。
01d394 ****
(オプション) ユーザー
NASファイルにアクセスするユーザーを指定します。 カスタムユーザーIDを入力する必要があります。 値を指定しない場合、システムはルートユーザーIDを使用します。 この場合、
UID=0
である。 詳細については、「NASユーザーとユーザーグループ」をご参照ください。0
(オプション) ユーザーグループ
NASファイルにアクセスするユーザーグループを指定します。 カスタムユーザーグループIDを入力する必要があります。 値を指定しない場合、システムはルートユーザーグループIDを使用します。 この場合、
GID=0
である。 詳細については、「NASユーザーとユーザーグループ」をご参照ください。0
NASマウントターゲット: マウントターゲットを指定し、ディレクトリを設定します。 ディレクトリの設定方法の詳細については、「NASマウントターゲットの設定」をご参照ください。
マウントターゲット
関数に設定されたVPCとvSwitchに一致するNASマウントターゲットを指定します。
説明NASマウントターゲットを設定する前に、関数がVPC内のリソースにアクセスできるようにし、同じリージョンにあるVPCとvSwitchを選択する必要があります。 詳細については、「ネットワーク設定の構成」をご参照ください。
01d394 ****-e **** .cn-hangzhou.nas.aliyuncs.com
データ伝送モード
通常送信または暗号化送信を選択します。 汎用NASファイルシステムのみが暗号化伝送をサポートしています。 暗号化伝送は、一定のリソースを犠牲にしてデータ伝送経路を暗号化する。 詳細については、「NFSファイルシステムの転送中の暗号化」をご参照ください。
定期的な送信
リモートディレクトリ
汎用NASファイルシステムのリモートディレクトリは /で始まる必要があります。
極端なNASファイルシステムのリモートディレクトリは、/shareで始まる必要があります。
NASファイルシステムで設定したリモートディレクトリの場合、Function Computeは自動的にディレクトリを作成します。 ディレクトリの所有者は、構成した前述のユーザーおよびユーザーグループであり、アクセス許可レベルは
777
です。/
関数のローカルディレクトリ
ローカルディレクトリを指定します。 /home、/mnt、/tmp、または /dataのサブディレクトリを使用することを推奨します。
説明/bin、/opt、/var、/devなどの一般的なLinuxおよびUnixシステムディレクトリとそのサブディレクトリを使用しないでください。
/mnt/nas
ステップ2: 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))
コードがデプロイされたら、[コード] タブの [テスト機能] をクリックします。
コードが実行された後、[コード] タブの下部に実行結果が表示されます。 [ログ] タブでは、関数の実行中に生成されたログを表示できます。
ステップ3: NASファイルシステムがマウントされているか確認
ステップ2を完了したら、インスタンスに接続して関数のローカルディレクトリにあるファイルを表示するか、NASコンソールでNASの使用状況を確認して、NASファイルシステムが正常にマウントされているかどうかを確認できます。
関数のローカルディレクトリ内のファイルが、関数のコード内のファイルと一致しているかどうかを確認します。
関数の詳細ページで、[インスタンス] タブをクリックして [実行中] 状態のインスタンスを表示し、インスタンスの [操作] 列の [インスタンスに接続] をクリックします。 インスタンスが実行されていない場合は、[コード] タブでインスタンスを再度実行できます。
インスタンスに接続した後、コマンドを実行して、関数のローカルディレクトリにあるファイルを表示できます。 以下の図は一例です。
NASファイルシステムの使用状況がファイル操作と一致しているかどうかを確認し、NASファイルシステムがマウントされているかどうかを確認します。 詳細については、「NASファイルシステムの容量モニタリングデータの表示」をご参照ください。
付録
NASユーザーとユーザーグループ
ユーザーIDとユーザーグループIDの有効値は0〜65534です。 ファイルに対する一貫した読み取りおよび書き込み権限を確保するために、必要に応じてファイルの所有者およびグループ権限を設定する必要があります。
ユーザーIDとユーザーグループIDはオプションです。 これらのパラメーターを指定しない場合、ルートユーザーIDおよびルートユーザーグループIDを示すデフォルト値0が使用されます。
Function Computeがルート以外のユーザーを使用してコードを実行し、リモートNASサブディレクトリが必要な場合は、関数インスタンスがサブディレクトリに対して必要な読み取りおよび書き込み権限を持っていることを確認する必要があります。
NASインスタンスを使用して、リモートNASファイルシステムのルートディレクトリをマウントします。 詳細については、「手順」をご参照ください。
ルートディレクトリをマウントしたら、サブディレクトリを作成します。 例: fc-1。 次に、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())) # Change the value to the local directory in the on-premises file system to which the NAS file system is mounted. local_nas_dir = "/mnt/nas" # Change the value to the name of the destination subdirectory. target_sub_dir = "fc-1" # Create the destination subdirectory by using the permissions of the current instance in Function Compute. new_dir = local_nas_dir + '/' + target_sub_dir + '/' print('new_dir : ' + str(new_dir)) os.mkdir(new_dir) return 'success'
マウントするサブディレクトリがリモートNASファイルシステムに存在しない場合、リモートディレクトリを設定した後、Function Computeは自動的にディレクトリを作成します。 ディレクトリの所有者は、構成されたユーザーおよびユーザーグループであり、権限は777です。
異なる関数でNASファイルリソースを共有する場合は、関数のNASファイルシステムを設定するときに同じユーザーとグループを使用する必要があります。
NASにアップロードされるファイルに対する権限は、オンプレミスのファイルに対する権限と同じです。
ディレクトリ設定
各NASマウントターゲットは、リモートディレクトリとローカルディレクトリで構成されます。 オンプレミスのファイルシステムのローカルディレクトリは、NASファイルシステムのリモートディレクトリにマッピングされます。
リモートディレクトリ
リモートNASファイルシステム内のディレクトリは、サービスがアクセスする必要があるNASファイルシステムのディレクトリを指します。 ディレクトリは、マウント対象と絶対ディレクトリで構成されています。 Apsara File Storage NASコンソールでマウントターゲットを追加できます。 マウントターゲットと絶対ディレクトリをリモートディレクトリにアセンブルできます。 たとえば、NASファイルシステムのマウントターゲットがxxxx-nas.aliyuncs.comで、絶対ディレクトリが /workspace/documentの場合、リモートディレクトリはxxxx-nas.aliyuncs.com:/workspace/documentになります。
NASコンソールにログインできます。 ファイルシステムリストで、目的のファイルシステムをクリックし、[マウントターゲット] をクリックしてマウントターゲットを取得します。
関数のローカルディレクトリ
関数ランタイムのローカルディレクトリは、ローカルファイルシステムのマウントターゲットを指します。 /bin、/opt、/var、/devなどの一般的なLinuxまたはUnixシステムディレクトリまたはそのサブディレクトリを使用しないでください。 Function Computeでは、/mnt、/home、/dataなどの非システムディレクトリを使用してNASファイルシステムをマウントできます。
関連ドキュメント
NASストレージのシナリオとFunction Computeのストレージタイプの違いの詳細については、「関数ストレージの選択」をご参照ください。