MacでCloud Storageをマウントする

2020.8.15 (土)

HDDがとにかく足りない。画像なんか保存しておくととにかく足りない。ということでGCPのCloud StorageをHDDのようにマウントします。

Mac上にツールをインストール

osxfuseをインストール。

$ cd ~
$ brew cask install osxfuse

すごい時間かかる。しばらく待つ。
途中でパスワード入力を促されるのでPCのログインパスワードを入力。

🍺  osxfuse was successfully installed!

が最後に表示されればOKです。
次にgcsfuseをインストール。

$ brew install gcsfuse

これもまあまあ時間がかかる。
インストールが完了したらパスが通っているか確認。

$ gcsfuse --version
gcsfuse version 0.30.0 (Go version go1.14.4)
  1. 「システム環境設定」を開き、「セキュリティとプライバシー」の中にある4つのタブのうち、1番右にある「プライバシー」を選択します。
  2. 左のペインにある項目の中から「フルディスクアクセス」を選択肢、「+」ボタンをクリックし、アプリケーション一覧の中から使用するターミナルアプリケーションを追加します。鍵がかかっている場合は左下の鍵アイコンをクリックして鍵を解除してから追加します。

GCPの認証

ここから先はgcloudコマンドがインストールされていることが前提になります。もしインストールされていない場合はインストールしましょう。gcloudから指定のGCPアカウントにアクセスできるようにしておきます。
Google Cloud SDK をMac OS X環境にインストール (gcloudコマンド)

現行で設定されているアクセス先を確認します。デフォルトでは、以下のようになっています。

$ gcloud config list
[compute]
region = us-central1
zone = us-central1-a
[core]
account = example@example.com
disable_usage_reporting = False
project = [MY_PROJECT_NAME]
Your active configuration is: [default]

別のプロジェクトに切り替える場合は、以下を設定します。(切り替える必要がない場合は、すでに上記プロジェクトが選択されているので何もしなくてよいです。)

$ gcloud config set project [MY_OTHER_PROJECT_NAME]

選択したプロジェクトのOAuth認証を行います。

$ gcloud auth application-default login

ブラウザーが開いて、指定のアカウントを選択し、許可ボタンを押します。
PC上では、

Credentials saved to file: [/Users/MY_NAME/.config/gcloud/application_default_credentials.json]

というメッセージが出ている筈です。上記にクレデンシャルが保存されています。

$ cat ~/.config/gcloud/application_default_credentials.json
{
  "client_id": "7640xxxx1850-xxxxp6gpxxxx506pxxxxuq83xxxx1hur.apps.googleusercontent.com",
  "client_secret": "d-xxxxQ19qxxxxFpd7xxxxTy",
  "quota_project_id": "xxxxxxxxxx",
  "refresh_token": "1//xxxxdL8TxxxxcCgYxxxxAGA4xxxx-L9IrxxxxsUpnxxxx5fwGxxxxFmc8xxxxlQZpxxxxDoJpxxxxx-gvw1xxxxodkb-xxxxyeQc",
  "type": "authorized_user"
}

ここまではOK。
トークンの発行を行います。ちょっと時間をおいてアクセストークンが表示されます。

$ gcloud auth application-default print-access-token
ya29.a0AfH6SMBdjOn5slMiaBb-odhxA4_5H2sFImE7pIoZ1NadE-t7qSty36IVn0PFvyag1JMXZEmUEhFmw8hvCo6mPt2tFlM76PUjwNUPDva5zxBa5kLS_35oW-ZUqadKTK67AhVFFiuMLUQY3cikuakWHGYMOK5KicbzvZU

マウント

ここまで準備ができたらマウント作業を始めます。
構文は以下です。

$ gcsfuse ${Mount先のGCSバケット} ${ローカルPC内のディレクトリ}
(例) $ gcsfuse foo-storage /Users/MY_NAME/gcp/mnt-foo-storage

PC内のパスはフルパスで指定します。
途中でセキュリティー設定で引っかかるかもしれないので、指定のアプリケーションの許可を行います。
これでGCPのストレージをマウントできました。
実際使ってみるとストレージの容量を気にしなくていいので楽は楽なんですが、HDDみたいに使えるという割には(当たり前ですが)遅い。。。

アンマウント

間違ってしまった場合やそもそもマウントをやめる際には以下です。How to unmount Google Bucket in Linux created with gcsfuse

(何故か、アンマウントはその環境のコマンドを使います。以下はMacの場合)

$ umount /Users/MY_NAME/gcp/mnt-foo-storage

PCを起動するときに自動的に起動するようにする

PCの電源切るとマウントが外れるので、自動的にマウントするようにします。通常の.appの場合はログイン項目に追加するだけですが、シェルの場合はアプリケーションとして実行するためにシェルを紐付ける必要があります。(面倒くさい)
まず、アプリケーション → Automator.app からAutomatorを起動します。次に、書類の種類を「アプリケーション」にして、左側の一覧から「シェルスクリプトを実行」を選択、右のエリアにドロップします。するとコマンドを入力するエディタが出てくるので、そこに実行したいコマンドを入れて、適当なところに.appファイルとして保存します。
(.appはクリックすると実行されるので、適度に実行のテストをしてみます。)

次にログイン項目に追加します。
システム環境設定からユーザーとグループを選択します。ログイン項目を選択します。[+]から先程保存した.appファイルを選択します。これでPC起動時に自動的にマウントされるようになります。

マウント先を追加する。マウント先を変更する

$ gcloud auth login

上記と同じ手順で認証します。
以下のコマンドでアクセス先を確認します。

$ gcloud config list