GCP: Cloud Storage

CLI

GCSのファイル一覧取得

BUCKET='my-buket'

# バケットの一覧取得
gsutil ls
# バケット内のファイル一覧取得
gsutil ls gs://${BUCKET}
# バケットのフォルダ内のファイル一覧取得
gsutil ls gs://${BUKCET}/hoge

オブジェクトの中身を表示する

gsutil cat gs://${BUCKET}/hoge.txt

ローカルファイルをGCSにコピー

BUCKET='my-bucket'
# hoge配下のjsonをすべてコピー
gsutil -m cp hoge/*.json gs://BUCKET/json/

Tips

バケット内のファイル数取得

BUCKET='gs://my-bucket/hoge/'
gsutil ls $BUCKET | wc -l

FAQ

Anonymous caller does not have xxx

SDKを使うとき、事前にgcloud initでログインしているのに認証エラーになってしまう場合。

gcloud auth application-default login

ConnectionResetError

リトライ処理を入れる。

from google.cloud import storage
from urllib3.exceptions import ProtocolError
from google.api_core import retry

predicate = retry.if_exception_type(ConnectionResetError, ProtocolError)
reset_retry = retry.Retry(predicate)

client_gcs = storage.Client()
ls = client_gcs.list_blobs("my-bukcet")
for blob in ls:
    content = reset_retry(blob.download_as_string)()
    print(content)

Ref:
https://github.com/googleapis/google-cloud-python/issues/5879#issuecomment-517391825