MAGAZINE

ルーターマガジン

AWS

Google Cloud Strageのgsutil指南(基本の使い方)

2021.12.16
Pocket

こんにちは、アルバイトのkoyamaです。今回は様々あるストレージサービスの中でもGoogle Cloud Strage(以下GCS)のコマンドラインツールであるgsutilの基本的な使い方について解説していきます。

実行環境

今回の実行環境は以下の通りです。

  • macOS Big Sur iOS11.6
  • M1 Mac Book Pro(2020)

gsutilのインストール

gsutilの実行環境を構築

まずはgsutilが使用できる環境を作っていきます。GCSの公式サイトから自分の環境に合わせてパッケージを選びダウンロードします。今回はMacOSかつM1プロセッサの環境なので表の2番目のパッケージを選択します。

ダウンロードが終わったらファイルをホームディレクトリに移し展開します。

$ cd
$ ./google-cloud-sdk/install.sh
...

$ source ~/.zshrc

展開後はコマンドラインからインストール用のシェルを実行し、各種の設定を行えばインストール完了です。 インストール後はbashを再読み込みすることでgsutilコマンドが使用できます。

アカウント紐付け

gsutilコマンドを使用する際に、自身のgoogleアカウントを参照するように設定を行う必要があります。 今回はアカウントの紐付け方法として「ブラウザからgoogleのログイン認証を行う方法」と「サービスアカウントの秘密鍵を渡して設定する方法」の2種類を紹介します。

その1・ブラウザからgoogleのログイン認証を行う方法

簡単にアカウントの紐付けを行う方法としてgoogleのログイン認証を用いる方法が挙げられます。こちらのアカウントの紐付けはgcloudコマンドから設定を行います。

$ gcloud auth login

実行するとブラウザが立ち上がり、googleのログイン画面に切り替わります。切り替わった先でGoogle Cloud SDKからのアクセスを求められるため許可を選択すれば紐付けは完了です。

その2・サービスアカウントの秘密鍵を渡して設定する方法

また、サービスアカウントのシークレットキーを使用して認証を行う方法もあります。 こちらは意図的にアクセスの範囲を絞り込んだり、プロジェクトごとにアカウントを切り替えたい場合に有効です。

まずgsutilで扱いたいGCPプロジェクトのページへアクセスします。 アクセスが完了したらメニューから「APIとサービス」→「認証情報」の順に選択します。

サービスアカウントの一覧から使用するサービスアカウントを選択・もしくは新たにサービスアカウントを作成してください。

サービスアカウントの詳細画面から「キー」を選択後「鍵を追加」→「新しい鍵を作成」としてください。

ポップアップが表示されるので「json」を選択するとjson形式の秘密鍵がダウンロードされます。

最後にダウンロードした秘密鍵のパスを以下のgcloudのコマンドに渡すことで認証完了になります。アカウントを切り替える場合には、秘密鍵の読み込み先のパスを変えてコマンドを実行します。

$ gcloud auth activate-service-account --key-file=KEY_FILE_PATH

gsutilの基本的な使い方

gsutilはs3cliと同じようなコマンドが多く、s3に慣れている人でも違和感なく扱えます。 特に基本的なlscpのコマンドはs3と同じ操作感のため迷いなく使用できます。

バケットの参照

次に現在見られるバケットの一覧の表示をしてみます。バケットを参照したり、バケットの中のフォルダの構成を見たい場合にはlsを使用します。

$ gsutil ls
gs://hoge.appspot.com/
gs://fuga.appspot.com/
gs://foo.appspot.com/
gs://bar-firestore-backup-20210101/

各バケットのより深い階層を確認する場合にはバケットのurlを指定します。

$ gsutil ls gs://hoge_test/
gs://hoge_test/README.md
gs://hoge_test/20211031/
gs://hoge_test/20211108/

各バケットの全てのファイルを見たい場合には-rオプションを使用することで再帰的にファイルを捜索・表示してくれます

$ gsutil ls -r gs://hoge_test/
gs://hoge_test/README.md

