Cloud Storage FUSE

Cloud Storage FUSE は、オープンソースの Fuse アダプタです。これにより、Cloud Storage バケットを、Linux または OS X システム上でファイル システムとしてマウントできます。標準のファイル システム動作を使用して Cloud Storage オブジェクトをアップロード / ダウンロードするためのアプリケーションとして使用できます。Cloud Storage FUSE は、Google Compute Engine VM やオンプレミスのシステムなど、Cloud Storage に接続されたあらゆる場所で実行できます 1

Cloud Storage FUSE は、Google で開発され、コミュニティでサポートされたオープンソース ツールです。Go で記述され、GitHub でホストされています。Cloud Storage FUSE は、Apache License で提供され、他の利用条件は適用されません。このツールは、いかなる種類の保証や条件もなしに、現状のまま配布されます。サポートはコミュニティで行われます。Server Faultgoogle-cloud-platform タグと gcsfuse タグを利用します。以前の質問と答えで、すでに回答された問題かどうかを確認してください。

技術概要

Cloud Storage FUSE は、オブジェクト ストレージの名前をファイルとディレクトリに変換し、オブジェクト名の中の「/」の文字をディレクトリの区切りとして扱うことで、共通の接頭辞を持つオブジェクトが同じディレクトリ内のファイルとして扱われるようにします。アプリケーションは、シンプル ファイル システムなどのマウントされたバケットと通信し、クラウドでほぼ無制限なファイル ストレージを実行することができます。

Cloud Storage FUSE は、ファイル システム インターフェースを備えていますが、バックエンドの NFS や CIFS などのファイル システムとは異なります。Cloud Storage FUSE は、Cloud Storage と同じ基本的特徴を持ち、同じレイテンシや単独オブジェクトのパフォーマンスを維持しながら、サイズや全体的なパフォーマンスに関して Cloud Storage のスケーラビリティを保持しています。他のアクセス方法と同様、Cloud Storage は同時実行やロックをサポートしません。たとえば、複数の Cloud Storage FUSE クライアントが同じファイルに書き込んでいる場合は最後のフラッシュが有効となります。

Cloud Storage FUSE の使用方法やリクエストの提出の詳細については、Google Cloud Platform の GitHub レポジトリをご覧ください。レポジトリでは、READMEセマンティクスインストールマウントを確認することをおすすめします。

Cloud Storage FUSE の使用

Cloud Storage FUSE のインストールや使用の詳細は、GoogleCloudPlatform/gcsfuse の GitHub レポジトリで説明されています。次の手順により、Cloud Storage FUSE のインタラクティブな使用法、つまりバケットを手動でマウンティングする方法の概要がわかります。

  1. Cloud Storage FUSE とその依存関係をインストールするための手順を実行します。

  2. Cloud Storage FUSE の認証情報を設定します。

    Cloud Storage FUSE は、アプリケーションのデフォルト認証情報に基づいて、認証情報を自動的に検出します。

    1. スコープ storage-full を設定した Google Compute Engine インスタンス上で実行している場合、Cloud Storage FUSE は Compute Engine ビルトイン サービス アカウントを使用できます。詳細については、アプリケーションでのサービス アカウントの使用を参照してください。

    2. Google Cloud SDK をインストールして gcloud auth application-default login を実行した場合は、Cloud Storage FUSE はこれらの認証情報を使用できます。

    3. 環境変数 GOOGLE_APPLICATION_CREDENTIALS をサービス アカウントの JSON キーファイルのパスに設定している場合、Cloud Storage FUSE はこの認証情報を使用できます。Google Cloud Platform Console を使用してサービス アカウントを作成する方法の詳細については、サービス アカウントの認証をご覧ください。

    複数のタイプの認証情報が指定されている場合は、アプリケーションのデフォルト認証情報の仕組みで、認証情報が使用される順番を確認してください。

  3. ディレクトリを作成します。

    $ mkdir /path/to/mount
    
  4. Google Cloud Platform Console を使用してマウントするバケットを作成します(存在しない場合)。

  5. Cloud Storage FUSE を使用してバケット(example-bucket など)をマウントします。

    $ gcsfuse example-bucket /path/to/mount
    
  6. マウントされたバケットで作業を開始します。

    $ ls /path/to/mount
    

POSIX ファイル システムとの主な違い

Cloud Storage FUSE により、ファイルベースのアプリケーションが I/O コードを再書き込みすることなく Cloud Storage を使用できるようになり、ユーザーは Cloud Storage をより効果的かつ素早く使用できるようになります。使用例としては、Cloud Storage のパフォーマンスとスケーラビリティがアプリケーションに適していて、ファイル システムのセマンティクスのみが不足している場合に理想的です。Cloud Storage FUSE が適切なソリューションであるかどうかを判断する際は、次のようなローカル ファイル システムとの違いをいくつか考慮する必要があります。

料金: Cloud Storage FUSE のアクセスは、最終的には Cloud Storage のアクセスとなります。Cloud Storage FUSE によって実行されるすべてのデータ転送とオペレーションは、Cloud Storage による転送とオペレーションにマッピングされ、状況に応じて課金されます。Cloud Storage FUSE を使用する際は、事前に下記の料金セクションで詳細を確認してください。

パフォーマンス: Cloud Storage FUSE のレイテンシは、ローカル ファイル システムよりもはるかに高くなっています。そのため、サイズの小さなファイルを 1 つずつ読み取る / 書き込むと、スループットが低下することがあります。サイズの大きなファイルを使用するか複数のファイルを一括転送することで、スループットは上がりやすくなります。

  • 各 I/O ストリームは、gsutil とほぼ同じ速さで実行されます。
  • gsutil rsync コマンドは、特にレイテンシの影響を受ける可能性があります。これは、ファイルの読み取りや書き込みを 1 つずつ行うためです。多くの場合、このコマンドでトップレベルの -m フラグを使用するほうが時間を短縮できます。
  • 小規模でランダムな読み取りは、最初のバイトまでのレイテンシによって遅くなります(Cloud Storage FUSE でデータベースを実行しないでください)。
  • ランダムな書き込みは、blob 全体の読み込み、ローカルでの blob の編集、変更された blob 全体の Cloud Storage への書き込みによって実行されます。サイズの大きなファイルへの小規模な読み取りは、想定通りに機能しますが、速度が遅く、また高額になります。

メタデータ: Cloud Storage FUSE は、Cloud Storage へのアップロードを行う際に、ファイルとともにメタデータを転送しません。これは、Cloud Storage FUSE をアップロード ツールとして使用する場合、他のアップロード方法では可能なコンテンツ タイプや acls などのメタデータの設定ができないことを意味しています。メタデータ プロパティが重要である場合は、gsutilJSON APIGoogle Cloud Platform Console の使用を検討してください。

  • Cloud Storage FUSE が mtime ターゲットや symlink ターゲットを保存する場合は例外です。

同時実行: ファイルへの複数書き込みのための同時実行制御はありません。複数の書き込みによってファイルの置き換えが試みられた場合は、最後の書き込みが有効となり、それ以前の書き込みはすべて失われます。統合、バージョン コントロール、上書きの通知は行われません。

リンク: Cloud Storage FUSE はハードリンクをサポートしていません。

動作: 一部の動作は、従来型のファイル システムとまったく同じにはなりません。例外についてはこちらをご覧ください。たとえば、最終アクセス時間などのメタデータはサポートされておらず、ディレクトリの名前変更などの一部のメタデータ オペレーションはアトミックではありません。

アクセス: ファイルの承認は、Cloud Storage の権限によって管理されます。POSIX 形式のアクセス コントロールは機能しません。

可用性: Cloud Storage などの分散型システムでは一時エラーが発生して可用性が 100% を下回ることがあります。この場合は、切り捨て型指数バックオフのガイドラインに従って再試行することをおすすめします。

ローカル ストレージ: 新しいまたは変更されたオブジェクトは、閉じるか同期されるまで、ローカルの一時ファイルにその全体が保存されます。サイズの大きいファイルを扱う場合には、ファイルの一時ファイルがコピーできる容量をローカルに用意してください。特に、Google Compute Engine インスタンスの場合は、十分な容量を確保してください。詳細については、readme ドキュメントをご覧ください。

ディレクトリ: デフォルトでは、明示的に定義されたディレクトリ(Cloud Storage に固有のオブジェクト)のみがファイル システムに表示されます。暗示的なディレクトリ(他のファイルやディレクトリのパス名の一部でしかないディレクトリ)はデフォルトでは表示されません。パス名に暗示的ディレクトリが含まれるファイルがある場合、それらのファイルはディレクトリ ツリー全体にわたって表示されません(ファイルを含む暗示的ディレクトリが表示されないため)。フラグを使用すると、この動作を変更することができます。詳細については、動作のドキュメントを参照してください。

Cloud Storage FUSE で発生する料金

Cloud Storage FUSE は無料で利用できますが、Cloud Storage に関連して生成されるストレージ、メタデータ、ネットワーク I/O は、他の Cloud Storage と同様に課金されます。予想以上に請求額が上がることを防ぐため、Cloud Storage FUSE の使用によってどの程度の Cloud Storage の料金が発生するかを見積もっておく必要があります。たとえば、Cloud Storage FUSE でログファイルを保存する場合、ログが数百または数千のマシンで同時に積極的にフラッシュされると、直ちに料金が発生することがあります。

Cloud Storage FUSE に関連して、次の料金カテゴリを把握しておいてください。

  • 標準的なオブジェクト オペレーション(作成、削除、一覧表示)は、Cloud Storage の料金ページのオペレーションセクションの説明に従って課金されます。

  • Google Cloud Storage Nearline バケットには、取得と早期削除に関する料金が設定されています。Cloud Storage の料金ページの Nearline Storage セクションをご覧ください。

  • リージョンのロケーションとマルチリージョンのロケーションの間のネットワーク下りとデータ転送では料金が発生します。Cloud Storage の料金ページのネットワーク セクションをご覧ください。

料金構成の例

Cloud Storage FUSE の使用によってどの程度の Cloud Storage の料金が発生するかを把握するため、次のコマンド シーケンスと関連する JSON API オペレーションを検討してください。--gcs.debug フラグを使用すると、オペレーションに関する情報を表示できます。

コマンド JSON API 操作
gcsfuse --gcs.debug 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/")

JSON API のオペレーション料金を使用して、クラス A のオペレーション 8 つ、クラス B のオペレーション 4 つ、無料のオペレーション 2 つからなる 14 のオペレーションの料金を計算できます。local.txt ファイルのストレージでも料金が発生します。ファイルを作成後すぐに削除すれば、料金は少額になります。12 の有料オペレーションで、コマンド シーケンスの料金は $0.000084 になります。


 
Cloud Storage FUSE は、Linux カーネル バージョン 3.10 以降でサポートされています。カーネル バージョンは、uname -a を使用して確認できます。

フィードバックを送信...

Cloud Storage ドキュメント