gsutil コマンドって何?
gsutil コマンドとは、Google Cloud Storage (GCS) を操作するためのコマンドラインツールのことです。gsutil コマンドは Google Cloud SDK をインストールすることで、利用できるようになります。今回、2部に渡って全ての gsutil コマンドの利用方法を説明します (※1)。Part 1 では、エンジニアには馴染み深い、Linux コマンドのように利用できるコマンド(ls, cp など)を中心として解説します。
※1 … 2017/10/25現在の全 gsutil コマンド (version 4.27) を解説します。ただし、本記事公開後に解説したコマンドが削除されたり、または新規コマンドが追加される可能性がありますので、ご注意ください。また、コマンドごとのオプションについては重要であると思われるものだけピックアップして解説します。
gsutil コマンド実行環境を構築する手順
gsutil コマンドの実行環境を構築するための手順を説明します。以下手順に従って実行環境のセットアップをおこなってください。今回実際にコマンドを試した環境は mac OS です。Linux 系の OS では同じように実行することが可能ですが、Windows から実行する場合には、コマンド自体は同じものを利用しますが、フォルダの区切り文字などは異なるので気をつけましょう。
GCPプロジェクトを作成する
GCS (gsutil コマンド) を利用するためには、最初に GCP プロジェクトの作成が必要となります。下記リンクの「GCPプロジェクトの作成(1)~(3)」を参考にプロジェクトの作成をおこなってください。
Google Cloud SDK のセットアップ
Google Cloud SDK のセットアップ手順については、下記リンクの記事を参考にインストール、初期設定をおこなってください。
– Cloud SDKをmac, Linux, Windowsにインストール・初期設定までの導入手順徹底解説!!
gsutil コマンドの種類を確認する
gsutil コマンドの種類を確認するためには、ターミナル上で「gsutil help」コマンドを実行するとサポートされているコマンドの一覧と概要が表示されます(※2)。
現在、gsutil コマンドには計32種類のコマンドが存在します。
acl | du | mb | setmeta |
cat | hash | mv | signurl |
compose | help | notification | stat |
config | iam | perfdiag | test |
cors | label | rb | update |
cp | lifecycle | rewrite | version |
defacl | logging | rm | versioning |
defstorageclass | ls | rsync | web |
※2 … help コマンドについては後ほど説明します。
gsutilの基本コマンドを解説する
今回は Linux などでも馴染みの深いコマンドと、gsutil の基本的なコマンドを合わせて下記の14個を解説します。理解を深めるために実際にコマンドを実行することをお勧めします。
- help
- version
- update
- test
- ls
- mb
- rb
- cp
- rm
- mv
- rsync
- cat
- du
- hash
help コマンド
help コマンドは gsutil サブコマンドの利用方法を確認するためのコマンドです。help コマンドを使って「cp」コマンドの利用方法を確認する場合は以下のコマンドを実行します。
例1-1 「cp」コマンドの利用方法を確認するコマンド
$ gsutil help cp
NAME
cp - Copy files and objects
SYNOPSIS・・・(1)
gsutil cp [OPTION]... src_url dst_url
gsutil cp [OPTION]... src_url... dst_url
gsutil cp [OPTION]... -I dst_url
DESCRIPTION・・・(2)
The gsutil cp command allows you to copy data between your local file
system and the cloud, copy data within the cloud, and copy data between
cloud storage providers. For example, to copy all text files from the
local directory to a bucket you could do:
gsutil cp *.txt gs://my-bucke
~省略~
また、サブコマンドを指定せずに help コマンドを実行した場合は、全 gsutil コマンドの一覧が出力されます。
version コマンド
version コマンドは gsutil コマンドラインツールのバージョンを出力するためのコマンドです。以下はコマンドの実行例です。
例2-1 gsutil ツールのバージョンを確認するためのコマンド
$ gsutil version
gsutil version: 4.27
update コマンド
update コマンドは gsutil コマンドラインツールに新しいバージョンがリリースされた場合に、gsutil ツールをアップデートするためのコマンドでしたが、現在は Google Cloud SDK の gcloud コマンドからのアップデートが推奨されています。gcloud コマンドでのアップデートは“gcloud components update” です。こちらを使用するようにしてください。
test コマンド
test コマンドは gsutil コマンドラインツール自体の単体・結合テストを実行するためのコマンドです。おそらく、Python などのライブラリ関連の依存性の検証を行ってくれるものと思われます。
動作がおかしくなってしまった場合にコマンドを実行してみると、原因がわかるかもしれません。
以下はコマンドの実行例です。
例3-1 gsutil ツールのテストを実行するためのコマンド
$ gsutil test
Running 261 tests sequentially.
172/261 finished - E[0] F[0] s[0] - TestPerfDiagUnitTests.test_listing_d - netstat: sysctl: net.inet.ip.input_perf_data: No such file or directory
netstat: sysctl: net.inet.ip.input_perf_data: No such file or directory
223/261 finished - E[0] F[0] s[0] - UpdateUnitTest.test_repo_matches_man - .
~省略~
一度テストを実行すると、完了までに30分ほど時間がかかるため、注意しましょう。
ls コマンド … List
ls コマンドはバケットやオブジェクトの一覧を出力するためのコマンドです。たとえば、バケットの一覧を出力するためには、下記のコマンドを実行します。
例4-1 バケットの一覧を出力するコマンド
$ gsutil ls
gs://bucket-ca1/
gs://bucket-ca2/
gs://bucket-ca3/
例4-2 バケット内のオブジェクト一覧を出力するコマンド
$ gsutil ls gs://bucket-ca1
gs://bucket-ca1/file1.png
gs://bucket-ca1/file2.png
gs://bucket-ca1/file3.png
gs://bucket-ca1/local_folder/
例4-3 バケット内のオブジェクトの詳細を表示するコマンド
$ gsutil ls -l gs://bucket-ca1
197648 2017-10-11T00:10:48Z gs://bucket-ca1/file1.png
197648 2017-10-11T00:16:28Z gs://bucket-ca1/file2.png
197648 2017-10-11T00:18:20Z gs://bucket-ca1/file3.png
gs://bucket-ca1/local_folder/
TOTAL: 3 objects, 592944 bytes (579.05 KiB)
また、バケット内のオブジェクトの情報をより詳細に表示するためには「-L」オプションを使用します。
例 4-4 オブジェクトの情報をより詳細に表示するコマンド
$ gsutil ls -L gs://bucket-ca1/file1.png
gs://bucket-ca1/file1.png:
Creation time: Wed, 11 Oct 2017 00:10:48 GMT
Update time: Wed, 11 Oct 2017 00:10:48 GMT
Storage class: MULTI_REGIONAL
Content-Length: 197648
Content-Type: image/png
Hash (crc32c): w5bgZw==
Hash (md5): 6AdSqa/sYEGGoyEcn2HCmw==
ETag: COef6ouk59YCEAE=
Generation: 1507680648335335
Metageneration: 1
ACL: [
{
"entity": "project-owners-XXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXX",
"team": "owners"
},
"role": "OWNER"
},
{
"entity": "project-editors-XXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXX",
"team": "editors"
},
"role": "OWNER"
},
{
"entity": "project-viewers-XXXXXXXXXXX",
"projectTeam": {
"projectNumber": "XXXXXXXXXXX",
"team": "viewers"
},
"role": "READER"
},
{
"email": "xxx@example.com",
"entity": "user-xxx@example.com",
"role": "OWNER"
}
]
TOTAL: 1 objects, 197648 bytes (193.02 KiB)
mb コマンド … Make Bucket
mb コマンドは Cloud Storage に新しくバケットを作成するためのコマンドです。
コマンド実行前はこのような状態です。
バケットを作成するためには下記のコマンドを実行します。
例 5-1 バケットを作成するコマンド
$ gsutil mb gs://bucket-ca4
Creating gs://bucket-ca4/...
デフォルトではストレージクラスは「Multi-Regilnal」、ロケーションは「US」のバケットが作成されます。
ストレージクラス、ロケーションを指定したい場合は下記のコマンドを実行します。
例 5-2 ストレージクラス・ロケーションを指定してバケットを作成するコマンド
$ gsutil mb -c regional -l asia-northeast1 gs://bucket-ca5
Creating gs://bucket-ca5/...
コマンド実行後にクラウドコンソールを見てみると、指定した条件のバケットが作成されていることが確認できます。
rb コマンド … Remove Bucket
rb コマンドはバケットの削除をするためのコマンドです。
バケットを削除するときの注意点として、削除対象のバケットは空でなければいけません。
バケットを削除するには下記のコマンドを実行します。
例 6-1 バケットを削除するコマンド
$ gsutil rb gs://bucket-ca5
Removing gs://bucket-ca5/...
中身のあるバケットを削除しようとした場合には下記のようなエラーが出ます。
例 6-2 オブジェクトの存在するバケットを選択時のエラー
$ gsutil rb gs://bucket-ca1
Removing gs://bucket-ca1/...
NotEmptyException: 409 BucketNotEmpty (bucket-ca1)
cp コマンド … Copy
cp コマンドはローカルファイルや GCS オブジェクトをコピーするためのコマンドです。
ローカル → GCS や GCS → ローカル、GCS 内でのコピーをすることができます。
次回解説する「gsutil config」コマンドで AWS の設定を追加することで、GCS → S3 や S3 → GCS のコピーを行うことも可能です。
今回は中身が空っぽの「bucket-ca4」を対象にします。
ローカルから GCS へコピー(アップロード)するためには下記のコマンドを実行します。
例 7-1 ローカルファイルを GCS へコピーするコマンド
$ gsutil cp $HOME/local_folder/file1.png gs://bucket-ca4/
Copying file:///Users/xxx/local_folder/file1.png [Content-Type=image/png]...
\ [1 files][193.0 KiB/193.0 KiB]
Operation completed over 1 objects/193.0 KiB.
GCS 内で別バケットからオブジェクトをコピーするためには下記のコマンドを実行します。今回は「bucket-ca1」というバケットに存在する「file2.png」というファイルを「bucket-ca4」にコピーします。
例 7-2 GCS 内の別バケットからオブジェクトをコピーするコマンド
$ gsutil cp gs://bucket-ca1/file2.png gs://bucket-ca4/file2.png
Copying gs://bucket-ca1/file2.png [Content-Type=image/png]...
- [1 files][193.0 KiB/193.0 KiB]
Operation completed over 1 objects/193.0 KiB.
GCS からローカルにコピー(ダウンロード)するためには、下記のコマンドを実行します。
例 7-3 GCS オブジェクトをローカルにコピーするコマンド
$ gsutil cp gs://bucket-ca4/file2.png $HOME/local_folder/
Copying gs://bucket-ca4/file2.png...
- [1 files][193.0 KiB/193.0 KiB]
Operation completed over 1 objects/193.0 KiB.
$ ls $HOME/local_folder
file1.png file2.png
例 7-4 ローカルのフォルダを GCS にコピーするコマンド
$ gsutil cp -r $HOME/local_folder gs://bucket-ca4/
Copying file:///Users/xxx/local_folder/file1.png [Content-Type=image/png]...
Copying file:///Users/xxx/local_folder/file2.png [Content-Type=image/png]...
- [2 files][386.0 KiB/386.0 KiB]
Operation completed over 2 objects/386.0 KiB.
rm コマンド … Remove
rm コマンドはオブジェクトを削除するためのコマンドです。
コマンド実行前の状態をクラウドコンソールで確認します。
オブジェクトを指定して削除するには下記のコマンドを実行します。
例 8-1 オブジェクトを指定して削除するコマンド
$ gsutil rm gs://bucket-ca4/file3.png
Removing gs://bucket-ca4/file3.png...
/ [1 objects]
Operation completed over 1 objects.
フォルダ内の全てのオブジェクトを削除するためには下記のコマンドを実行します。
例 8-2 フォルダ内のオブジェクトを全て削除するコマンド
$ gsutil rm gs://bucket-ca4/*
Omitting prefix "gs://bucket-ca4/local_folder/". (Did you mean to do rm -r?)
Removing gs://bucket-ca4/file1.png...
Removing gs://bucket-ca4/file2.png...
/ [2 objects]
Operation completed over 2 objects.
削除対処はオブジェクトのみで、フォルダは対象外である点に注意が必要です。
指定したフォルダも含めて全て削除するには、「-r」オプションを使用します。
コマンド実行前のバケット内は下記の通りです。
下記コマンドが実行例です。
例 8-3 指定したフォルダ内を再帰的に削除するコマンド
$ gsutil rm -r gs://bucket-ca4
Removing gs://bucket-ca4/file1.png#1510189733612920...
Removing gs://bucket-ca4/file2.png#1510189756387814...
Removing gs://bucket-ca4/local_folder/file1.png#1510118944693232...
Removing gs://bucket-ca4/local_folder/file2.png#1510118945268387...
/ [4 objects]
Operation completed over 4 objects.
Removing gs://bucket-ca4/...
mv コマンド … Move
mv コマンドはオブジェクトの移動やリネームをするためのコマンドです。
ローカル → GCS や GCS → ローカル、GCS 内での移動をすることができます。
次回解説する「gsutil config」コマンドで AWS の設定を追加することで、GCS → S3 や S3 → GCS の移動を行うことも可能です。
GCS からローカルに移動するには下記のコマンドを実行します。
例 9-1 GCS からローカルにファイルを移動するコマンド
$ gsutil mv gs://bucket-ca4/file1.png $HOME/local_folder
Copying gs://bucket-ca4/file1.png...
Removing gs://bucket-ca4/file1.png...
Operation completed over 1 objects/193.0 KiB.
クラウドコンソールを確認すると、バケットから「file1.png」が消えていることが確認できます。また、ローカルを確認すると「file1.png」が追加されていることが確認できます。
$ ls $HOME/local_folder
file1.png file2.png
例 9-2 ローカルから GCS にファイルを移動するコマンド
$ gsutil mv $HOME/local_folder/file1.png gs://bucket-ca4/
Copying file:///Users/xxx/local_folder/file1.png [Content-Type=image/png]...
Removing file:///Users/xxx/local_folder/file1.png...
Operation completed over 1 objects/193.0 KiB.
クラウドコンソールで確認すると、指定したバケットに「file1.png」が追加されていることが確認できます。また、ローカルを確認すると「file1.png」が消えていることが確認できます。
$ ls $HOME/local_folder
file2.png
例 9-3 オブジェクトをリネームするコマンド
$ gsutil mv gs://bucket-ca4/file1.png gs://bucket-ca4/fil1000.png
Copying gs://bucket-ca4/file1.png [Content-Type=image/png]...
Removing gs://bucket-ca4/file1.png...
Operation completed over 1 objects/193.0 KiB.
mv コマンドを利用する際の注意点として、mv コマンドは内部的には cp, rm の2処理を行っているため、ストレージクラスが Nearline, Coldline の場合には通常の操作料金に加えて、データ取得料金、削除料金が追加される場合があります。
rsync コマンド … Remote Synchronization
rsync コマンドは2つのバケットやディレクトリの内容を同期するためのコマンドです。
次回解説する「gsutil config」コマンドで AWS の設定を追加することで、GCS → S3 や S3 → GCS のバケット同期を行うことも可能です。
バケットを同期するには下記のコマンドを実行します。
例 10-1 バケットを同期するコマンド
$ gsutil rsync gs://bucket-ca4 gs://bucket-ca5
Building synchronization state...
Starting synchronization
Copying gs://bucket-ca4/fil1000.png [Content-Type=image/png]...
Copying gs://bucket-ca4/file2.png [Content-Type=image/png]...
Copying gs://bucket-ca4/file3.png [Content-Type=image/png]...
| [3 files][579.1 KiB/579.1 KiB]
Operation completed over 3 objects/579.1 KiB.
オブジェクトの同期は確認できましたが、フォルダは同期されていません。
フォルダを同期するためには -r オプションを使用します。
フォルダごと同期するためには下記のコマンドを実行します。
例 10-2 バケットを内包するフォルダごと同期するコマンド
$ gsutil rsync -r gs://bucket-ca4 gs://bucket-ca6
Building synchronization state...
Starting synchronization
Copying gs://bucket-ca4/fil1000.png [Content-Type=image/png]...
Copying gs://bucket-ca4/file2.png [Content-Type=image/png]...
Copying gs://bucket-ca4/file3.png [Content-Type=image/png]...
Copying gs://bucket-ca4/local_folder/file1.png [Content-Type=image/png]...
/ [4 files][772.1 KiB/772.1 KiB]
==> NOTE: You are performing a sequence of gsutil operations that may
run significantly faster if you instead use gsutil -m -o ... Please
see the -m section under "gsutil help options" for further information
about when gsutil -m can be advantageous.
Copying gs://bucket-ca4/local_folder/file2.png [Content-Type=image/png]...
- [5 files][965.1 KiB/965.1 KiB]
Operation completed over 5 objects/965.1 KiB.
フォルダごと同期できていることが確認できました。
cat コマンド … Concatenate
cat コマンドはオブジェクトの内容を出力するためのコマンドです。
オブジェクトの内容を出力するためには下記のコマンドを実行します。
例 11-1 オブジェクトの内容を出力するコマンド
$ gsutil cat gs://bucket-ca7/a.txt
aaa
例 11-2 複数のオブジェクトの内容を連結して出力するコマンド
$ gsutil cat gs://bucket-ca7/a.txt gs://bucket-ca7/b.txt gs://bucket-ca7/c.txt
aaa
bbb
ccc
du コマンド … Disk usage
du コマンドはオブジェクトのサイズを表示するためのコマンドです。
オブジェクトを指定してサイズを表示するためには下記のコマンドを実行します。
例 12-1 オブジェクトを指定してサイズを表示するコマンド
$ gsutil du gs://bucket-ca1/file1.png
197648 gs://bucket-ca1/file1.png
例 12-2 バケットが内包する全オブジェクトのサイズを表示するコマンド
$ gsutil du gs://bucket-ca1
197648 gs://bucket-ca1/file1.png
197648 gs://bucket-ca1/file2.png
197648 gs://bucket-ca1/file3.png
197648 gs://bucket-ca1/local_folder/file1.png
197648 gs://bucket-ca1/local_folder/file2.png
395296 gs://bucket-ca1/local_folder/
例 12-3 バケットの合計サイズを表示するコマンド
$ gsutil du -c gs://bucket-ca1
197648 gs://bucket-ca1/file1.png
197648 gs://bucket-ca1/file2.png
197648 gs://bucket-ca1/file3.png
197648 gs://bucket-ca1/local_folder/file1.png
197648 gs://bucket-ca1/local_folder/file2.png
395296 gs://bucket-ca1/local_folder/
988240 total
hash コマンド … Hash
hash コマンドはローカルファイルのハッシュ値を計算するためのコマンドです。gsutil ls -L コマンドで出力されたハッシュ値との比較をするために使用されます。
ハッシュ値を出力するためには下記のコマンドを実行します。
例 13-1 ハッシュ値を計算して出力するコマンド
$ gsutil hash $HOME/local_folder/file1.png
Hashes [base64] for /Users/moto/local_folder/file1.png:
Hash (crc32c): w5bgZw==
Hash (md5): 6AdSqa/sYEGGoyEcn2HCmw==
Operation completed over 1 objects/193.0 KiB.
$ gsutil ls -L gs://bucket-ca1/file1.png
gs://bucket-ca1/file1.png:
Creation time: Wed, 11 Oct 2017 00:10:48 GMT
Update time: Wed, 11 Oct 2017 00:10:48 GMT
Storage class: MULTI_REGIONAL
Content-Length: 197648
Content-Type: image/png
Hash (crc32c): w5bgZw==
Hash (md5): 6AdSqa/sYEGGoyEcn2HCmw==
~省略~
下記はコマンドの実行例です。
例 13-2 ハッシュ値の計算結果を16進数で表示するコマンド
$ gsutil hash -h $HOME/local_folder/file1.png
Hashes [hex] for /Users/moto/local_folder/file1.png:
Hash (crc32c): C396E067
Hash (md5): e80752a9afec604186a3211c9f61c29b
Operation completed over 1 objects/193.0 KiB.
まとめ
今回は gsutil コマンドの中でも gsutil ツールに対してのコマンドや、Linux コマンドに近い操作のコマンドを説明しました。ツールにありがちな「バージョンを表示するコマンド」、「help コマンド」や、Linux コマンドと同じような処理を行うコマンドなど、エンジニアには馴染み深い内容だったのではないでしょうか!
part2 では GCS の機能に踏み込んだコマンドについて説明する予定です。お楽しみに!!
※ 弊社ではクラウドエース(Cloud Ace)というGCPの導入・運用支援サービスを提供しておりますので、ご興味のある方はこちらまでお問い合わせくださいGAEに限らず、あらゆるGCPサービスのサポートが可能です。