Compute Engine での Google Cloud Storage マウント方法まとめ



# 背景
Google Compute Engine(GCE) を利用しているなかで、Google Cloud Storage(GCS) をファイルシステムとして扱いたい(マウントしたい) 機会がありました。
Windows/Linux、それぞれのインスタンスへのマウント成功まで試行錯誤したことから、どなたかの参考になればと思い記事としてまとめました。

#### 注記
本記事にて、Google Compute Engine(GCE) と Google Cloud Storage(GCS) を扱いますが、これらの説明は省略させていただきます。簡単な説明や公式ページのリンクを参考情報としてページ最下部に記載しておりますので、必要に応じてご参照ください。
また、記載時点(2023/03)の情報となりますので、最新の情報は公式ページ等のご参照をお願いいたします。

# Cloud Storage FUSE
GCEへGCSをマウントするにあたり、第一に検討されるべきものは、Cloud Storage FUSE（gcsfuse）と呼ばれる、オープンソースの FUSE アダプタです。Linux または macOS システムに Cloud Storage バケットをファイル システムとしてマウントできます。Cloud Storage FUSE は、Goolge Cloud 公式から公開されているものであり、導入および利用までのハードルや運用のリスクも低いと感じました。
詳細な情報や発生する料金などについては、下記のGoogle Cloud 公式ページにて案内されております。

https://cloud.google.com/storage/docs/gcs-fuse?hl=ja

難点としては、Linux または macOS システムが動作環境となっており、Windows システムへの対応がされていないということでしょうか。対応OS一覧やインストール手順などの情報は、GitHub より確認可能です。

https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/installing.md

# インスタンスの情報
Linux イメージ:  centos-7-v20230306
Windows イメージ: windows-server-2022-dc-v20230216

## Linux インスタンスでのGCSマウント

Cloud Storage FUSE を GCEインスタンス にインストールすることで、GCSのマウントを実現いたしました。インストールとマウントまでの手順を記載いたします。

Cloud Storage FUSE のインストール手順

####  1: リポジトリ情報の登録 (該当ファイルの作成/追記)
```/etc/yum.repos.d/gcsfuse.rep
[gcsfuse]
name=gcsfuse (packages.cloud.google.com)
baseurl=https://packages.cloud.google.com/yum/repos/gcsfuse-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
       https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
```
#### 2: パッケージのインストール
```
sudo yum install gcsfuse
```

#### 3: マウントの実施
gcsfuseコマンド実行時点で、該当のバケットへの必要な権限を持つサービスアカウントの認証情報(json) が必要となります。
```
export GOOGLE_APPLICATION_CREDENTIALS='サービスアカウントの認証情報(json) のパスを指定'
gcsfuse 'GCS上のバケット名' 'マウントポイント'        /* 開始 */
fusermount -u 'マウントポイント'                     /* 停止 */
```
gcsfuse コマンドの実行に問題がなければ、正常にマウントが完了しているはずです。
マウント後は速度に気になる点はあれど、特に制限はなくファイルシステムとして利用できました。

## Windows インスタンスでのGCSマウント
現時点では、残念ながら Cloud Storage FUSE は Windows には対応しておらず、GCEの Windows インスタンスにGCSをマウントする公式の手順は存在していないようでした。
下記のような解決策があるかなと考えた中で、非公式ツールではありますが、GcsFuse-Win が利用イメージに合致していましたので利用してみることにしました。
・GcsFuse-Win(非公式) を利用する
・Google Cloud に対応した、何かしらの有償ツールを利用する
・GCSバケットを Linux インスタンスにマウントし、ネットワーク Samba/NFS 経由で共有


### GcsFuse-Win(非公式)を利用する
GcsFuse-Win は、Cloud Storage FUSE の Windows版のようなものです。Cloud Storage FUSE では対応していない、GCSの Windowsへのマウントが可能であることを確認できています。
ただし、Cloud Storage FUSE と異なり GcsFuse-Win は非公式のツールであり、他パッケージのインストールも必須となりますので、導入/利用は自己責任の範囲でお願いいたします。

https://github.com/weswu8/gcsfuse-win

なお、GitHub 上の Readme には「Install blobfs-win」とありますが、誤植のようですので [blobfs-win -> GcsFuse-Win] と読み換えてよさそうです。

#### 1: 関連パッケージのインストール
・winfsp-1.7.20038.msi の導入
winfsp のVer.2にて実行すると、エラーとなってしまいましたので、過去のバージョンを利用しました。
Ver.1であれば正常に動作しそうではありますが、Readme に記載があったバージョンを導入し動作を確認いたしました。下記のリンクから直接DL可能です。
https://github.com/winfsp/winfsp/releases/download/v1.7B1/winfsp-1.7.20038.msi


#### 2: GcsFuse-Win の導入

前述のGitHubより、GcsFuse-Win をDL/解凍を行います。
設定ファイルの内容更新が必須となりますので、記載すべき内容を下記します。
```設定ファイル(bin/conf/config.xml) の更新
	<ProjectId> プロジェクトIDを記載 </ProjectId>
	<!--  Gcp service account json file --> 
	<ServiceAccountFile> サービスアカウントの認証情報(json)ファイル名を記載 </ServiceAccountFile>
	<!--  the prefix of target buckets or objects, use / will mount all buckets --> 
	<RootPrefix> マウントしたいバケット名を記載 </RootPrefix>
	<!--  the dirve letter of local host --> 
	<MountDrive> マウントする場所を指定(例[F:]) </MountDrive>
	<!--  cached object TTL in seconds --> 
	<CacheTTL> 必要に応じて変更(初期値:180) </CacheTTL>
```
サービスアカウントの認証情報(json) は、設定ファイルと同フォルダ(bin/conf) に配置しておきます。


#### 3: マウントの実施

```bin/gcsfuse-win.exe の実行
gcsfuse-win.exe 
```
設定や環境に問題がなければ、下記のようなメッセージが表示され、正常にマウントが実施されているはずです。停止すれば、同時にマウントも解除されます。
![start_stop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2651737/048d3b39-4ba4-c027-b32f-424302ceb7e4.png)
マウント後は、Cloud Storage FUSE と同様に応答速度に難ありですが、特に制限なく利用できました。

# おわりに
GCEのLinux/Windows インスタンス、どちらからもGCSをマウントすることができました。
しかし記載時点では、Windows は公式のツールや手順はなさそうであるため、本格的に利用する場合は Linux が第一候補となりそうです。今後も、GCSを様々な場面/用途で活用していきたいです。
本記事が皆様の一助となれば幸いです。

# 参考

## Google Cloud Storage とは
Google Cloud Storage（GCS）は、オブジェクトストレージです。
管理がシンプルで、高耐久性、高可用性のストレージとなります

https://cloud.google.com/storage?hl=ja

非構造化データを保存するためのマネージド サービスであり、
保存できるデータ量に制限はなく、保存したデータを必要に応じて何度でも取得できます。


## Google Compute Engine とは
Google Compute Engine（GCE）は、Google のインフラストラクチャで仮想マシンを作成して実行できる、安全性の高いカスタマイズ可能なコンピューティング サービスです。

https://cloud.google.com/compute?hl=ja

適切な仮想マシンタイプを選択することで、ワークロードとビジネス要件を満たしつつ、コストを最小限となることができます。