Cloud Storage FUSE

このページでは、Cloud Storage FUSE の概要について説明します。Cloud Storage FUSE は、Cloud Storage バケットをローカル ファイル システムとしてマウントしてアクセスできるようにする FUSE アダプタです。これにより、アプリケーションは、標準のファイル システムのセマンティクスを使用して、バケット内のオブジェクトの読み取りと書き込みを行うことができます。

このドキュメントには、常に Cloud Storage FUSE の最新バージョンが反映されています。最新バージョンの詳細については、GitHub の Cloud Storage FUSE のリリースをご覧ください。

概要

Cloud Storage FUSE は、Google がサポートするオープンソース プロダクトです。Cloud Storage FUSE は、FUSE と Cloud Storage API を使用して、バケットをファイル システム上にローカルにマウントされたフォルダとして透過的に公開します。

Cloud Storage FUSE は、他の Google Cloud サービスと統合されています。たとえば、Cloud Storage FUSE CSI ドライバでは、Google Kubernetes Engine(GKE)API を使用してバケットをボリュームとして使用できるため、Cloud Storage からの読み取りと Cloud Storage への書き込みは Kubernetes Pod 内から行えます。他の統合の詳細については、統合をご覧ください。

Cloud Storage FUSE の仕組み

Cloud Storage FUSE は、オブジェクト ストレージの名前をディレクトリのような構造に変換し、オブジェクト名の中のスラッシュ文字(/)をディレクトリの区切りとして扱います。共通の接頭辞を持つオブジェクトは同じディレクトリ内のファイルとして扱われるため、アプリケーションはマウントされたバケットをファイル システムのように操作できます。階層型名前空間を使用して、オブジェクトを論理ファイル システム構造に編成することもできます。これにより、オブジェクトをフォルダに編成できます。

Cloud Storage FUSE は、Google Kubernetes Engine、Compute Engine VM、オンプレミスのシステムなど、Cloud Storage に接続されたあらゆる場所から実行できます。

Cloud Storage FUSE のユースケース

Cloud Storage FUSE は、ファイル システムのセマンティクスを必要とするアプリケーションに対して、Cloud Storage に適切なパフォーマンス特性とスケーラビリティ特性のあるユースケースに最適です。たとえば、Cloud Storage FUSE は、データ、モデル、チェックポイント、ログを Cloud Storage に直接格納できるので、機械学習(ML)プロジェクトに役立ちます。詳細については、ML ワークロード用の Cloud Storage FUSE をご覧ください。

ML に適した Cloud Storage FUSE

Cloud Storage FUSE は、ML トレーニングとモデルデータを Cloud Storage のオブジェクトとして保存してアクセスすることを検討しているデベロッパーにとって一般的な選択肢です。Cloud Storage FUSE には、ML プロジェクトの開発に次のようなメリットがあります。

  • Cloud Storage FUSE では、Cloud Storage バケットをローカル ファイル システムとしてマウントできます。これにより、標準のファイル システム セマンティクスを使用して、アプリケーションでトレーニング データやモデルデータにアクセスできます。つまり、Cloud Storage を使用して ML データを保存するときに、アプリケーションのコードの書き換えやリファクタリングを行う必要がありません。

  • トレーニングから推論まで、Cloud Storage FUSE は Cloud Storage の優れたスケーラビリティ、パフォーマンス、費用対効果を活用して、ML ワークロードを大規模に実行できます。

  • Cloud Storage FUSE では、Cloud Storage のデータに直接アクセスできるコンピューティング リソースが提供されるため、トレーニング ジョブをすぐに開始できます。コンピューティング リソースにトレーニング データをダウンロードする必要はありません。

詳細については、Cloud Storage FUSE でサポートされているフレームワーク、オペレーティング システム、アーキテクチャをご覧ください。

フレームワーク、オペレーティング システム、アーキテクチャ

Cloud Storage FUSE は、次のフレームワークで検証されています。

  • TensorFlow V2.x

  • TensorFlow V1.x

  • PyTorch V2.x

  • PyTorch V1.x

  • JAX 0.4.x

