サクッとgsutil(Mac)
はじめに
- Mac ユーザ (Apple Silicon)
- Unity と C# 周辺のことしかやってこなかった
- Addressables を使い始めた, Google Cloud Storage にアセットバンドルを置きたい
前提
こちらを見て homebrew のインストールを終えていること
gsutil とは
コマンドラインから HTTPS を使用して Cloud Storage にアクセスするツール
Google Cloud CLI の一部としての gsutil のインストール することを推奨されている
インストール
ターミナルを立ち上げて homebrew からインストール
brew install google-cloud-sdk
自分の環境だと次のエラーがでた
python@3.11: the bottle needs the Apple Command Line Tools to be installed.
You can install them, if desired, with:
xcode-select --install
...
Apple のコマンドラインツールを先にインストールにしてね、とのこと
どうやら本パッケージのインストールの過程で Python 3.11 もインストールするのだが、そのときに Apple のコマンドラインツールを使用するためらしい
なので次を実行 (インストールに10分ほど要した)
xcode-select --install
その後、改めて次を実行
brew install google-cloud-sdk
インストールの過程で次のような表示がされる
To add gcloud components to your PATH, add this to your profile:
for bash users
source "$(brew --prefix)/share/google-cloud-sdk/path.bash.inc"
for zsh users
source "$(brew --prefix)/share/google-cloud-sdk/path.zsh.inc"
source "$(brew --prefix)/share/google-cloud-sdk/completion.zsh.inc"
for fish users
source "$(brew --prefix)/share/google-cloud-sdk/path.fish.inc"
インストールが終わったら、環境に応じて上記の3通りから1つを選ぶ
ホームディレクトリ ~/
にある .zshrc
をテキストエディタで開く (なければ新規作成)
上記3通りから選んだコマンドを貼り付けて保存する
(下記は zsh の場合)
source "$(brew --prefix)/share/google-cloud-sdk/path.zsh.inc"
source "$(brew --prefix)/share/google-cloud-sdk/completion.zsh.inc"
これで いつでも zsh が起動したら Google Cloud CLI に必要なファイルが読み込まれるようになる
インストール直後の今回は最後に以下を実行して手動で読み込ませる
source ~/.zshrc
最後にバージョン確認コマンドで動作確認
gcloud --version
Google Cloud SDK 461.0.0
bq 2.0.101
core 2024.01.22
gcloud-crc32c 1.0.0
gsutil 5.27
アカウント連携
初期化コマンドを実行する
gcloud init
ログインすることを求められるので Y
押下
You must log in to continue. Would you like to log in (Y/n)? y
すると、ブラウザが立ち上がり Google アカウントにログインしてアクセスを許可することを求められるので従う
連携を終えると次に最初にアクセスするプロジェクトを選択するに求められるので表示された中から選んで番号を入力する
You are logged in as: [yourname@gmail.com].
Pick cloud project to use:
[1] your-project-a
[2] your-project-b
[3] your-project-c
...
Please enter numeric choice or text value (must exactly match list item): 2
使い方
代表的なコマンドをいくつか
最上層のバケットの一覧を確認する
gsutil ls
gs://bucket-a/
gs://bucket-b/
gs://bucket-c/
パスを指定すると配下のオブジェクトを確認できる
gsutil ls gs://bucket-b/
gs://bucket-b/object1
gs://bucket-b/object2
バケットのメタ情報を知りたい場合
gsutil ls -L gs://bucket-b/
Creation time: Sat, 20 Jan 2024 10:10:31 GMT
Update time: Thu, 25 Jan 2024 07:37:48 GMT
Storage class: STANDARD
Cache-Control: public, max-age=3600
Content-Length: 14904
Content-Type: application/json
Hash (crc32c): hogehoge==
Hash (md5): hogehogehoge==
ETag: mogemogemgoe=
Generation: 12345678901234567890
Metageneration: 2
ACL: []
オブジェクトの詳細情報を知りたい場合
gsutil ls -l gs://bucket-b/object1
14904 2024-01-20T10:10:31Z gs://bucket-b/object1 TOTAL: 1 objects, 14904 bytes (14.55 KiB)
本題
そもそもやりたかったこと
- Unity の Addressables を使い始めた, Google Cloud Storage にアセットバンドルを置きたい
- バケットを作ってアセットバンドル群をアップロード
- あるタイミングである同名ファイルをアップロードし直した
- なぜか更新されない...
原因はオブジェクト(ファイル)のデフォルトキャッシュ時間が3600秒(1時間)だったため
バケット配下の全てのオブジェクトのメタ情報を書き換えてキャッシュ時間を短くしたい
そこで次のコマンドを実行した (0秒はなんか怖かったので30秒に)
gsutil setmeta -r -h 'Cache-Control:public, max-age=30' gs://bucket-a
Setting metadata on gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/catalog_1.0.1.hash...
Setting metadata on gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/catalog_1.0.1.json...
/ [2 objects]
==> NOTE: You are performing a sequence of gsutil operations that may
run significantly faster if you instead use gsutil -m setmeta ...
Please see the -m section under "gsutil help options" for further
information about when gsutil -m can be advantageous.
Setting metadata on gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/prefabs_assets_all_6b45ae4ca8398a6adf904fc49f2826aa.bundle...
Setting metadata on gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/sprites_assets_all_3668aae31b55beb93a90767f8a6915d6.bundle...
Setting metadata on gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/sprites_assets_all_57aca74027df5416b1a5dc2222b60eaa.bundle...
/ [3 objects]
Operation completed over 3 objects.
メタデータを覗くと Cache-Control:public, max-age=30
になっていることを確認できる
gsutil ls -L gs://bucket-a/AAS-TEST/StandaloneOSX/AssetBundles/catalog_1.0.1.hash
Creation time: Sat, 20 Jan 2024 10:10:31 GMT
Update time: Thu, 25 Jan 2024 07:37:48 GMT
Storage class: STANDARD
Cache-Control: public, max-age=30
Content-Length: 32
Content-Type: application/octet-stream
Hash (crc32c): hogehoge==
Hash (md5): hogehogehoge==
ETag: mogemogemgoe=
Generation: 12345678901234567890
Metageneration: 2
ACL: []
実際にファイルをアップロードして30秒すぎたら更新された。
めでたし、めでたし
Discussion