Object Storage Service (OSS) は、大容量、高セキュリティ、低コスト、高信頼性を備えたクラウドストレージサービスです。OSS バケットを Function Compute にマウントすることで、関数はローカルファイルシステムのように OSS とやり取りできます。これにより、リソースへのアクセスとデータ処理のワークフローが簡素化されます。
制限事項
Function Compute の関数は、同一リージョン内で最大 5 つの NAS マウントポイントと 5 つの OSS マウントポイントをサポートします。
NAS および OSS マウントポイントのローカルディレクトリは、関数の実行環境内で一意である必要があります。
NAS マウントポイントの設定に関する詳細については、「NAS ファイルシステムの設定」をご参照ください。
前提条件
Object Storage Service (OSS)
Function Compute
OSS マウント機能には、関数に OSS へのアクセス権限を付与する RAM ロールが必要です。詳細については、「関数ロールを使用して、関数に他のクラウドサービスへのアクセス権限を付与する」をご参照ください。
操作手順
ステップ 1: OSS マウントポイントの設定
Function Compute コンソールにログインします。左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーでリージョンを選択します。関数リスト ページで、対象の関数名をクリックします。
関数詳細ページで、設定 タブをクリックします。変更 の右側にある 詳細設定 をクリックします。詳細設定 パネルで ストレージ セクションを見つけ、OSS のスイッチをオンにし、パラメーターを設定してから デプロイ をクリックします。
パラメーター
説明
例
OSS マウントポイント:OSS マウントポイントを設定します。
[バケット]
既存のバケットを選択します。新規に作成する場合は、OSS バケットの作成 をクリックして OSS コンソールを開きます。OSS に関連する料金については、「OSS の課金の概要」をご参照ください。
example-bucket
Bucket のサブディレクトリ
バケット内のサブディレクトリを指定します。これは絶対パスである必要があります。空のままにするか、/ に設定すると、バケットのルートディレクトリがマウントされます。
/files
OSS アクセスアドレス
バケットを選択すると、システムが自動的にそのエンドポイントを選択します。カスタムアドレス を選択してエンドポイントアドレスを変更できます。リージョンごとの OSS エンドポイントのリストについては、「リージョンとエンドポイント」をご参照ください。
説明バケットとご利用の Function Compute 関数が同じリージョンにある場合は、内部エンドポイントを使用してください。
バケットが異なるリージョンにある場合は、パブリックエンドポイントを使用してください。これにはアウトバウンドデータ転送料金が発生します。
デフォルトのエンドポイント
関数ローカルディレクトリ
関数の実行環境内のローカルディレクトリを指定します。ディレクトリは /home、/mnt、または /data のサブディレクトリである必要があります。
/mnt/oss
関数ローカルディレクトリの権限
ローカルディレクトリの権限を選択します。読み取り専用 または 読み取りと書き込み を選択できます。
読み取り/書き込み
説明OSS マウント機能は、関数のネットワーク設定に依存します。関数が VPC のみにアクセスするように設定されており、関数がデフォルトで NIC のインターネットアクセスを許可する が × に設定されている場合、パブリック OSS エンドポイントを使用するには、関数が指定された VPC を介してインターネットにアクセスできる必要があります。詳細については、「固定パブリック IP アドレスの設定」をご参照ください。
ステップ 2: マウントされたディレクトリ内のファイルへのアクセス
OSS マウントポイントを設定した後、マウントされたディレクトリ内のファイルにローカルファイルのようにアクセスできます。
関数詳細ページで、コード タブをクリックします。エディターでコードを記述し、デプロイメントコード をクリックします。
次のコードは一例です。
import os def handler(event, context): # Mount directory mount_path = '/mnt/oss' # List files in the mount directory files = os.listdir(mount_path) print("Files in OSS mount:", files) # Read a specific file from the mount 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 mount 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は、マウントされた OSS ディレクトリに実際に存在するファイル名に置き換えてください。コードがデプロイされたら、関数のテスト タブで コード をクリックします。
実行が完了すると、コード タブの下部で結果を確認できます。ログ出力 タブには、OSS ディレクトリから読み取られた
example.txtファイルの内容が表示されます。また、OSS コンソールに移動して、output.txtファイルが対応するマウントディレクトリに書き込まれたことを確認することもできます。
よくある質問
OSS マウントエラー:bucket not found
OSS のアクセスエンドポイントとバケット名が正しいことを確認してください。
OSS マウントエラー:host resolv error または deadline exceeded
エンドポイントアドレスが正しいことを確認してください。
エンドポイントアドレスが解決できない場合、
host resolv errorが発生します。内部エンドポイントはリージョンをまたいで使用できません。異なるリージョンの関数に内部エンドポイントを使用すると、接続タイムアウトが発生し、
deadline exceededエラーが発生します。
マウントエラー:invalid credentials
関数に設定された RAM ロールに、OSS にアクセスするために必要な権限があることを確認してください。詳細については、「関数ロールを使用して、関数に他のクラウドサービスへのアクセス権限を付与する」をご参照ください。必要な権限は次のとおりです:
読み取り専用:
oss:ListObjectsおよびoss:GetObject権限が必要です。読み取りと書き込み:
oss:ListObjects、oss:GetObject、oss:PutObject、oss:DeleteObject、oss:ListParts、およびoss:AbortMultipartUpload権限が必要です。
oss:ListObjects アクションはバケットレベルで実行されます。したがって、特定のバケットへのアクセスを許可する場合、権限ポリシーには acs:oss:*:*:bucketName のようなバケットレベルのリソース ARN を含める必要があります。詳細については、「OSS リソース」をご参照ください。
マウントされたファイルの読み取り時の Input/output error
ご利用の OSS バケットのストレージクラスを確認してください。ストレージクラスがアーカイブまたはコールドアーカイブの場合、バケット内のオブジェクトは凍結ステータスにあり、アクセスする前に解凍する必要があります。OSS バケットのストレージクラスを標準に設定してください。
ローカルディレクトリ内のファイルを表示する方法
関数詳細ページで、インスタンス タブをクリックします。実行中 状態のインスタンスのリストからインスタンスを選択し、操作 列の インスタンスに接続 をクリックします。
インスタンスに接続した後、コマンドを実行して、設定されたローカルディレクトリ内のファイルに関する情報を表示できます。例:

