執行 gcloud storage 的 shim
總覽
Cloud SDK 包含新的 CLI (gcloud storage),在執行上傳和下載作業時,可減少參數調整,速度比 gsutil 快上許多。這個新的 CLI 具有 gsutil 使用者熟悉的語法和指令結構,但在許多重要方面與 gsutil 有根本上的差異。為簡化轉換至這個新 CLI 的過程,gsutil 提供一個轉譯層,可將 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 儲存空間修正。
iam
不支援
ch
子命令。-f
旗標會在發生任何錯誤時繼續執行,而非僅限於 API 錯誤。
kms
授權子指令會以不同格式傳回資訊訊息。
加密子指令會以不同格式傳回資訊訊息。
標籤
get
子命令會列印「[]」,而不是「gs://[bucket name] has no labels configuration」。
lifecycle
正常運作。
記錄
get 子命令的 JSON 間距不同,且如果找不到設定,就不會顯示資訊性訊息。
ls
正常運作。
mb
正常運作。
mv
請參閱 cp 的附註。
通知
清單子命令會以 YAML 格式列印設定資訊。
delete 子命令提供進度追蹤和並行處理功能。
pap
正常運作。
rb
正常運作。
requesterpays
正常運作。
rewrite
如果未指定新金鑰,-k 標記就不會擲回錯誤。在使用墊片和未使用墊片的情況下,舊的鍵都會保留。
rm
不支援
$folder$
刪除標記。
rpo
正常運作。
setmeta
如果沒有變更任何標頭,就不會擲回錯誤。
stat
包含「Storage class update time」欄位,可能會導致分頁錯誤。
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
一般相容性注意事項
由於 gsutil 可在所有主要平台上使用,因此預設會為所有指令啟用多重處理功能 (等同於 gsutil 一律會加入 -m 選項)。
星號序列如果超過 2 個 (即
***
),一律會視為單一星號。與 gsutil 不同,gcloud 並非用於並行叫用,因此如果這麼做 (例如從 2 個終端機同時執行 shim),可能會導致無法預測的行為。
假設某個 bucket 包含物件
gs://bucket/nested/foo.txt
,如果提供gs://bucket/*/nested/*
這類網址,gsutil 的萬用字元迴轉器就會比對foo.txt
。在相同網址下,這個填充物不會與foo.txt
相符。隨著 gcloud storage 和 shim 都支援新指令,這份說明會隨之更新。
如果 Unicode 發生問題,請嘗試將環境變數
PYTHONUTF8
設為1
。具體來說,這可能有助於 Windows 指令列 (CMD)。