すべてのプロダクト
Search
ドキュメントセンター

File Storage NAS:Function Compute関数にファイルシステムをマウントする

最終更新日:Nov 05, 2024

ファイルストレージNAS (NAS) は、Function Computeとシームレスに統合されています。 Function Compute関数にNASファイルシステムをマウントして、オンプレミスのファイルシステムにアクセスするのと同様の方法でNASファイルシステム内のファイルにアクセスできるようにすることができます。 NASを使用すると、ファイルの永続的なストレージを実装できます。 この機能により、オンプレミスディスクの制限がなくなり、さまざまな関数インスタンスでファイルを共有できます。 このトピックでは、Function Compute関数にNASファイルシステムをマウントする方法について説明します。

前提条件

制限事項

  • リージョン内のFunction Compute関数に最大5つのNASマウントターゲットを設定できます。

  • NASマウント対象の関数実行環境のローカルディレクトリは競合しません。

NASファイルシステムの設定

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[関数] をクリックします。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [関数] ページで、管理する関数をクリックします。

  3. 関数の詳細ページで、[設定] タブをクリックします。 左側のナビゲーションウィンドウで、[ストレージ] をクリックします。 [NAS] セクションで、[変更] をクリックします。 NASパネルで、次のパラメーターを設定し、[デプロイ] をクリックします。

    NASファイルシステムを設定するには、設定モードとして [自動設定] または [カスタム設定] を選択します。

    自動設定

    システムは、Alibaba-Fc-V3-Component生成という名前の汎用NASファイルシステムと、同じ名前のVPC、vSwitch、およびセキュリティグループを自動的に作成します。

    次回 [自動設定] を選択すると、前述のNASファイルシステムが既にリージョンに存在することが検出されます。 この場合、システムはファイルシステムと関連するVPC設定を再使用し、ファイルシステムを再作成しません。 VPCおよびNASの課金の詳細については、「課金」および「汎用NASファイルシステムの課金」をご参照ください。

    image

    カスタマイズ設定

    このオプションを選択した場合、NASファイルシステムを手動で選択し、ユーザー、ユーザーグループ、NASマウントターゲットなどの関連設定を設定する必要があります。

    次の表に、主要なパラメーターを示します。

    パラメーター

    説明

    ファイルストレージNAS

    既存のNASファイルシステムを選択します。

    新しいNASファイルシステムを作成するには、パラメーターの下にある [NASファイルシステムの作成] をクリックしてNASコンソールに移動します。

    重要

    NFS (Network File System) ベースのNASファイルシステムのみがサポートされています。 SMB (Server Message Block) ベースのNASファイルシステムはサポートされていません。

    01d394****

    ユーザーユーザーグループ

    カスタムユーザーIDとユーザーグループIDを入力します。 値を指定しない場合は、システムルートIDが使用されます。 具体的には、UID=0GID=0です。 詳細については、「NASユーザーとユーザーグループ」をご参照ください。

    1

    リモートディレクトリ

    • リモートディレクトリを指定します。 汎用NASファイルシステムのリモートディレクトリは /で始まる必要があります。

    • 極端なNASファイルシステムのリモートディレクトリは、/shareで始まる必要があります。

    指定したリモートディレクトリがリモートNASファイルシステムに存在しない場合、Function Computeは自動的にディレクトリを作成します。 ディレクトリの所有者は、構成した前述のユーザーおよびユーザーグループであり、アクセス許可レベルは777です。

    詳細については、「リモートディレクトリ」をご参照ください。

    /

    ローカル関数ディレクトリ

    /home/mnt/tmp、または /dataのサブディレクトリを使用することを推奨します。

    説明

    /bin/opt/var/devなどの一般的なLinuxおよびUNIXシステムディレクトリとそのサブディレクトリは使用しないでください。 さもなければ、取付けは失敗するかもしれません。

    詳細については、「ローカルディレクトリ」をご参照ください。

    /mnt/nas

    image

    説明
    • 異なる機能でNASファイルリソースを共有する場合は、これらの機能のNASマウントを設定するときに同じユーザーとユーザーグループを使用する必要があります。

    • NASにアップロードされるファイルに対する権限は、オンプレミスのファイルに対する権限と同じです。

NASファイルシステムがマウントされているかどうかの確認

NASにアクセスするための関数コードの準備

NASファイルシステムを設定した後、関数コードで指定されたパスを使用してNASファイルシステムにアクセスできます。

  1. 関数の詳細ページで、[コード] タブをクリックし、コードエディターでコードを記述し、[デプロイ] をクリックします。

    次のコードスニペットは、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))
      

取り付けの確認

  1. コードがデプロイされたら、[コード] タブの [テスト機能] をクリックします。

    コードが実行された後、[コード] タブの下部に実行結果が表示されます。 出力ログは、関数がNASファイルシステムへのデータの書き込みおよびNASファイルシステムからのデータの読み取りに成功したことを示します。

    image

  2. (オプション) データの書き込みと読み取りが完了したら、インスタンスにログインして関数のローカルディレクトリにあるファイルを表示し、照会されたNASファイルが関数のログ出力と一致しているかどうかを確認できます。

    1. 機能の詳細ページで、[インスタンス] タブをクリックし、[操作] 列の [接続] をクリックします。

      インスタンスが実行されていない場合、[コード] タブで [関数のテスト] をクリックして関数を再度実行し、インスタンスをアクティブ化できます。

      image

    2. インスタンスにログインした後、次のコマンドを実行して、関数のローカルディレクトリにあるファイルを表示できます。

      image

概念

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コンソールにログインできます。 ファイルシステムリストで、目的のファイルシステムをクリックし、[マウントターゲット] をクリックしてマウントターゲットを取得します。

    image

  • ローカルディレクトリ

    関数ランタイムのローカルディレクトリは、ローカルファイルシステムのマウントターゲットを指します。 /home/mnt/tmp、または /dataのサブディレクトリを使用することを推奨します。 /bin/opt/var/devなどの一般的なLinuxまたはUNIXシステムディレクトリまたはそのサブディレクトリを使用してNASファイルシステムをマウントすることはできません。

関連ドキュメント

NASストレージのシナリオとFunction Computeのストレージタイプの違いの詳細については、「関数ストレージの選択」をご参照ください。