gs://hoge_test/20211031/:
gs://hoge_test/20211031/test.csv

gs://hoge_test/20211108/:
gs://hoge_test/20211108/test.csv

他にもファイルの作成日時を見せてくれる-lオプションや、バケットの詳細を確認できる-bオプションなどがあります。

ファイルのアップロード・ダウンロード

ファイルをアップロード・ダウンロードする場合にはcpを使用します。 使い方はs3の場合と同様、先に目的のファイル後に操作後のファイルといった具合です。

#ダウンロードを行う場合
$ gsutil cp gs://hoge_test/README.md ./download.md

#アップロードを行う場合
$ gsutil cp ./README.md gs://hoge_test/upload.md 

ファイルの削除

ファイルの削除ではrmを使用します。 rmの後に対象ファイルを指定することで削除を行えます。

$ gsutil rm gs://bucket/kitten.png

ファイルの移動

mvでファイルを移動することができます。ローカルにあるディレクトリをまるごとGCSに移動したり、バケット内のディレクトリ名を変更する際に使用したりとできます。

#ローカルのディレクトリをGCSに移動
$ gsutil mv ./test_dir gs://hoge_test

#GCSにアップしたフォルダのリネーム
$ gsutil mv gs://hoge_test/test_dir gs://hoge_test/rename_dir

ファイルの中身を出力

アップロードされたファイルの中身を確認する際にawsでは

$ aws s3 cp s3://hoge_test/test.csv - | cat

このようにして標準出力に渡したものをcatに渡していました。 しかしgsutilではこの面倒なステップなく、catのみで完結します。

$ gsutil cat gs://hoge_test/test.csv

awsと比べてかなりスッキリ印象がしますね。また、直接ファイルの中身が見れるのはデータ確認の際にとてもありがたい機能です。

プロファイルの変更方法

aws cliでは事前に設定したプロファイルを切り替えることで様々なバケットにアクセスすることができます。一方でgsutilにもプロファイルに似た概念があるので紹介します。

プロファイルの作成

$ aws configure --profile hogehoge

aws cliの場合プロファイルを作成する場合このようにしてプロファイルを作成しますが、GCSの場合には以下のようになります。

$gcloud config configurations create [プロファイル名]

gsutilコマンド自体にはプロファイルを作成するコマンドはないためgcloudコマンドからプロファイル設定を作成します。この時gcloud側で紐づけたアカウント設定がgsutil側に反映される形になっています。

プロファイルの読み込み・有効化

aws cliでは--profileのオプションを指定することで明示的にプロファイルを読み込んでバケットへアクセスすることができます。一方gcsutilでは事前に使用するプロファイルをgcloudで読み込ませてからバケットへアクセスする必要があります。

$gcloud config configurations activate [プロファイル名]

↑のコマンドで先ほど作成したプロファイルを読み込ませます。また、作成したままの状態ではプロファイルの設定が空の状態なのでここから設定を行なっていきます。

$ gcloud config set project [projectID]
$ gcloud auth login

使用するデフォルトのプロジェクトidを設定し、その後アカウントの紐付けを行います。アカウントの紐付けに関しては先ほど紹介した方法を使用します。

$ gcloud config configurations list

最後に作成したプロファイルの一覧を確認する場合には↑のコマンドを入力します。この時IS_ACTIVEの欄がTrueになっているものが現在有効化されているプロファイルになります。

最後に

今回はgsutilの基本的な使用方法を紹介していきました。gsutilの使用感はs3に近く、catのような便利なコマンドもあり使いやすく感じました。一方でプロファイル設定には一癖あるため、s3と混同しないように注意深く扱う必要がありそうです。rooterではgsutilだけでなくs3についての解説記事も公開しています。合わせてご覧ください。

AWS S3バケットのミラーリング:オブジェクトを別のバケットに自動バックアップする

よくググってしまいそうなGo言語(golang)でaws-sdk-goを使ったS3操作4選

クローリングデータの納品にも使えるAWS-SDK for RubyでのS3基本操作Tips

Pocket

CONTACT

お問い合わせ・ご依頼はこちらから