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

Function Compute:OSSファイルシステムの設定

最終更新日:Sep 04, 2024

Object Storage Service (OSS) は、安全で費用対効果が高く、信頼性の高いクラウドストレージサービスです。 OSSでは、大量のデータをクラウドに保存できます。 Function ComputeのサービスにOSSバケットをマウントして、サービス内の関数がオンプレミスのファイルシステムへのアクセスと同様の方法でOSSバケットにアクセスできるようにします。 これにより、リソースアクセスとデータ処理が簡素化されます。

制限事項

  • リージョン内のFunction Computeのサービスに対して、最大5つのApsara File Storage NAS (NAS) マウントターゲットと5つのOSSマウントターゲットを設定できます。

  • NASマウントターゲットの関数ランタイムのローカルディレクトリは、OSSマウントターゲットの関数ランタイムのローカルディレクトリと同じにすることはできません。

    NASマウントターゲットを設定する方法の詳細については、「NASファイルシステムの設定」をご参照ください。

始める前に

手順

手順1: OSSマウントの設定

Function Computeのサービスに対してOSSマウントターゲットを設定すると、サービス内のすべての関数が指定されたOSSバケット内のファイルにアクセスできます。

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

  2. 上部のナビゲーションバーで、リージョンを選択します。 [サービス] ページで目的のサービスを見つけ、[操作] 列の [設定] をクリックします。

  3. では、ストレージ設定[サービスの変更] ページのセクションで、次のパラメーターを設定し、保存 をクリックします。

    パラメーター

    説明

    OSSのマウント

    OSSマウントを有効にするかどうかを指定します。 有効な値:

    • 有効

    • 無効化

    有効にする

    OSSマウントターゲット: OSSマウントターゲットを設定します。

    バケット

    既存のバケットを選択します。 OSSバケットを作成するには、ページ下部の [OSSバケットの作成] をクリックしてOSSコンソールに移動します。 OSSの課金の詳細については、「課金の概要」をご参照ください。

    例バケット

    Bucket Subdirectory

    バケット内のサブディレクトリとして絶対パスを指定します。 このパラメーターを空のままにするか、このパラメーターを /に設定すると、バケットのルートディレクトリがマウントされます。

    /ファイル

    OSSエンドポイント

    エンドポイントを指定します。 デフォルトでは、バケットのエンドポイントが使用されます。 [カスタムエンドポイント] を選択して、カスタムエンドポイントを指定できます。 異なるリージョンのOSSエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

    説明
    • Function Computeのサービスと同じリージョンにあるバケットを選択した場合、内部OSSエンドポイントを使用することを推奨します。

    • 別のリージョンにあるバケットを選択する場合は、パブリックエンドポイントを使用する必要があります。 この場合、インターネット経由で転送されたデータに対して課金されます。

    デフォルトのエンドポイント

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

    ローカル関数ディレクトリを指定します。 ディレクトリは、/home/mnt、または /dataのサブディレクトリである必要があります。

    説明

    ローカル関数ディレクトリを手動で作成する必要はありません。 既存のディレクトリを直接使用できます。

    /mnt/oss

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

    バケットがローカル関数ディレクトリにマウントされた後、ディレクトリに対する権限を指定します。 読み取り専用または読み取りと書き込みを選択できます。

    読み取りと書き込み

    説明

    OSSマウント機能は、サービスのネットワーク設定によって異なります。 VPCへのアクセス[はい] に設定し、インターネットへのアクセス[いいえ] に設定した場合、パブリックOSSエンドポイントを使用して、関数が指定されたVPC経由でインターネットにアクセスできるようにする必要があります。 詳細については、「静的パブリックIPアドレスの設定」をご参照ください。

手順2: 関数を作成し、マウントされたOSSディレクトリにアクセスするためのコードを記述する

