GCS FUSE を使い GCE 内のディレクトリと GCS を同期させる ~Mac~
環境
MacOS X 10.15.5 (Catalina)
Homebrew 2.4.9
Google Cloud SDK 304.0.0
osxfuse 3.11.0
gcsfuse 0.30.0
GCP アカウント登録
【画像で説明】Google Cloud Platform (GCP)の無料トライアルでアカウント登録
Google Cloud SDK のインストール
Google Cloud SDK のインストール ~ 初期化
プロジェクト作成
FUSE の設定
osxfuse のインストール
$ brew cask install osxfuse
gcsfuse のインストール
$ brew install gcsfuse
パスが通らない場合はシンボリックリンクを作成
※ 冒頭に記載の環境ではインストール後自動でリンクがはられていたため下記操作は不要でした。
ln -s /usr/local/Cellar/gcsfuse/${インストールしたgcsfuseのバージョン}/bin/gcsfuse /usr/local/bin/
ln -s /usr/local/Cellar/gcsfuse/${インストールしたgcsfuseのバージョン}/sbin/mount_gcsfuse /sbin/
PC 側のセキュリティ設定
osxfuse の許可
システム環境設定 > セキュリティとプライバシー > プライバシー > フルディスクアクセス
アプリケーションにフルディスクアクセス権限を付与
システム環境設定 > セキュリティとプライバシー > プライバシー > フルディスクアクセス
から、利用するアプリケーションにチェック
下記はiTerm
とVSCode
にアクセス権限を与えている例です。
※ フルディスクアクセス権限は macOS Mojave から導入されたセキュリティ機能。
許可したアプリケーションのみ重要データにアクセスすることができるように管理。
アプリケーションの認証
アプリケーションが API にアクセスするための認証。
gcloud auth application-default login
確認
gcloud auth application-default print-access-token
Token が出力されれば OK です。
マウントするディレクトリを作成
$ mkdir ./test
GSC バケットを作成
$ BUCKETNAME='your-bucket-name'
$ gsutil mb gs://$BUCKETNAME
対象ディレクトリを GSC バケットにマウント
バケットの指定にgs://
は不要なので注意。
$ gcsfuse $BUCKETNAME ./test
確認
ファイルを作成
$ touch ./test/test.py
バケットの中身を確認
$ gsutil ls gs://$BUCKETNAME
gs://your-bucket-name/test.py
同じファイルが入っていれば OK です。
中身がある場合はどうなる?
ローカルディレクトリの中身がGCSバケットと同じ状態になります。
ローカルディレクトリにファイルなどが入っていた場合、削除されてしまったように見えますが隠れているだけです。
下記手順でマウントを解除することで元の状態にもどります。
マウントを解除
アンマウントする場合もgs://
は不要。
$ umount $BUCKETNAME
マウントしたディレクトリを削除
マウントした状態のディレクトリは削除できないので、アンマウントしてから削除するようにします。
マウント中に削除しようとすると、このようなエラーが出ます。
rm -rfi ./test
rm: test/: Resource busy
GCE上でやってみる
こちらもよろしければ
GCS FUSEを使いGCE内のディレクトリとGCSを同期させる ~GCE x Ubuntu~
おしまい
最後まで読んでいただきありがとうございました。