執行 gcloud storage 的 Shim

Google Cloud CLI 包含 Cloud Storage 的 CLI gcloud storage,在執行上傳和下載作業時,速度可能比 gsutil 快上許多,而且不需要調整太多參數。gcloud storage 指令的語法和指令結構與 gsutil 使用者熟悉的方式類似,但在許多重要方面有根本上的差異。為方便轉換至 gcloud CLI,gsutil 提供 shim,可將 gsutil 指令轉換為 gcloud storage 指令 (如有對應指令),如果沒有對應指令,則會回歸 gsutil 的一般行為。

啟用方式

[GSUtil] 區段下,於 .boto 設定檔中設定 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

  • 即使第一個物件無效,也會列印第二個物件的物件資料。

compose

  • 運作正常。

cors

  • get 子指令會列印「[]」,而不是「gs://[bucket name] has no CORS configuration」。

cp

  • 即使第一個物件無效,也會複製第二個物件。

  • 不支援檔案對檔案的複製作業。

  • 支援在名稱中加上尾端斜線,將物件從雲端複製到雲端。

  • 全版本旗標 (-A) 會以無聲方式啟用循序執行,而非引發錯誤。

defacl

  • 系統不支援 ch 子指令。

defstorageclass

  • 運作正常。

hash

  • 在 gsutil 中,影響顯示哪些雜湊的 -m-c 旗標會遭到忽略,這個行為已修正,適用於 shim 和 gcloud storage。

iam

  • 系統不支援 ch 子指令。

  • -f 旗標會繼續處理任何錯誤,而不只是 API 錯誤。

kms

  • 授權子指令會以不同格式傳回資訊訊息。

  • 加密子指令會以不同格式傳回資訊訊息。

標籤

  • get 子指令會列印「[]」,而不是「gs://[bucket name] has no labels configuration.」。

lifecycle

  • 運作正常。

記錄

  • get 子指令的 JSON 間距不同,且如果找不到任何設定,就不會列印資訊訊息。

ls

  • 運作正常。

mb

  • 運作正常。

mv

  • 請參閱 cp 的附註。

通知

  • list 子指令會以 YAML 格式列印設定資訊。

  • 刪除子指令提供進度追蹤和並行化功能。

pap

  • 運作正常。

rb

  • 運作正常。

requesterpays

  • 運作正常。

rewrite

  • 如果呼叫 -k 旗標時未提供新金鑰,系統不會擲回錯誤。無論是使用墊片或未墊片,舊金鑰都會保留。

rm

  • $folder$ 不支援刪除標記。

rpo

  • 運作正常。

setmeta

  • 如果沒有變更任何標頭,則不會擲回錯誤。

stat

  • 內含「儲存空間級別更新時間:」欄位,可能會導致分頁標籤錯位。

ubla

  • 運作正常。

versioning

  • 運作正常。

網路

  • get 子指令的 JSON 間距不同,且如果找不到任何設定,就不會列印資訊訊息。

Boto 設定

boto 檔案中的設定會視情況 1:1 對應至 gcloud 環境變數。

[憑證]

  • 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

一般相容性注意事項

  • 由於 multiprocessing 可在所有主要平台運作,因此預設會為所有指令啟用這項功能 (相當於 gsutil 一律包含 -m 選項)。

  • 如果星號超過 2 個 (即 ***),一律會視為單一星號。

  • 與 gsutil 不同,gcloud 並非設計用於平行調用,因此這麼做 (也就是同時從 2 個終端機執行 shim) 可能會導致無法預測的行為。

  • 假設 bucket 包含物件 gs://bucket/nested/foo.txt,gsutil 的萬用字元迭代器會比對 foo.txt,並提供類似 gs://bucket/*/nested/* 的網址。如果網址相同,墊片就不會相符。foo.txt

  • 如果 Unicode 發生問題,請嘗試將環境變數 PYTHONUTF8 設為 1。這項功能特別有助於 Windows 指令列 (CMD)。