OSSバケットをマウントした後、次の手順を実行して、オンプレミスファイルへのアクセスと同様の方法で、マウントされたOSSディレクトリ内のファイルにアクセスできます。

  1. [関数の作成] ページで、次のパラメーターを設定します。 他のパラメーターのデフォルト値を保持し、[作成] をクリックします。

    • 関数を作成するメソッド: 組み込みランタイムを使用

    • 基本設定: [関数名] を設定し、[ハンドラータイプ][イベントハンドラー] に設定します。

    • Code: RuntimePython 3.10に設定し、Code Upload Methodサンプルコードに設定します。

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

    次のサンプルコードは、Pythonで関数コードを記述する方法の例を示しています。

    import os
    
    
    def handler(event, context):
        # Mounted directory.
        mount_path = '/mnt/oss'
        
        # List files in the mounted directory.
        files = os.listdir(mount_path)
        print("Files in OSS mount:", files)  
        # Read a file in the mounted directory.
        file_path = os.path.join(mount_path, 'example.txt')
        if os.path.exists(file_path):
            with open(file_path, 'r') as file:
                content = file.read()
                print("Content of example.txt:", content)
        else:
            print("example.txt does not exist.")
        # Write a file to the mounted directory.
        write_path = os.path.join(mount_path, 'output.txt')
        with open(write_path, 'w') as file:
            file.write("Hello, OSS mount!")
            print("Wrote to output.txt in OSS mount.")
        
        return "Function execution completed."
      
    説明

    example.txtを、マウントされたディレクトリ内の既存のファイルの名前に置き換えます。

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

    実行が完了したら、[コード] タブの下部に実行結果を表示できます。 [ログ出力] タブでは、ディレクトリで読み取られたファイル (この例ではexample.txt) の内容を表示できます。 ディレクトリに書き込まれたファイルの内容 (この例ではoutput.txt) を表示することもできます。

よくある質問

OSSのマウントが失敗し、bucket not foundエラーが報告された場合はどうすればよいですか。

OSSエンドポイントとバケット名が正しいかどうかを確認します。

OSSのマウントが失敗し、host resolvエラーまたはdeadline exceededエラーが報告された場合はどうすればよいですか。

エンドポイントが正しく設定されているかどうかを確認します。

  • エンドポイントのドメイン名の解決に失敗した場合、host resolvエラーが報告されます。

  • 内部エンドポイントはリージョン間では使用できません。 別のリージョンで内部エンドポイントを使用すると、接続タイムアウトエラーが発生し、期限超過エラーが報告されます。

OSSのマウントが失敗し、無効な資格情報エラーが報告された場合はどうすればよいですか。

サービス用に設定したRAMロールにOSSの権限があるかどうかを確認します。 次の項目は、権限について説明します。 詳細については、「他のAlibaba Cloudサービスへのアクセス権限付与」をご参照ください。

  • 読み取り専用: oss:ListObjectsおよびoss:GetObject

  • 読み取りと書き込み: oss:ListObjectsoss:GetObjectoss:PutObjectoss:DeleteObjectoss:ListParts、およびoss:AbortMultipartUpload

説明

oss:ListObjectsはバケットレベルのアクションです。 特定のバケットへのアクセスを有効にする場合、ポリシーにacs:oss:*:*:bucketNameなどのバケットレベルのリソース表示を含める必要があります。 詳細については、「OSSのRAMポリシーのリソース要素」をご参照ください。

マウントされたディレクトリ内のファイルを読み込んだときに入出力エラーが報告された場合、どうすればよいですか?

設定したOSSバケットのストレージクラスを確認します。 ストレージクラスがArchiveまたはCold Archiveの場合、バケットに保存されているすべてのオブジェクトはフリーズされ、フリーズ解除された後にのみアクセスされます。 OSSバケットのストレージクラスをStandardに設定することを推奨します。

関数のローカルディレクトリにあるファイルを表示するにはどうすればよいですか?

  1. 機能の詳細ページで、[インスタンス] をクリックして、[実行中] 状態のインスタンスを表示します。 目的のインスタンスを見つけて、[操作] 列の [ログイン] をクリックします。

    image

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

    image

関数インスタンスのマウントターゲットにアクセスしたときに、トランスポートエンドポイントが接続されていませんエラーが報告された場合の対処方法。

このエラーは、メモリが不足しているためにOSSマウント機能が使用できなくなった場合に報告されることがあります。 ビジネス要件に基づいて、関数のメモリ仕様を増やすことを推奨します。 OSSマウントターゲットを使用する場合は、メモリ容量を512 MB以上に設定します。

ローカル関数ディレクトリに書き込まれたデータは永続的に保存されますか?

関数インスタンスが破壊されると、そのインスタンスによってディレクトリに書き込まれたデータも削除されます。 データを永続的に保存する場合は、NASファイルシステムやOSSバケットなどのファイルシステムをマウントすることを推奨します。 詳細については、「NASファイルシステムの設定」および「OSSファイルシステムの設定」をご参照ください。