マウントポイントへのアクセスエラー:Transport endpoint is not connected
このエラーは、メモリ不足により OSS マウント機能が失敗した場合に発生します。これは、メモリ仕様が低いか、メモリ使用量が高いことが原因である可能性があります。ビジネスニーズに応じて、関数のメモリ仕様を増やしてください。OSS マウントポイントを使用する場合は、最低 512 MB を推奨します。
関数ディレクトリにおけるデータの永続性
関数ディレクトリに書き込まれたデータは、関数インスタンスが削除されると削除されます。データの永続性を確保するには、NAS ファイルシステムまたは OSS バケットをマウントします。詳細については、「NAS ファイルシステムの設定」および「OSS マウントの設定」をご参照ください。
バケットへの読み取り専用アクセス
バケットへの読み取り/書き込みアクセス
サブディレクトリへの読み取り専用アクセス
サブディレクトリへの読み取り/書き込みアクセス
書き込み操作中にファイルが空に見える
OSS マウントポイントを介してファイルに書き込む場合、通常、flush() メソッドを明示的に呼び出すか、ファイルを閉じた後にのみ、コンテンツが OSS にアップロードされます。
圧縮またはファイル転送のパフォーマンス低下
OSS はネイティブではファイルシステム API をサポートしていません。OSS バケットをディレクトリとしてマウントすると、Function Compute は OSS API を組み合わせてラップすることで、ファイルシステム API の動作をエミュレートします。たとえば、OSS はランダム書き込みをサポートしていないため、OSS マウントポイント上の既存のファイルを変更するには、Function Compute が OSS からソースファイル全体をダウンロードし、変更してから再アップロードする必要があります。
シーケンシャルなファイルの読み書きなど、ファイルシステム API が OSS API 関数に直接対応する操作では、パフォーマンスは一般的に良好です。ただし、ファイルの圧縮または展開で使用されるランダムな読み書き操作など、複数の OSS API を組み合わせる必要がある操作は、OSS との多数のやり取りを伴うため、ローカルファイルシステムよりも低速になります。
関数インスタンス間の同期
いいえ。関数インスタンスは互いに独立しているため、OSS マウントポイントへのアクセスはインスタンス間で同期されません。たとえば、インスタンス A がマウントポイントにファイルを作成しても、インスタンス B はそのファイルをすぐには認識できない場合があります。