😸

Cloud Storage FUSEでバケットをローカルファイルシステムとしてマウントする

2023/05/15に公開

こんにちは、クラウドエース データML ディビジョン所属の源です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。

データML ディビジョンでは活動の一環として、毎週Google Cloudの新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。
今回、ご紹介するリリースは2023年4月5日付に発表されたCloud Storage FUSEについてです。

FUSEはファイルシステムの作成が可能となるソフトウェアで、Cloud Storage FUSEはオープンソースのFUSEアダプタになります。
Cloud Storage FUSEを使用することでCloud Storageバケットをローカルファイルシステムとしてマウントしてアクセスすることができ、
標準のファイルシステムの規則、構造、操作方法を使用して、バケット内のオブジェクトを読み取り、書き込みが可能となります。
また、Cloud Storageはオブジェクトストレージですが、Cloud Storage FUSEでマウントすることでファイルシステムライクに利用することが可能です。
なお、この機能はプレビュー段階です。

参考資料:リリースノート2023年4月5日

料金

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

参考資料:Cloud Storageの料金

検証概要

上記にて説明しましたとおり、Cloud Storageバケットのマウント機能がGoogle Cloudに追加されました。
そこで今回は、どのような手順で作成していくのかを説明することを目的にGoogle Cloud上で試してみます。

手順

手順は公式ドキュメントの通りに進めます。

1.Storageバケットを作成する。BUCKET_NAMEはバケットに付ける名前に置き換えます。例: bucket-for-mount

gcloud storage buckets create gs://BUCKET_NAME

2.Cloud Storage FUSEの配布URLをパッケージソースとして追加します。

export GCSFUSE_REPO=gcsfuse-`lsb_release -c -s`
echo deb https://packages.cloud.google.com/apt $GCSFUSE_REPO main | sudo tee /etc/apt/sources.list.d/gcsfuse.list

3.Google Cloud APTリポジトリの公開鍵をインポートします。

curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

4.使用可能なパッケージのリストを更新し、Cloud Storage FUSEと、それと依存関係にあるFUSEをインストールします。

sudo apt-get update
sudo apt-get install fuse gcsfuse

5.Cloud Storage FUSE がインストールされていることを確認します。

gcsfuse -v

成功した場合、コマンドは次のような出力を返します。

gcsfuse version 0.41.12 (Go version go1.18.4)

6.gcloud auth application-default login コマンドを使用してアプリケーションのデフォルト認証情報を生成します。

gcloud auth application-default login

7.ストレージバケットをマウントするディレクトリを作成します。

mkdir $HOME/mount-folder

8.gcsfuse コマンドを使用してストレージバケットをマウントします。

gcsfuse BUCKET_NAME $HOME/mount-folder

9.下の画像を右クリックして、デスクトップなどパソコン内に保存します。
または、curlコマンドでイメージをダウンロードすることも可能です。

curl -O https://cloud.google.com/storage/images/kitten.png

alt

10.cp コマンドを使用して、保存した場所からバケットがマウントされているフォルダに画像をコピーします。

cp kitten.png $HOME/mount-folder/kitten.png

11.以下のコマンドでバケットに正常にアップロードされたことを確認します。

  • バケットがマウントされているフォルダで ls を実行します。
  • バケットの内容を一覧表示するには、gcloud storage ls コマンドを使用します。
  • Google Cloud StorageのUI上でも確認可能です!
ls $HOME/mount-folder
gcloud storage ls gs://BUCKET_NAME

alt

追加検証

以降は、公式ドキュメントには記載されていない操作も検証してみます。

検証1:ローカル環境のフォルダの下にフォルダを作成し、画像を格納を行う。Cloud Storageのバケット内にフォルダが作成されるか。

mkdir $HOME/mount-folder/internal-folder
cp kitten.png $HOME/mount-folder/internal-folder/kitten.png

結果:想定通りに作成され、画像も格納されていました。

alt

検証2:Cloud StorageのUI上で画像を削除し、ローカル環境のファイルに反映されるか。

alt

結果:画像削除後、下記コマンドで確認し、反映が確認できました。

ls $HOME/mount-folder

検証3:Cloud StorageのUI上で画像をアップロードし、ローカル環境のファイルに反映されるか。

結果:画像をアップロード後、下記コマンドで確認し反映が確認できました。

ls $HOME/mount-folder

下記コマンドによる画像の表示も上手くいきました。

eog $HOME/mount-folder/kitten.png

検証まとめ

Cloud Storageはオブジェクトストレージですが、Cloud Storage FUSE でマウントすることでファイルシステムのようにCloud Storageにアクセスやコピー、フォルダ作成することができました。

まとめ

今回の記事の内容をまとめると

  • Cloud Storage FUSEという機能が追加された
  • バケットのマウント機能が追加されたことで、ローカルファイルのように操作できるようになった

関連リリース

Discussion