権限ポリシーを使用して、指定されたバケットへの読み取り専用アクセスのみを許可するにはどうすればよいですか?

サンプルポリシーを表示するには、展開します。 例のbucketNameをバケットの実際の名前に置き換えます。 詳細については、「RAMポリシーの概要」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListObjects",
        "oss:GetObject"
      ],
      "Resource": [
        "acs:oss:*:*:bucketName",
        "acs:oss:*:*:bucketName/*"
      ],
      "Effect": "Allow"
    }
  ]
}

権限ポリシーを使用して、指定されたバケットへの読み取りおよび書き込みアクセスを許可するにはどうすればよいですか。

サンプルポリシーを表示するには、展開します。 例のbucketNameをバケットの実際の名前に置き換えます。 詳細については、「RAMポリシーの概要」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "oss:ListObjects",
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:AbortMultipartUpload",
        "oss:ListParts"
      ],
      "Resource": [
        "acs:oss:*:*:bucketName",
        "acs:oss:*:*:bucketName/*"
      ],
      "Effect": "Allow"
    }
  ]
}

権限ポリシーを使用して、指定したバケットのサブディレクトリへの読み取り専用アクセスのみを許可するにはどうすればよいですか?

サンプルポリシーを表示するには、展開します。 例のbucketNameをバケットの実際の名前に置き換え、bucketPathをバケットのサブディレクトリに置き換えます。 詳細については、「RAMポリシーの概要」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Action": "oss:ListObjects",
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "bucketPath/*"
          ]
        }
      }
    },
    {
      "Action": [
        "oss:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName/bucketPath/*"
      ]
    }
  ]
}

権限ポリシーを使用して、指定したバケットのサブディレクトリへの読み取りおよび書き込みアクセスを許可するにはどうすればよいですか。

サンプルポリシーを表示するには、展開します。 例のbucketNameをバケットの実際の名前に置き換え、bucketPathをバケットのサブディレクトリに置き換えます。 詳細については、「RAMポリシーの概要」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Action": "oss:ListObjects",
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName"
      ],
      "Condition": {
        "StringLike": {
          "oss:Prefix": [
            "bucketPath/*"
          ]
        }
      }
    },
    {
      "Action": [
        "oss:GetObject",
        "oss:PutObject",
        "oss:DeleteObject",
        "oss:AbortMultipartUpload",
        "oss:ListParts"
      ],
      "Effect": "Allow",
      "Resource": [
        "acs:oss:*:*:bucketName/bucketPath/*"
      ]
    }
  ]
}

OSSのOSSマウントターゲットから書き込むデータが表示されない場合はどうすればよいですか。

OSSマウントターゲットからファイルを書き込むと、フラッシュ操作を呼び出すかファイルを閉じるときにのみ、システムはコンテンツをOSSにアップロードします。

OSSマウントターゲットでの圧縮、解凍、ファイル送信などの操作が遅い場合はどうすればよいですか。

OSSはファイルシステムAPIをサポートしていません。 OSSバケットをディレクトリとしてマウントした後、Function ComputeはOSS APIをカプセル化してファイルシステムAPIを実装します。 たとえば、OSSはランダム書き込みをサポートしていません。 ファイルシステムAPIを使用してOSSマウントターゲット上の既存のファイルを変更する必要がある場合、Function ComputeはOSSからソースファイルをダウンロードし、ファイルを書き換えてから再度OSSにアップロードします。

ファイルシステムAPIの機能がOSS APIの機能に対応する場合 (ファイルのシーケンシャルな読み取りおよび書き込み機能など) 、通常は一般的な操作のパフォーマンスが向上します。 ただし、圧縮および解凍中のファイルに対するランダムな読み取りおよび書き込み操作など、OSS APIを組み合わせてカプセル化する必要がある操作では、OSSとの複数の操作が必要になる場合があります。 したがって、パフォーマンスはオンプレミスのファイルシステムのパフォーマンスに比べてわずかに劣ります。

同じOSSターゲット上の関数インスタンス間で操作が同期されますか。

いいえ。 関数インスタンスは互いに独立しています。 インスタンスによってアクセスされるOSSマウントターゲットのコンテンツは異なる場合があります。 たとえば、インスタンスAがOSSマウントターゲットにファイルFを作成した場合、インスタンスBはすぐにファイルにアクセスできない場合があります。