実行中の gcloud storage の shim

概要

Cloud SDK には、新しい CLI である gcloud storage が含まれています。アップロードやダウンロードを行う際に、gsutil よりも少ないパラメータ調整で非常に高速に処理することが可能です。この新しい CLI には、gsutil ユーザーにとって使い慣れた構文やコマンド構造が用意されていますが、多くの重要な点において gsutil とは根本的な違いがあります。この新しい CLI への移行を容易にするため、gsutil には shim が用意されています。同等の機能が存在する場合は gsutil コマンドを gcloud storage コマンドに変換しますが、存在しない場合は gsutil の通常の動作に戻ります。

有効化

.boto 構成ファイルの [GSUtil] セクションにある use_gcloud_storage=True を設定します。

[GSUtil]
use_gcloud_storage=True

最上位の -o フラグを使用してコマンドごとにフラグを設定することもできます。

gsutil -o "GSUtil:use_gcloud_storage=True" -m cp -p file gs://bucket/obj

使用できるコマンド:

gcloud storage CLI は、gsutil コマンドのサブセットのみをサポートしています。以下に、shim でサポートされているコマンドのリストと動作の違いを示します。

acl

  • ch サブコマンドはサポートされていません。

autoclass

  • 想定どおりに動作します。

bucketpolicyonly

  • 想定どおりに動作します。

cat

  • 最初のオブジェクトが無効であっても、2 番目のオブジェクトのオブジェクト データを出力します。

compose

  • 想定どおりに動作します。

cors

  • get サブコマンドは、「gs://[bucket name] has no CORS configuration」ではなく [] を出力します。

cp

  • 最初のオブジェクトが無効な場合でも 2 番目のオブジェクトをコピーします。

  • ファイル間コピーはサポートされていません。

  • 名前に末尾のスラッシュを付けると、クラウド間のオブジェクトのコピーがサポートされます。

  • all-version フラグ(-A)を使用すると、エラーを発生させるのではなく、順次実行がサイレントで有効になります。

defacl

  • ch サブコマンドはサポートされていません。

defstorageclass

  • 想定どおりに動作します。

hash

  • クラウド オブジェクトの場合、gsutil では、どのハッシュを表示するのかを制御する -m フラグと -c フラグは無視されます。この動作は、shim と gcloud ストレージで修正されています。

iam

  • ch サブコマンドはサポートされていません。

  • -f フラグは、API エラーだけでなく、あらゆるエラーで引き続き表示されます。

kms

  • authorization サブコマンドで返される情報メッセージの形式が異なります。

  • encryption サブコマンドで返される情報メッセージの形式が異なります。

labels

  • get サブコマンドは、「gs://[bucket name] has no labels configuration」ではなく [] を出力します。

lifecycle

  • 想定どおりに動作します。

logging

  • get サブコマンドでは JSON のスペーシングが異なります。構成が見つからない場合、情報メッセージは出力されません。

ls

  • 想定どおりに動作します。

mb

  • 想定どおりに動作します。

mv

  • cp に関する注をご覧ください。

notification

  • list サブコマンドは、構成情報を YAML として出力します。

  • delete サブコマンドで、進捗状況の追跡と並列化を実行できます。

pap

  • 想定どおりに動作します。

rb

  • 想定どおりに動作します。

requesterpays

  • 想定どおりに動作します。

rewrite

  • -k フラグを使用すると、新しいキーなしで呼び出しが実行されてもエラーはスローされません。shim と unshimmed の両方で、古い鍵が維持されます。

rm

  • $folder$ の削除マーカーはサポートされていません。

rpo

  • 想定どおりに動作します。

setmeta

  • ヘッダーが変更されなくてもエラーはスローされません。

stat

  • 「Storage class update time:」というフィールドを含めると、タブが正しく表示されない可能性があります。

ubla

  • 想定どおりに動作します。

versioning

  • 想定どおりに動作します。

web

  • get サブコマンドでは JSON のスペーシングが異なります。構成が見つからない場合、情報メッセージは出力されません。

Boto の構成

該当する場合、boto ファイルにある構成と gcloud 環境変数が 1 対 1 でマッピングされます。

[Credentials]

  • aws_access_key_id: AWS_ACCESS_KEY_ID

  • aws_secret_access_key: AWS_SECRET_ACCESS_KEY

  • use_client_certificate: CLOUDSDK_CONTEXT_AWARE_USE_CLIENT_CERTIFICATE

[Boto]

  • proxy: CLOUDSDK_PROXY_ADDRESS

  • proxy_type: CLOUDSDK_PROXY_TYPE

  • proxy_port: CLOUDSDK_PROXY_PORT

  • proxy_user: CLOUDSDK_PROXY_USERNAME

  • proxy_pass: CLOUDSDK_PROXY_PASSWORD

  • proxy_rdns: CLOUDSDK_PROXY_RDNS

  • http_socket_timeout: CLOUDSDK_CORE_HTTP_TIMEOUT

  • ca_certificates_file: CLOUDSDK_CORE_CUSTOM_CA_CERTS_FILE

  • max_retry_delay: CLOUDSDK_STORAGE_BASE_RETRY_DELAY

  • num_retries: CLOUDSDK_STORAGE_MAX_RETRIES

[GSUtil]

  • check_hashes: CLOUDSDK_STORAGE_CHECK_HASHES

  • default_project_id: CLOUDSDK_CORE_PROJECT

  • disable_analytics_prompt: CLOUDSDK_CORE_DISABLE_USAGE_REPORTING

  • use_magicfile: CLOUDSDK_STORAGE_USE_MAGICFILE

  • parallel_composite_upload_threshold: CLOUDSDK_STORAGE_PARALLEL_COMPOSITE_UPLOAD_THRESHOLD

  • resumable_threshold: CLOUDSDK_STORAGE_RESUMABLE_THRESHOLD

[OAuth2]

  • client_id: CLOUDSDK_AUTH_CLIENT_ID

  • client_secret: CLOUDSDK_AUTH_CLIENT_SECRET

  • provider_authorization_uri: CLOUDSDK_AUTH_AUTH_HOST

  • provider_token_uri: CLOUDSDK_AUTH_TOKEN_HOST

互換性に関する全般的な注意事項

  • 主要なすべてのプラットフォームで互換性を維持するため、デフォルトではすべてのコマンドでマルチプロセッシングが有効になっています(gsutil の -m オプションと常に含める場合と同じ)。

  • 3 個以上のアスタリスクの連続(たとえば ***)は、常に単一のアスタリスクとして扱われます。

  • gsutil とは異なり、gcloud は並行呼び出しでの使用が想定されていません。このような操作を行うと、2 つのターミナルから shim を同時に実行するなど、予期しない動作が発生する可能性があります。

  • バケットにオブジェクト gs://bucket/nested/foo.txt が含まれている場合、gsutil のワイルドカード イテレータは gs://bucket/*/nested/* のような URL で foo.txt と一致します。同じ URL を指定すると、shim は foo.txt と一致しません。

  • gcloud コマンドと shim の両方で新しいコマンドがサポートされるようになると、この情報は更新されます。

  • Unicode に問題がある場合は、環境変数 PYTHONUTF81 に設定してみてください。特に、Windows コマンドライン(CMD)では役立つ場合があります。