您可以使用 Storage 移轉服務,在 Cloud Storage bucket 之間移轉大量資料,無論這些 bucket 位於同一 Google Cloud 專案,還是不同專案。
在許多情況下,儲存空間遷移都很有用。可用於合併不同專案的資料、將資料移至備份位置,或變更資料位置。
使用 Storage 移轉服務的時機
Google Cloud 提供多種選項,可在 Cloud Storage 值區之間轉移資料。建議遵循下列準則:
轉移容量小於 1 TB:使用
gcloud。如需操作說明,請參閱「移動及重新命名值區」一文。移轉超過 1 TB 的資料:請使用 Storage 移轉服務。Storage 移轉服務是受管理的移轉選項,可提供開箱即用的安全性、可靠性和效能。因此不必最佳化及維護指令碼,也不必處理重試作業。
本指南將探討使用 Storage 移轉服務在 Cloud Storage bucket 之間轉移資料的最佳做法。
定義轉移策略
轉移策略取決於情況的複雜程度。請務必在計畫中納入下列考量。
選擇 bucket 名稱
如要將資料移至其他位置的儲存空間值區,請選擇下列其中一種方法:
- 新的值區名稱。更新應用程式,指向名稱不同的儲存空間 bucket。
- 保留 bucket 名稱。更換儲存空間值區,保留目前名稱,這樣就不必更新應用程式。
無論是哪種情況,您都應規劃停機時間,並適時通知使用者即將停機。請參閱下列說明,瞭解哪種選擇最適合您。
新 bucket 名稱
使用新值區名稱時,您需要更新所有使用目前值區的程式碼和服務。具體做法取決於應用程式的建構和部署方式。
對於某些設定,這種做法的停機時間可能較短,但需要更多工作才能確保順利轉換。步驟如下:
- 將資料複製到新的儲存空間 bucket。
- 開始休息。
- 更新應用程式,使其指向新的值區。
- 確認所有項目皆依照預期運作,且所有相關系統和帳戶都能存取 bucket。
- 刪除原始 bucket。
- 結束休息時間。
保留 bucket 名稱
如果您不想變更程式碼來指向新的 bucket 名稱,請使用這個方法。步驟如下:
- 將資料複製到暫存儲存空間值區。
- 開始休息。
- 刪除原始 bucket。
- 建立與原始 bucket 同名的新 bucket。
- 將資料從臨時 bucket 複製到新 bucket。
- 刪除臨時 bucket。
- 確認所有項目皆依照預期運作,且所有相關系統和帳戶都能存取 bucket。
- 結束休息時間。
盡量減少停機時間
在轉移期間,Storage 移轉服務不會鎖定來源或目的地 bucket 的讀取或寫入作業。
如果您選擇手動鎖定對儲存空間的讀取/寫入作業,可以分兩階段轉移資料 (播種和同步),盡量縮短停機時間。
種子轉移:執行大量轉移作業,不必鎖定來源的讀取/寫入作業。
同步轉移:第一次執行完畢後,鎖定來源 bucket 的讀取/寫入作業,然後再次執行轉移作業。Storage 移轉服務預設會執行增量移轉,因此第二次移轉只會移轉在種子移轉期間變更的資料。
提升傳輸速度
估算移轉作業所需時間時,請考量可能的瓶頸。舉例來說,如果來源有數十億個小型檔案,傳輸速度就會受到 QPS 限制。如果物件很大,頻寬可能會成為瓶頸。
頻寬限制是在區域層級設定,並在所有專案間平均分配。如果頻寬充足,Storage 移轉服務每秒每個移轉工作可完成約 1000 項工作。在這種情況下,您可以將工作拆分成多個小型移轉工作,例如使用納入和排除前置字串來移轉特定檔案,藉此加快移轉速度。
如果位置、儲存空間級別和加密金鑰相同,Storage 移轉服務不會建立位元組的新副本,而是建立指向來源 BLOB 的新中繼資料項目。因此,大型語料庫的相同位置和類別副本會非常快速地完成,且只受 QPS 限制。
刪除作業也屬於僅限中繼資料的作業。對於這類轉移作業,將轉移作業分割成多個小型工作,以平行處理的方式進行,可以提高速度。
保留中繼資料
使用 Storage 移轉服務在 Cloud Storage bucket 之間轉移資料時,系統會保留下列物件中繼資料:
- 使用者建立的自訂中繼資料。
- Cloud Storage 固定鍵中繼資料欄位,例如 Cache-Control、Content-Disposition、Content-Type 和 Custom-Time。
- 物件大小。
- 版本編號會保留為自訂中繼資料欄位,並使用
x-goog-reserved-source-generation金鑰,您稍後可以編輯或移除。
使用 API 轉移時,可選擇保留下列中繼資料欄位:
- 存取控制清單 (ACL) (
acl) - 儲存空間級別 (
storageClass) - CMEK (
kmsKey) - 暫時性保留 (
temporaryHold) - 物件建立時間 (
customTime)
詳情請參閱 TransferSpec API 參考資料。
系統不會保留下列中繼資料欄位:
- 上次更新時間 (
updated) etagcomponentCount
如果保留,物件建立時間會儲存為自訂欄位,
customTime。物件的 updated 時間會在轉移時重設,因此物件在儲存空間級別中經過的時間也會重設。也就是說,物件轉移至 Coldline Storage 後,必須在目的地再次存在 90 天,才能避免產生提前刪除費用。
您可以使用 customTime 套用以 createTime 為準的生命週期政策。現有的 customTime 值會遭到覆寫。
如要進一步瞭解哪些資料會保留,哪些不會,請參閱「中繼資料保留」一文。
處理版本化物件
如要轉移所有版本的儲存空間物件,而不只是最新版本,可以使用儲存空間轉移服務的資訊清單功能。
如要轉移所有物件版本,請按照下列步驟操作:
列出 bucket 物件,並將其複製到 JSON 檔案:
gcloud storage ls --all-versions --recursive --json [SOURCE_BUCKET] > object-listing.json這個指令通常每秒會列出約 1,000 個物件。
將非目前物件複製到 CSV 檔案:
jq -r '.[] | select( .type=="cloud_object" and (.metadata | has("timeDeleted"))) | [.metadata.name, .metadata.generation] | @csv' object-listing.json > non-current-object-manifest.csv在目的地 bucket 上啟用物件版本管理。
使用下列移轉選項移轉非最新版本:
- 指定資訊清單檔案。
- 選擇一律覆寫接收器中的物件 (
OVERWRITE_WHEN=always)。 請注意,在極少數情況下,這可能會建立檔案的重複版本。 - 保留
timeCreated中繼資料 (MetdataOptions.timeCreated=TIME_CREATED_PRESERVE_AS_CUSTOM_TIME)。
使用一般轉移作業轉移即時版本。
設定轉移選項
設定轉移時,您可以選擇以下選項:
記錄:Cloud Logging 提供個別物件的詳細記錄,方便您驗證移轉狀態,並執行額外的資料完整性檢查。
篩選:您可以使用「納入」及「排除」前置字串,控管 Storage 移轉服務應在哪些物件上執行。這個選項可用於將轉移作業分割成多個轉移工作,以便平行執行。詳情請參閱「提升傳輸速度」。
移轉選項: 您可以設定移轉作業,覆寫目標值區中的現有項目、刪除目標中不存在於移轉集中的物件,或刪除來源中已移轉的物件。
轉移資料
定義轉移策略後,即可執行轉移作業。
建立新的 bucket
開始移轉前,請先建立儲存空間 bucket。 如需選擇適當 bucket 位置的協助,請參閱 location_considerations。
建立新值區時,您可能想複製部分值區中繼資料。請參閱「取得值區中繼資料」,瞭解如何顯示來源值區的中繼資料,以便將相同設定套用至新值區。
將物件複製到新 bucket
您可以使用Google Cloud 控制台、gcloud CLI、REST API 或用戶端程式庫,將來源 bucket 中的物件複製到新的 bucket。選擇哪種方法取決於轉移策略。
下列操作說明適用於將物件從一個值區轉移至另一個值區的基本用途,請根據您的需求進行修改。
請勿在傳輸作業名稱中加入機密資訊,例如個人識別資訊 (PII) 或安全性資料。資源名稱可能會傳播至其他 Google Cloud 資源的名稱,並向專案外部的 Google 內部系統公開。
Google Cloud 控制台
請使用Google Cloud console 中的 Cloud Storage 移轉服務:
在 Google Cloud 控制台中開啟「移轉」頁面。
- 按一下 [Create transfer job] (建立移轉工作)。
按照逐步操作說明,在完成每個步驟時按一下「下一步」:
開始使用:將 Google Cloud Storage 同時做為來源類型和目的地類型。
選擇來源:直接輸入所需值區的名稱,或按一下「瀏覽」,找出並選取所需值區。
選擇目的地:直接輸入所需值區的名稱,或按一下「瀏覽」,找出並選取所需值區。
選擇設定:選取「轉移檔案後,請從來源刪除檔案」選項。
排程選項:您可以忽略此部分。
逐步完成操作後,請按一下「建立」。