Network Attached Storage (NAS) は、標準ファイルアクセスプロトコルをサポートする、信頼性と可用性の高い、分散ファイルシステムサービスです。Function Compute サービスで NAS 設定を有効化後、共有ファイルシステムにアクセスするコードをローカルファイルシステムとまったく同じ方法で書くことができます。
コンテンツ
本チュートリアルでは、NAS の読み取りと書き込みを実行する 2 つの関数を作成する方法について説明します。本チュートリアルを実行する前に、NAS アクセス を読了することが推奨されます。手順は以下のとおりです。
コンソールに NAS マウントポイントを作成
NAS コンソール にログインします。
リージョンを選択します。
右上隅にある [ファイルシステムの作成] をクリックします。
ダイアログボックスのすべてのフィールドを入力します。特に、プロトコルタイプ行で、NFS (NFSv3 と NFSv4 を含む) を選択します。
[OK] をクリックして、ファイルシステムを作成します。
作成したばかりのファイルシステムを検索し、[マウントポイントの追加] をクリックして、Function Compute がファイルシステムを使用できるようにします。
ダイアログボックスの、必須入力フィールドをすべて入力します。具体的には以下のとおりです。
マウントポイントタイプ の行で、VPC を選択していることを確認します。
「権限グループ」の行で、選択された VPC のデフォルトの権限グループ が、VPC 内のすべての IP アドレスからのアクセスを許可していることを確認します。
選択した VPC の ID を記憶します。
[OK] をクリックしてマウントポイントを作成します。
NAS 設定を使用したサービスの作成
Function Compute コンソール にログインします。
ご利用の NAS が配置されている対象リージョンを選択します。
前のセクションの ステップ 7 で作成したファイルシステムを使用するサービスを作成します。この例では:
サービス名 と 説明 を入力します。
高度な設定を有効化します。
VPC 設定 フィールドを終了し、前のセクションの ステップ 7 で使用した VPC を必ず選択してください。VPC 設定 が完了すると、NAS 設定 フィールドが表示されます。
Nas 設定 フィールドに入力します。
UserId フィールドは、関数が実行される
uid
で、NAS ファイルシステム上に作成されたファイルすべての所有者を判別します。UserIdに-1
を保持することが推奨されます。これはデフォルト値であり、ランダムな所有者を意味します。GroupId フィールドは、関数が実行される
gid
です。指定したサービス内の関数すべてが簡単に共有できるように、作成するファイルに対してgid
を選択して、グループアクセス権をオープンにすることが推奨されます。NAS マウントポイントには、選択した VPC からアクセスできる有効な NAS マウントポイントのオプションがあります。
リモートパス には、NAS ファイルシステム上のディレクトリで、ルートディレクトリである必要はありません。
ローカルマウントパス は、関数がリモートディレクトリにアクセスできるディレクトリです。
最大 5 つのディレクトリを追加できますが、必ずしも異なるマウントポイントを使用する必要はありません。
残りのサービス設定を完了します。
[OK] ボタンをクリックします。
「"NAS への書き込み"」機能の作成
このサンプルでは、Python 2.7 で書かれた関数が NAS ファイルシステム上にファイルを作成することを説明しました。 event
の root_dir
フィールドは、前のセクションの ステップ 4 で設定したローカルマウントパスの 1 つでなければなりません。NAS ファイルシステムに書き込むには、特定のクライアントを使用したり、NAS ライブラリをインポートしたりする必要はありません。
import json
import logging
import random
import string
import os
def handler(event, context):
logger = logging.getLogger()
evt = json.loads(event)
root_dir = evt["root_dir"]
sub_dir = randomString(16)
logger.info('uid : ' + str(os.geteuid()))
logger.info('gid : ' + str(os.getgid()))
file_name = randomString(6)+'.txt'
newDir = root_dir + '/' + sub_dir + '/'
content = "NAS here I come"
os.mkdir(newDir)
fw = open(newDir+file_name, "w+")
fw.write(content)
fw.close()
return sub_dir + '/' + file_name
def randomString(n):
return ''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(n))
"NAS からの読み取り" 機能の作成
同じように、Node.js で書かれた関数は、ローカルファイルからの読み込みのように NAS ファイルシステム上のファイルを読み込みます。このイベントには、"NASへの書き込み" 機能と同じ root_dir
があります。file_path
は、前述の "NAS への書き込み" 機能 呼び出しの出力です。ここでも、NAS 関連ライブラリを使用する必要はありません。
module.exports.handler = function(event, context, callback) {
var fs = require('fs');
var path = require('path');
var eventObj = JSON.parse(event.toString());
var root = eventObj["root_dir"]
var file = eventObj["file_path"]
var contents = fs.readFileSync(path.join(root, file), 'utf8');
callback(null, contents);
};
以下に"NAS への書き込み" 機能で書いたものと全く同じ呼び出し出力について示します。