gsutilコマンドでGoogle Cloud Storageのオブジェクトを操作する

gsutilgcloudに付属しているのかな。インストールにはgcloud initを使うといいみたいです。私はUbuntuが新しすぎていろいろ動かないので、google/cloud-sdk:latestを使っている。

まずは認証する

gcloudで認証する。

gcloud auth activate-service-account --key-file ./service.json

バケットの一覧

サービスアカウントの認証などだとバケットを閲覧することはできない。

gsutil ls

オブジェクトの一覧

/を改装扱いにしてくれるので、実行しても/区切りで直下のオブジェクトのみ一覧にされる。すべてのオブジェクトをaws-cli的に見るには、duコマンドがそれに近いかもしれない。後述します。

gsutil ls gs://bucket

ファイルのアップロード

put のようなコマンドがあるわけではなく、ローカルのファイルをコピーするような記述になる。下記のようにすると gs://bucket/file.txt が作成される。

gsutil cp file.txt gs://bucket/

下記は gs://bucket/hoge が作成される。

gsutil cp file.txt gs://bucket/hoge

下記はdirの中身が直下に再帰的に配置される

gsutil cp -r ./dir gs://bucket/

このような挙動で基本は問題ないが、空階層を作成したい場合は/で終わるファイルを作成したい場合がある。このケースにgsutilで対応する方法がわからなかったので、こういうケースはcurlでPUTするのが良いだろう。末尾を %2F で終わらせている。

curl -X POST --data-binary @[OBJECT_LOCATION] \
-H "Authorization: Bearer [OAUTH2_TOKEN]" \
-H "Content-Type: [OBJECT_CONTENT_TYPE]" \
"https://www.googleapis.com/upload/storage/v1/b/[BUCKET_NAME]/o?uploadType=media&name=[OBJECT_NAME]%2F"

含まれるオブジェクトをすべて一覧にする

これで階層関係なしに指定したパス以降のファイルを一覧にしてくれる。

gsutil du gs://bucket

なお、このように同じパスが2回出力されることがある。これはhoge/というファイルが存在してるためにおきる。Google Cloud的にはそこにファイルがある時点でhoge/というパスを表示するのだが、それに加えてhoge/というファイルがあればそれも表示するという仕組みたいだ。hoge/が2回出力される構造になっているので、これについては注意が必要だ。

# gsutil du gs://bucket
9           gs://bucket/hoge/
0           gs://bucket/hoge/file.png
27          gs://bucket/hoge/

オブジェクトの削除

gsutil rm gs://bucket/file.txt

ディレクトリ配下をすべて削除

-rを付けることで再帰的に配下を削除する。なおパス配下ではなく、ディレクトリ配下となるようで、同名のプレフィックスを含むディレクトリの名前を指定しても巻沿いをくったりせずに削除される。削除された件数が表示されるので、どんな処理をしたかは一目瞭然である。

gsutil rm -r gs://bucket/dir

オブジェクト・ディレクトリをリネーム

これでディレクトリ毎移動できます。

gsutil mv -r gs://bucket/old-dir gs://bucket/new-dir

こんな風にしてファイルも移動できるはず。

gsutil mv -r gs://bucket/file.png gs://bucket/file2.png

なおディレクトリの移動の時にディレクトリの移動を下記のように書くと、gs://bucket/new-dir/old-dir/ に移動されるので、発行したコマンドの見た目と結果に少しズレがあるように感じるので注意が必要です。

gsutil mv -r gs://bucket/old-dir/ gs://bucket/new-dir/

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA