このページでは、Cloud Storage FUSE を使用して Cloud Storage バケットをローカル ファイル システムにマウントする方法について説明します。
始める前に
バケットをマウントするには、まず次のタスクを完了する必要があります。
必要なロールを取得する
バケットをマウントするには、バケットに対するストレージ オブジェクト閲覧者(roles/storage.objectViewer
)ロールを付与するようバケットのオーナーに依頼してください。バケットを自分で作成した場合、バケットにはすでにストレージ管理者(roles/storage.admin
)ロールが付与されているため、ストレージ オブジェクト閲覧者ロールは必要ありません。
ストレージ オブジェクト閲覧者の事前定義ロールには、バケットのマウントに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
storage.objects.list
カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。
バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。
Cloud Storage FUSE をインストールする
まだインストールしていない場合は、Cloud Storage FUSE をインストールします。
Cloud Storage FUSE のリクエストを認証する
Cloud Storage への Cloud Storage FUSE リクエストを認証するには、アプリケーションのデフォルト認証情報を設定する必要があります。デフォルトでは、Cloud Storage FUSE は、構成を追加しなくても、既存のアプリケーションのデフォルト認証情報を自動的に読み込みます。
Google Cloud CLI を使用してアプリケーションのデフォルト認証情報を設定する手順は次のとおりです。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
Compute Engine 仮想マシン(VM)を作成する場合、そのサービス アカウントを使用して Cloud Storage FUSE へのアクセスを認証することもできます。
バケットをマウントする
バケットをローカル ファイル システムにマウントするには、次のコマンドを使用します。
gcsfuse GLOBAL_OPTIONS BUCKET_NAME MOUNT_POINT
ここで
GLOBAL_OPTIONS
は、マウントの設定方法を制御するために追加できるオプションです。オプションとその使用方法の詳細については、Cloud Storage FUSE CLI のオプションをご覧ください。BUCKET_NAME
は、マウントするバケットの名前です。たとえば、my-bucket
のようにします。動的マウントを行う場合は、コマンドからバケット名を除外します。MOUNT_POINT
は、バケットがマウントされるローカル ディレクトリです。例:/path/to/mount/point
。
Cloud Storage FUSE が終了したら、バケット マウント ポイントで ls
を実行することで、マウントされたバケットにアクセスできます。Cloud Storage FUSE をフォアグラウンドに残す場合(デバッグ ロギングを行う場合など)は、--foreground
フラグを指定して gcsfuse
コマンドを実行します。
マウントの例
このセクションでは、バケットをマウントするさまざまなコマンドの例を紹介します。
静的マウント
静的マウントとは、特定のバケットをマウントすることです。たとえば、my-bucket
という名前のバケットをディレクトリ /path/to/mount/point
にマウントするには、次のコマンドを実行します。
mkdir /path/to/mount/point
gcsfuse my-bucket /path/to/mount/point
動的マウント
動的マウントとは、ユーザーがアクセスできるすべてのバケットをサブディレクトリとしてマウントすることです。
動的マウントを行う場合、コマンドからバケット名を除外します。たとえば、my-bucket-1
、my-bucket-2
、my-bucket-3
という名前のバケットにアクセスできるとします。すべてのバケットをディレクトリ /path/to/mount/point
にマウントするには、次のコマンドを実行します。
mkdir /path/to/mount/point
gcsfuse /path/to/mount/point
これで、サブディレクトリとしてバケットにアクセスできます。
ls /path/to/mount/point/my-bucket-1/
ls /path/to/mount/point/my-bucket-2/
ls /path/to/mount/point/my-bucket-3/
動的にマウントされたバケットは、ルート マウント ポイントから一覧表示できません。代わりに、バケット名はリスト オペレーションの一部として指定する必要があります。
読み取り専用としてのバケットのマウント
バケットを読み取り専用としてマウントするには、-o ro
オプションを gcsfuse
コマンドに渡します。たとえば、my-bucket
という名前のバケットをディレクトリ /path/to/mount/point
に読み取り専用としてマウントするには、次のコマンドを実行します。
gcsfuse -o ro my-bucket /path/to/mount/point
バケット内のディレクトリをマウントする
デフォルトでは、Cloud Storage FUSE は、バケットのすべての内容とディレクトリ構造を含むバケット全体をマウントします。バケット内の特定のディレクトリをマウントするには、--only-dir
オプションを gcsfuse
コマンドに渡します。たとえば、ディレクトリ my-bucket/a/b
をディレクトリ /path/to/mount/point
にマウントするには、次のコマンドを実行します。
gcsfuse --only-dir a/b my-bucket /path/to/mount/point
Linux の mount
コマンドを使用してマウントする
Cloud Storage FUSE のインストールには、Linux mount
コマンドで認識されるヘルパーが含まれています。これにより、mount
コマンドを使用してバケットをマウントできます。Linux を使用している場合は、root から mount
コマンドを実行する必要があります。たとえば、次のコマンドは、my-bucket
という名前のバケットをパス /path/to/mount/point
にマウントします。
sudo mount -t gcsfuse -o rw,user my-bucket /path/to/mount/point
Linux の mount
コマンドを使用してマウントする場合、Cloud Storage FUSE CLI オプションを引数として -o
フラグに渡すことができますが、ハイフン(-
)はアンダースコア(_
)に置き換える必要があります。たとえば、implicit-dirs
ではなく implicit_dirs
を使用します。
sudo mount -t gcsfuse -o implicit_dirs my-bucket /path/to/mount/point
永続マウント
Cloud Storage FUSE のインストールには、パス /sbin/mount.gcsfuse
でシステムにインストールされるヘルパーが含まれています。このヘルパーを使用すると、/etc/fstab
ファイルを使用してマウント ポイントを作成できるため、マウントを維持できます。
たとえば、次の行が /etc/fstab
ファイルに追加されると、my-bucket
という名前のバケットのマウント ポイントがパス /mount/point
に定義されます。
my-bucket /mount/point gcsfuse rw,noauto,user
ここで
rw
オプションは、読み取り権限と書き込み権限でマウント ポイントを作成することを指定します。noauto
オプションは、起動時にファイル システムをマウントしないよう指定します。user
オプションを使用すると、/etc/fstab
ファイルで指定されたマウント ポイントを誰でも作成できます。サンプル行を/etc/fstab
ファイルに追加したら、root 以外のユーザーとしてmount /mount/point
を実行できます。
起動時にバケットを自動的にマウントする場合は、Cloud Storage FUSE が待機するように、x-systemd.requires=network-online.target
オプションまたは _netdev
オプションを /etc/fstab
エントリに含めて、マウントの前にネットワーク システムの準備を完了できるようにする必要があります。次に例を示します。
my-bucket /mount/point gcsfuse rw,x-systemd.requires=network-online.target,user
/etc/fstab
エントリに uid
や gid
、あるいはこの両方のオプションを追加すると、バケットを特定の root 以外のユーザーとして自動的にマウントできます。次に例を示します。
my-bucket /mount/point gcsfuse rw,_netdev,allow_other,uid=1001,gid=1001
Linux の mount
コマンドと同様に、/etc/fstab
ファイルでマウントに使用するフラグには、ハイフン(-
)ではなくアンダースコア(_
)を使用する必要があります。たとえば、implicit-dirs
ではなく implicit_dirs
を使用します。
フォルダを含むバケットをマウントする
複数の種類のフォルダを含むバケットをマウントできます。
マネージド フォルダを含むバケットをマウントする
マネージド フォルダを含むバケットをマウントするには、コマンドで --implicit-dirs
オプション指定します。
たとえば、my-bucket
という名前のバケットとそのマネージド フォルダをディレクトリ /path/to/mount/point
にマウントするには、次のコマンドを実行します。
gcsfuse my-bucket /path/to/mount/point --implicit-dirs
マネージド フォルダを使用してバケットをマウントする場合は、次の制限事項と考慮事項に留意してください。
空のマネージド フォルダは、マウントされたバケットには表示されません。
Cloud Storage FUSE を使用して、マネージド フォルダの IAM 権限を設定または管理することはできません。マネージド フォルダの IAM 権限を設定または管理するには、マネージド フォルダで IAM を使用するをご覧ください。
マウントされたバケット内のマネージド フォルダをコピーまたは移動するには、
cp
コマンドとmv
コマンドを使用します。マネージド フォルダをコピーまたは移動しても、元のマネージド フォルダの IAM ポリシーは新しいマネージド フォルダに保持されません。新しいマネージド フォルダに新しい IAM ポリシーを設定する必要があります。
暗黙的に定義されたフォルダを含むバケットをマウントする
暗黙的に定義されたフォルダをマウントするには、Cloud Storage FUSE コマンドの --implicit-dirs
フラグを使用します。暗黙的に定義されたフォルダは、Cloud Storage でオブジェクトとして明示的に作成されていないフォルダです。--implicit-dirs
フラグを使用すると、バケットをマウントする際にフォルダが表示されます。
たとえば、暗黙的に定義されたフォルダがあるディレクトリ /path/to/mount/point
に my-bucket
という名前のバケットをマウントするには、次のコマンドを実行します。
gcsfuse my-bucket /path/to/mount/point --implicit-dirs
階層名前空間が有効になっているバケット(フォルダを含む)をマウントする
階層名前空間が有効になっているバケット(フォルダを含む)をマウントできます。階層名前空間を持つバケットをマウントする場合は、マウントされるバケットにフォルダが表示されるように --implicit-dirs
フラグを指定する必要はありません。
たとえば、フォルダを含む my-bucket
という名前のバケットをディレクトリ /path/to/mount/point
にマウントするには、次のコマンドを実行します。
gcsfuse my-bucket /path/to/mount/point
マウント ポイントへのアクセス権限を制御する
デフォルトでは、Cloud Storage FUSE は、マウントされたバケットの内容へのアクセスを呼び出し元ユーザーにのみ許可する権限を持つバケット マウント ポイントを作成します。これは、FUSE カーネル内に実装されるセキュリティ対策です。
バケットをマウントし、他のユーザーがバケット マウント ポイントにアクセスできるようにするには、オプション -o allow_other
で mount
コマンドを root として実行します。
mount -t gcsfuse -o allow_other my-bucket /path/to/mount/point
root としてバケットをマウントしないようにするには、user_allow_other
を /etc/fuse.conf
ファイルに追加して、他のユーザーがバケット マウント ポイントにアクセスできるようにする必要があります。
マウントされたバケットにアクセスするには、呼び出し元のユーザー以外のユーザーに、必要な IAM 権限が必要です。
マウントされたバケットにアクセスするためのロール
マウントされたバケットに対して読み取りと書き込みを行うには、バケットのオーナーにバケットに対するストレージ オブジェクト ユーザー(roles/storage.objectUser
)ロールを付与するよう依頼してください。
この事前定義ロールには、マウントされたバケットからの読み取りと、マウントされたバケットへの書き込みに必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
storage.objects.create
storage.objects.delete
storage.objects.get
storage.objects.list
storage.objects.update
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。
バケットをマウント解除する
バケットをマウント解除するには、fusermount
ツールを使用します。
fusermount -u /path/to/mount/point
次のステップ
キャッシュ保存の動作を制御する方法やアクティビティを記録する方法など、Cloud Storage FUSE のパフォーマンスについて学ぶ。