2019年5月13日月曜日

Google Cloud Storage を macOS 上にマウントして使う方法

概要

Google Cloud Storage (GCS) を macOS 上のファイルシステムにマウントして使う方法を紹介します
macOS の場合権限周りが面倒なので注意しましょう

環境

  • macOS 10.14.4
  • osxfuse 3.9.0
  • Cloud Storage FUSE 0.23.0

インストール

macOS の場合は Homebrew が使えます
osxfuse というパッケージに依存しているので事前にインストールしておきます

  • brew cask install osxfuse
  • brew install gcsfuse

PATHgcsfuse コマンドが通らなかったので自分は以下も実行しています

  • ln -s /usr/local/Cellar/gcsfuse/0.23.0/bin/gcsfuse /usr/local/bin/

fstab など mount コマンドから制御したい場合は以下も実行しましょう (今回は使いません)

  • ln -s /usr/local/Cellar/gcsfuse/0.23.0/sbin/mount_gcsfuse /sbin/

osxfuse の使用を許可する

おそらく mojave など最新のバージョンだと必須です
Homebrew でインストールした際に警告文も出ているので対応します
システムの環境設定からプライバシーの設定を開き「許可」を選択します

バケットの作成 (任意)

事前に作成できている場合は不要です
また gsutil コマンドを使うので設定がまだの場合は事前にインストールしておいてください

  • gsutil mb gs://gcsfuse-test-20190513
  • gsutil ls

でバケットが作成できているか確認しましょう
ちなみにバケット名は GCS 内でユニークなので注意してください
必要な場合は mb コマンドの -c オプションでストレージクラスを指定してください

認証する (任意)

gcsfuse アプリケーションが Google Cloud Platform にアクセスするためのトークンを取得します

  • gcloud auth application-default login

でブラウザで OAuth の画面が表示されるのでアクセスするユーザを選択してアクセスを許可しましょう

  • gcloud auth application-default print-access-token

でトークンが表示されれば OK です

マウントする

ではマウントします
マウント用のディレクトリを作成しましょう

  • sudo mkdir /gcsfuse-test
  • gcsfuse gcsfuse-test-20190513 /gcsfuse-test
Using mount point: /gcsfuse-test                              
Opening GCS connection...                                  
Opening bucket...                                             
Mounting file system...                                 
File system has been successfully mounted.

これで成功しました

  • df -h

でちゃんとファイルシステムとしてマウントされているかも確認できます

gcsfuse-test-20190513  1.0Pi    0Bi  1.0Pi     0%       0    1125899906842624    0%   /gcsfuse-test

これで OK です
試しにファイルなどを touch して GCS 側にもファイルがあるか確認してみましょう

  • touch hoge.txt

アンマウントする

アンマウントは普通に umount コマンドを実行すれば OK です

  • umount /gcsfuse-test

ディレクトリにまだいたり読み書きしてビジー状態の場合は解除してから umount してください

トラブルシューティング

マウント時に以下のエラーが出る場合は認証情報がうまく設定されていません
再度 gcloud auth application-default login でログインしてみてください

Opening GCS connection...
daemonize.Run: readFromProcess: sub-process: mountWithArgs: getConn: DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

更に以下が出る場合はマウントしようとしているパスに gcsfuse でアクセスできる権限が付与されているか確認してください
もしくはシステム環境設定でちゃんと osxfuse の使用が許可されているか確認してください

daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: loadOSXFUSE: exit status 1

最後に

macOS 上で gcsfuse を使ってみました
ポイントはやはり権限周りで特に osxfuse の利用を許可するところで少しハマりました
使ってみた感じとしてはネットワークのレイテンシーがある分重いですが十分使えると思います
軽量なファイルであればそこまで気にならないと思いますが重いファイルであれば ls なども時間がかかるので頻繁にアクセスするのは避けたほうが良いと思います
基本は日時バックアップなどのディレクトリとして一日一回更新するようなファイルの置き場に使うのが良いと思います

参考サイト

0 件のコメント:

コメントを投稿