Cloud Storage FUSE は、次のオペレーティング システムとアーキテクチャをサポートしています。

  • Rocky Linux 8.9 以降

  • Ubuntu 18.04 以降

  • Debian 10 以降

  • CentOS 7.9 以降

  • RHEL 7.9 以降

  • SLES 15 以降

  • x86_64

  • ARM64

Cloud Storage FUSE と Google Cloud プロダクトの統合

Cloud Storage FUSE は、次の Google Cloud プロダクトと統合されています。

プロダクト Cloud Storage FUSE との統合方法
Google Kubernetes Engine(GKE)

Cloud Storage FUSE CSI ドライバは、Cloud Storage FUSE と Kubernetes API の統合を管理し、Cloud Storage バケットをボリュームとして使用します。Cloud Storage FUSE CSI ドライバを使用すると、バケットをファイル システムとして Google Kubernetes Engine ノードにマウントできます。

Vertex AI Training

Vertex AI でカスタム トレーニングを行うときは、マウントされたファイル システムとして Cloud Storage バケットからデータにアクセスできます。詳細については、トレーニング コードを準備するをご覧ください。

Vertex AI Workbench

Vertex AI Workbench インスタンスには Cloud Storage とのインテグレーションが含まれています。JupyterLab インターフェースから Cloud Storage 内のバケットを参照し、互換性のあるファイルを操作できます。Cloud Storage とのインテグレーションにより、Vertex AI Workbench インスタンスと同じプロジェクト内でインスタンスがアクセスできるすべての Cloud Storage バケットとファイルにアクセスできます。インテグレーションを設定するには、JupyterLab で Cloud Storage バケットとファイルにアクセスする方法に関する Vertex AI Workbench の手順をご覧ください。

Deep Learning VM Image

Cloud Storage FUSE には、Deep Learning VM Image がプリインストールされています。

Deep Learning Containers

Deep Learning Containers の Cloud Storage バケットをマウントするには、Cloud Storage FUSE CSI ドライバ(推奨)を使用するか、Cloud Storage FUSE をインストールします。

Batch

Cloud Storage FUSE を使用すると、バッチジョブを作成して実行するときに、Cloud Storage バケットをストレージ ボリュームとしてマウントできます。ジョブの定義でバケットを指定すると、ジョブの実行時にそのバケットがジョブの VM に自動的にマウントされます。

Cloud Run

Cloud Run を使用すると、Cloud Storage バケットをボリュームとしてマウントし、バケットの内容をコンテナ ファイル システム内のファイルとして表示できます。ボリューム マウントを設定するには、Cloud Storage ボリュームをマウントするをご覧ください。

Cloud Composer

環境を作成するときに、Cloud Composer は、Cloud Storage バケット内の特定のフォルダにワークフローとその依存関係のソースコードを保存します。Cloud Composer は Cloud Storage FUSE を使用して、バケット内のフォルダを Cloud Composer 環境の Airflow コンポーネントにマッピングします。

Cloud Storage と統合されている Google Cloud プロダクトの一覧については、通常、Google Cloud サービスとツールの統合をご覧ください。

キャッシュ

Cloud Storage FUSE には、パフォーマンスの向上とコスト削減に役立つ 4 種類のキャッシュがあります。ファイル キャッシュ、統計情報キャッシュ、型キャッシュ、リスト キャッシュです。これらのキャッシュの詳細については、キャッシュの概要をご覧ください。

ディレクトリのセマンティクス

Cloud Storage には、フラットな名前空間を持つバケットと、階層型名前空間が有効なバケットがあります。デフォルトでは、Cloud Storage FUSE は、階層型名前空間が有効になっているバケット内の明示的に定義されたディレクトリ(フォルダ)を推測できますが、フラットな名前空間を持つバケット内の暗黙的に定義されたディレクトリを推測することはできません。暗黙的に定義されたディレクトリには、シミュレートされたフォルダマネージド フォルダが含まれます。

