CLIでのGoogle Cloud Storage操作について
Google CloudとCLI
皆さんクラウドサービス使ってますか?
クラウドサービスを使う上で欠かせないもの、それは何か…
そう、CLI操作ですね。
属人化回避のためにはIaC(Infrastructure as Code)に持ち込むのが鉄板かと思いますが、その前段であったり、PoCレベルのもので、そこまでしなくても…な時もあるかと思います。
最近はなんでもかんでもGUIベースで設定が出来てしまいますが、CLI操作が癖づけられていれば作業ログも残しやすいですよね。
これは個人的な感覚ですが、その中でもGoogle Cloudは特にCLI操作を癖づけておいたほうが何かと便利に感じます。
というわけで、これから定期的によく使うCLIコマンドをまとめたものを備忘録を兼ねて記事にしていこうと思います。
本記事はGoogle Cloud Storage編です。
Google Cloud Storageに対してのCLI操作
Google Cloud Storageに対してCLI操作を行う場合は、一応2つの選択肢があります。
一つは、gcloudツールの gcloud storage
コマンドを使う方法。
もう一つは、gsutilツールの gsutil
コマンドを使う方法です。
それぞれのドキュメントは下記の通りです。
gsutilツールの公式ドキュメントをちゃんと読んでいる聡明な皆さんにおいては常識かと思いますが、
「gsutilを使用するべきかどうか」という項目がちゃんとあって、
通常は、gsutil コマンドの代わりに gcloud storage コマンドを使用する必要があります。
と優しく記述してあります。
さらにいうと、
gsutil ツールは従来の Cloud Storage CLI であり、最小限のメンテナンスが行われます。
gsutil ツールは、Cloud Storage の新機能の使用をサポートしていません。
最速のアップロードとダウンロードを達成するには、
gcloud storage
コマンドで手動での最適化を少なくする必要があります。
とも記述してくださっています。
そもそも、 gcloud storage
コマンド自体のGAが2022年9月だったこともあり、多くのCLI戦士達が未だに gsutil
コマンドを使用していますが、これからCLI戦士を目指す方は基本的に gcloud storageコマンドを覚えれば良いです。
( gsutil
のほうがコマンドが短くて好き…な人もいるかもしれませんが)
そういった歴史もあり、 gsutil
はただの gcloud storage
のwrapperというわけでなく、別実装のような状態です。オープンソースで公開されていて、コードを見ると普通に勉強になります。(たとえば gsutil mb
コマンドはgustilのリポジトリのmb.pyの実装を参照すればわかります。)
先ほどの引用の中でアップロード・ダウンロードの速度についても言及されていますが、これはGoogle Cloud公式ブログの「gcloud コマンドラインを使用した Cloud Storage の転送速度の向上」の記事に下記言及があります。
10 GB のファイルでは、
gcloud storage
はgsutil
よりもダウンロードで 94%、アップロードで 57% 高速でした。
思っている以上の差がありますね。
まあ色々書きましたが、要するに、「gcloud storage」コマンド使おうぜということです。
gsutil
とともに生きてきた方には、 gsutil
と gcloud storage
の比較表をまとめてくださっているZennの「GAになった gcloud storage コマンドと gsutil コマンドのサブコマンドを比較してみた」の記事がウルトラおすすめです。
よく使うコマンドリスト
そんなわけで、よく使うコマンドを3つ厳選してまとめてます。
いっぱい書いたらそれはもうgcloud storageのドキュメントを読めという話になるので、このシリーズでは基本的に3〜5つに絞ることにします。頑張って覚えてみようというきっかけになれば幸いです。
gcloud sotrage buckets create
バケット作成用のコマンドです。
gcloud storage buckets create gs://my-bucket --location=asia-northeast1
のように使用します。 gs://
なURLを複数記述してまとめて作成することも可能です。
location指定がないと us
になっていることには注意が必要です。バケットにはcoldline, nearlineといったストレージクラスの設定等もありますが、これらも当然オプションで指定できます。費用にも直結するかと思うので、オプションに気を配るべきコマンドですね。
オプション等はgcloud storage buckets createの公式ドキュメントもご参照下さい。
gcloud storage cp
オブジェクトアップロード/ダウンロードに使える優れものです。マスト中のマストだと思います。
gcloud storage cp *.txt gs://my-bucket
のように使用します。
bash等のcp
コマンド同様に、コピー元(source)、コピー先(destination)の順で指定を行います。
ここでいくつかポイントがあります。
S3のような外部クラウドベンダもサポートしていること
gcloud storage cp gs://my-bucket/*.txt s3://my-bucket
--recursive
オプションを付与することでディレクトリをコピーできること
gcloud storage cp --recursive dir gs://my-bucket
などです。
このあたり、やりたいことが出てきた場合にgoogle storage cp の公式ドキュメントを参照されると良いかと思います。
gcloud storage ls
ストレージの内容を表示するコマンドです。
特定のプロジェクトのバケットのリストが見たければ( --project
の指定がない場合はデフォルトプロジェクト)
gcloud storage ls --project=my-project
バケットの中身を覗きたければ
gcloud storage ls gs://my-bucket
*
や **
によるワイルドカード指定も可能です!(下記は txt
ファイルを全て抜き出す例)
gcloud storage ls gs://my-bucket/**/*.txt
のように使用します。
オプション等はgoogle storage ls の公式ドキュメントもご参照下さい。
その他
そのほかでこれは知っておいてもいいかも、というところでいうと、
ファイル削除を行う gcloud storage rm
やファイル移動…というか主にprefix変更に使う gcloud storage mv
はぜひ知っておくと便利なシーンがあると思います。
特定の拡張子や条件に合致するファイルに対しての操作が手軽に行えるのが何よりの魅力ですね。
まとめ
今回はGoogle Cloud Storageを扱う上でよく使うCLIコマンドをまとめてみました。
gsutil
を普段使っていた…という方々は、ぜひこの機会に gcloud storage
コマンドへ移行を進めてみていただけると良いかと思います。
まだ全然GUIでやってたわ…という方々もぜひトライしてみてはいかがでしょうか。
いずれもふだんのShellの感覚で操作が出来るようにコマンドが組み立てられているので、慣れたら gcloud storage
コマンドなしの生活は考えられなくなるはず…です。
はじめのうちはChat GPT等活用してコマンドを引き出していく、でもいいと思うので、少しずつ慣れていけると良いですね。(情報が古かったりする場合もあるので注意が必要ですが)
私自身も可能な限りクセづけていければと思っています。使わないと覚えられないですからね…