たとえば、my-directory/my-object.txt という名前のオブジェクトを含む my-bucket という名前のバケットをマウントするとします。ここで、my-directory/ はシミュレートされたフォルダです。バケット マウント ポイントで ls を実行すると、デフォルトでは、Cloud Storage FUSE はシミュレートされたディレクトリ my-bucket/my-directory/ またはその中のオブジェクト my-object.txt にアクセスできません。Cloud Storage FUSE がシミュレートされたフォルダとその中のオブジェクトを推測できるようにするには、フラットな名前空間バケットをマウントするときに、gcsfuse mount コマンドの一部として --implicit-dirs オプションを含めます。--implicit-dirs オプションの詳細については、Cloud Storage FUSE コマンドラインのドキュメントをご覧ください。

ファイル システムを使用してデータを保存およびアクセスする必要がある場合は、階層型名前空間が有効になっているバケットを使用します。このようなバケットを作成する方法については、階層型名前空間を有効にしてバケットを作成するをご覧ください。

暗黙的に定義されたディレクトリを使用してバケットをマウントする方法など、ディレクトリ セマンティクスの詳細については、GitHub ドキュメントのファイルとディレクトリをご覧ください。

再試行方法

デフォルトでは、Cloud Storage FUSE から Cloud Storage へのリクエストが失敗した場合、このリクエストは指定された最大バックオフ期間まで指数バックオフで再試行されます。この期間のデフォルト値は 30s(30 秒)です。バックオフ時間が指定の最大時間を超えると、指定された最大時間で再試行が続行されます。--max-retry-sleep オプションを gcsfuse 呼び出しの一部として使用して、バックオフ期間を指定できます。

--max-retry-sleep オプションの詳細については、gcsfuse コマンドラインのドキュメントをご覧ください。

Cloud Storage オペレーションに関連付けられた Cloud Storage FUSE オペレーション

Cloud Storage FUSE を使用してオペレーションを行う場合、Cloud Storage FUSE オペレーションに関連付けられた Cloud Storage オペレーションも行います。次の表に、一般的な Cloud Storage FUSE コマンドと、関連する Cloud Storage の JSON API オペレーションを示します。Cloud Storage FUSE オペレーションに関する情報を表示するには、gcsfuse コマンドで --log-severity フラグを TRACE に設定します。

コマンド JSON API 操作
gcsfuse --log-severity=TRACE example-bucket mp Objects.list、認証情報の確認
cd mp 該当なし
ls mp Objects.list("")
mkdir subdir

Objects.get("subdir")

Objects.get("subdir/")

Objects.insert("subdir/")

cp ~/local.txt subdir/

Objects.get("subdir/local.txt")

Objects.get("subdir/local.txt/")

Objects.insert("subdir/local.txt")、空のオブジェクトの作成

Objects.insert("subdir/local.txt")、書き込み後に閉じる場合

rm -rf subdir

Objects.list("subdir")

Objects.list("subdir/")

Objects.delete("subdir/local.txt")

Objects.list("subdir/")

Objects.delete("subdir/")

Cloud Storage FUSE の料金

Cloud Storage FUSE は無料で利用できますが、Cloud Storage に関連して生成されるストレージ、メタデータ、ネットワーク I/O は、他の Cloud Storage インターフェースと同様に課金されます。Cloud Storage FUSE によって実行されるすべてのデータ転送とオペレーションは、Cloud Storage による転送とオペレーションにマッピングされ、状況に応じて課金されます。 一般的な Cloud Storage FUSE オペレーションと、そのオペレーションを Cloud Storage オペレーションにマッピングする方法については、オペレーション マッピングをご覧ください。

予想以上に請求額が上がることを防ぐため、Cloud Storage FUSE の使用によってどの程度の Cloud Storage の料金が発生するかを見積もっておく必要があります。たとえば、Cloud Storage FUSE でログファイルを保存する場合、ログが数百または数千のマシンで同時に積極的にフラッシュされると、直ちに料金が発生することがあります。

ストレージ、ネットワークの使用、オペレーションなどの料金については、Cloud Storage の料金をご覧ください。

制限事項

Cloud Storage FUSE は、ファイル システム インターフェースを備えていますが、バックエンドの NFS や CIFS などのファイル システムとは異なります。また、Cloud Storage FUSE は POSIX に準拠していません。Google Cloud の POSIX ファイル システム プロダクトについては、Filestore をご覧ください。

Cloud Storage FUSE を使用する場合は、POSIX ファイル システムとは異なる制限とセマンティクスに注意してください。Cloud Storage FUSE は、その機能内でのみ使用してください。

POSIX ファイル システムの制限事項と相違点

Cloud Storage FUSE の制限事項は次のとおりです。

  • メタデータ: Cloud Storage にファイルをアップロードする際に、Cloud Storage FUSE がオブジェクトのメタデータを転送することはありません。ただし、mtime ターゲットや symlink ターゲットは例外です。つまり、Cloud Storage FUSE を使用してファイルをアップロードする際に、オブジェクトのメタデータを設定することはできません。オブジェクトのメタデータを保持する必要がある場合は、Google Cloud CLIJSON API、または Google Cloud コンソールでファイルをアップロードすることを検討してください。
  • 同時実行: Cloud Storage FUSE では、同じファイルへの複数の書き込みに対して同時実行制御を行うことはできません。複数の書き込みによってファイルの置き換えが試みられた場合は、最後の書き込みが有効となり、それ以前の書き込みはすべて失われます。統合、バージョン コントロール、上書きの通知は行われません。
  • リンク: Cloud Storage FUSE はハードリンクをサポートしていません。
  • ファイルロックとファイルへのパッチ適用: Cloud Storage FUSE は、ファイルのロックやファイルへのパッチ適用をサポートしていません。バージョン管理システムはファイルのロックとパッチ適用に依存しているため、バージョン管理システムのリポジトリを Cloud Storage FUSE のマウント ポイントに保存しないでください。また、Cloud Storage FUSE をファイルの代わりとして使用しないでください。
  • セマンティクス: Cloud Storage FUSE のセマンティクスは、従来のファイル システムのセマンティクスと異なります。たとえば、最終アクセス時間などのメタデータはサポートされておらず、階層型名前空間が有効になっているバケットを使用しない限り、ディレクトリの名前変更などの一部のメタデータ オペレーションはアトミックではありません。Cloud Storage FUSE と従来のファイル システムのセマンティクスの違いの一覧については、Cloud Storage FUSE GitHub ドキュメントのセマンティクスをご覧ください。Cloud Storage FUSE が Cloud Storage のディレクトリを推定する方法については、ディレクトリ セマンティクスをご覧ください。
  • ファイルのパッチ適用(またはその場での上書き)を行うワークロード: Cloud Storage FUSE は、オブジェクト全体を一度に Cloud Storage に書き込むことのみが可能で、パッチ適用の仕組みはありません。ファイルにパッチを適用しようとすると、Cloud Storage FUSE はファイル全体を再アップロードします。この動作の唯一の例外は、2 MB 以上のファイルの末尾にコンテンツを追加できることです。この場合、Cloud Storage FUSE は追加されたコンテンツのみを再アップロードします。
  • アクセス: ファイルの承認は、Cloud Storage の権限によって管理されます。POSIX 形式のアクセス制御は機能しません。
  • パフォーマンス: Cloud Storage FUSE のレイテンシはローカル ファイル システムよりもはるかに長いため、データベースを保存するバックエンドとしては使用しないでください。サイズの小さなファイルを 1 つずつ読み取るか書き込むと、スループットが低下することがあります。サイズの大きなファイルを使用するか、複数のファイルを一括転送することで、スループットは上がりやすくなります。
  • 可用性: Cloud Storage FUSE を使用して Cloud Storage にアクセスすると、一時的なエラーが発生することがあります。失敗したオペレーションは再試行方法で再試行することをおすすめします。
  • オブジェクトのバージョニング: Cloud Storage FUSE は、オブジェクトのバージョニングが有効になっているバケットの使用を正式にサポートしていません。オブジェクトのバージョニングが有効になっているバケットで Cloud Storage FUSE を使用しようとすると、予期しない動作が発生する可能性があります。
  • ファイルのコード変換:

    メタデータに content-encoding: gzip を含むオブジェクト: Cloud Storage FUSE でマウントされたディレクトリ内のオブジェクトには、解凍トランスコーディングが実行されません。オブジェクトは、バケットに保存された方法で圧縮されたままになります。

    たとえば、--gzip-local フラグを指定した gcloud storage cp コマンドでバケットにアップロードした 1,000 バイトのファイルは、60 バイトの Cloud Storage オブジェクトとして保存されます(実際の圧縮サイズは、コンテンツと gcloud CLI で使用される gzip 実装によって異なります)。バケットが gcsfuse を使用してマウントされ、対応するファイルがマウント ディレクトリから一覧表示または読み取られると、そのサイズは 60 バイトとして返されます。そのコンテンツは、元の 1,000 バイトのコンテンツの圧縮バージョンになります。

    これは、解凍トランスコーディングを行う gcloud storage cp gs://bucket/path /local/path を使用したダウンロードとは対照的です。gcloud コマンドでは、ダウンロード中にコンテンツが自動的に解凍され、元の非圧縮コンテンツが配信されます。

  • 保持ポリシー: Cloud Storage FUSE では、保持ポリシーが設定されたバケットへの書き込みはサポートされていません。保持ポリシーが設定されたバケットに書き込もうとすると、書き込みが失敗します。

    Cloud Storage FUSE は、保持ポリシーが設定されたバケットからのオブジェクトの読み取りをサポートしていますが、バケットのマウント時に -o RO フラグを渡すことで、Read-Only としてマウントする必要があります。

  • ローカル ストレージ: 新しいまたは変更されたオブジェクトは、閉じるか同期されるまで、ローカルの一時ファイルにその全体が保存されます。サイズの大きいファイルを扱う場合には、ファイルの一時ファイルがコピーできる容量をローカルに用意してください。特に、Compute Engine インスタンスの場合は、十分な容量を確保してください。詳細については、Cloud Storage FUSE GitHub ドキュメントの README をご覧ください。
  • ファイル ハンドルの制限: デフォルトでは、Linux カーネルのオープン ファイル ハンドル数の上限は 1,024 です。複数の同時接続を処理するサーバーとして Cloud Storage FUSE を使用している場合は、この制限を超える可能性があります。問題を回避するには、単一ホストへの同時接続数が制限を下回るようにしてください。また、制限を引き上げることを検討してください。これが重要になるのは、Cloud Storage FUSE マウントを使用してウェブ コンテンツを提供するシナリオ、ネットワーク接続ストレージ(NAS)をホストするシナリオ、ファイル転送プロトコル(FTP)サーバーをホストするシナリオなどです。Cloud Storage FUSE マウントを使用して Cloud Run でウェブ コンテンツを配信する場合、インスタンスあたりの最大同時リクエスト数は 1,000 未満に制限されます。
  • rsync の制限: Cloud Storage FUSE のファイル システム レイテンシは rsync に影響します。これにより、ファイルの読み取りと書き込みは一度に 1 つしか行われません。バケット間で複数のファイルを並行して転送するには、gcloud storage rsync を実行して Google Cloud CLI を使用します。詳細については、rsync のドキュメントをご覧ください。
  • リスト オペレーションの制限事項: マウントされたバケット内のすべてのオブジェクトを一覧表示すると(ls の実行など)、Cloud Storage FUSE は Cloud Storage の Objects: list API を呼び出します。この API は結果をページ分けします。つまり、バケット内のオブジェクトの数によっては、Cloud Storage FUSE で複数の呼び出しを発行しなければならない場合があります。これにより、リスト オペレーションの費用と時間がかかる可能性があります。

既知の問題

Cloud Storage FUSE の既知の問題の一覧については、GitHub をご覧ください。

サポートを受ける

Google Cloud の公式サポート チャネルのいずれかを利用して、サポートの利用、一般的な質問の提出、新機能のリクエストを行うことができます。GitHub で問題を報告してサポートを受けることもできます。

よく発生する問題の解決方法については、Cloud Storage FUSE GitHub ドキュメントのトラブルシューティングをご覧ください。

次のステップ