使用跨 bucket 複製作業

本頁面提供跨值區複寫功能總覽,以及如何使用這項功能的說明。

跨 bucket 複製作業總覽

有時您可能需要將資料從一個 Cloud Storage 值區複製到另一個值區。bucket 間複製功能會將來源 bucket 中新的和更新的物件,非同步複製到目的地 bucket。

跨 bucket 複製與預設複製和 Turbo 複製不同,因為資料會儲存在兩個 bucket 中,兩者的設定各自獨立,包括儲存位置、加密機制、存取權和儲存空間級別。因此,這項服務不僅提供資料復原和可用性,也適用於:

  • 資料主權:在相隔遙遠的地區維護資料。
  • 維護不同的開發和正式版:建立不同的 bucket 和命名空間,確保開發作業不會影響正式版工作負載。
  • 共用資料:將資料複製到供應商或合作夥伴擁有的值區。
  • 資料匯總:將不同值區的資料合併到單一值區,以執行分析工作負載。
  • 管理成本、安全性和法規遵循:在不同擁有權、儲存空間類別和保留期限下維護資料。

跨 bucket 複製功能會使用 Storage Transfer Service 複製物件,並透過 Pub/Sub 接收來源和目的地 bucket 的變更通知。您可以在新建立的值區和現有值區上啟用跨值區複製功能。大多數物件都可以在幾分鐘內複製完成,但如果物件大於 1 GiB,可能需要數小時。

限制

  • 階層命名空間 bucket 不支援跨 bucket 複製。

  • 來源 bucket 中的物件刪除作業不會複製到目的地 bucket。

  • 物件生命週期設定不會複製。

  • 複製物件時,系統不會保留時間戳記中繼資料 (例如 timeCreatedtimeUpdated)。如要瞭解如何保留中繼資料,請參閱「在 Cloud Storage bucket 之間轉移資料」。

  • 由於跨 bucket 複製功能可用於在任何 Google Cloud 位置的 bucket 之間複製資料,因此跨 bucket 複製效能會因所選位置而異。因此,跨儲存空間複製功能不提供復原點目標 (RPO)。

事前準備

開始之前,請先完成下列步驟。

啟用 Storage Transfer Service API

如果尚未啟用,請啟用 Storage Transfer Service API

取得必要角色

如要取得使用跨值區複製功能所需的權限,請要求管理員為您授予值區或來源專案的Storage 移轉使用者 (roles/storagetransfer.user) IAM 角色。

這個預先定義的角色具備使用跨儲存空間複寫功能所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要使用跨 bucket 複寫功能,必須具備下列權限:

  • storagetransfer.jobs.create
  • storagetransfer.jobs.delete
  • storagetransfer.jobs.get
  • storagetransfer.jobs.list
  • storagetransfer.jobs.run
  • storagetransfer.jobs.update

如需如何授予值區角色的操作說明,請參閱「搭配值區使用 IAM」。如需授予專案角色的操作說明,請參閱「管理專案存取權」。

授予必要角色

跨 bucket 複寫功能會使用 Storage 移轉服務,將來源 bucket 中的物件複寫到目的地 bucket,並使用 Pub/Sub 接收來源 bucket 的變更通知。

為確保跨值區複製功能可以使用這些服務,您必須將必要權限授予 Storage 移轉服務用來複製資料的服務帳戶,以及 Pub/Sub 用來寫入通知的服務代理程式。

授予 Storage 移轉服務所需的角色

如要使用 Storage 移轉服務複製資料,可以將必要權限授予下列任一服務帳戶:

  • Storage 移轉服務服務代理,由 Google 自動建立及管理。這個服務代理的電子郵件地址採用以下命名格式:project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com。您可以使用 Storage 移轉服務 googleServiceAccounts.get API 取得 Storage 移轉服務服務代理的電子郵件地址。

  • 使用者管理的服務帳戶。這個服務帳戶的電子郵件地址採用 SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com 的命名格式。您可以建立自己的服務帳戶,並授予必要權限來複製資料。

Storage 移轉服務服務代理或使用者服務帳戶需要下列權限,才能複製物件並為來源 bucket 設定 Pub/Sub 通知:

所需權限

您必須在來源專案中授予下列權限:

  • pubsub.topics.create
  • pubsub.subscriptions.create
  • pubsub.subscriptions.consume
  • iam.serviceAccounts.actAs如果您使用使用者管理的服務帳戶,Storage 移轉服務服務代理不需要這項權限。

必須授予來源 bucket 的權限如下:

  • storage.buckets.get
  • storage.buckets.update
  • storage.objects.get

必須在目的地 bucket 中授予下列權限:

  • storage.buckets.get
  • storage.objects.create
  • storage.objects.get

您可以透過自訂角色授予這些權限,也可以授予下列所有預先定義的角色

  • 來源專案的 Pub/Sub 編輯者 (roles/pubsub.editor) 角色
  • 來源 bucket 的 Storage 舊版 bucket 擁有者 (roles/storage.legacyBucketOwner) 和 Storage 物件檢視者 (roles/storage.objectViewer) 角色
  • 目的地值區的 Storage 舊版值區寫入者 (roles/storage.legacyBucketWriter) 和 Storage 物件檢視者 (roles/storage.objectViewer) 角色
  • 如果您使用使用者管理的服務帳戶,則來源專案需要服務帳戶符記建立者 (roles/iam.serviceAccountTokenCreator)。Storage 移轉服務服務代理不需要這項權限。

授予 Pub/Sub 的必要角色

Cloud Storage 會使用 Google 代管的服務代理程式來管理 Pub/Sub 通知。這個服務代理的電子郵件地址採用 service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com 的命名格式。

Cloud Storage 服務代理需要下列權限,才能設定 Pub/Sub 並將訊息發布至主題:

所需權限

  • Pub/Sub 主題的 pubsub.topics.publish
  • Pub/Sub 主題的 pubsub.subscriptions.consume
  • 專案的 pubsub.subscriptions.create 權限

您可以透過 Pub/Sub 發布者 (roles/pubsub.publisher) 角色授予這些權限。

建立複製工作

控制台

如需透過 Google Cloud 控制台建立複寫工作的操作說明,請參閱「使用 Google Cloud 控制台建立複寫工作」。

指令列

使用 Google Cloud CLI 時,您可以為現有 bucket 建立複製工作。

如要建立複寫作業,請使用 gcloud alpha transfer jobs create 指令並加上 --replication 旗標:

gcloud alpha transfer jobs create gs://SOURCE_BUCKET_NAME gs://DESTINATION_BUCKET_NAME --replication

取代:

  • SOURCE_BUCKET_NAME 替換成要複製的來源值區名稱。例如:my-source-bucket

  • DESTINATION_BUCKET_NAME 替換為目的地 bucket 的名稱。例如:my-destination-bucket

REST API

JSON API

使用 JSON API 時,您可以為現有 bucket 建立複寫工作。

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 建立包含 TransferJob 物件的 JSON 檔案,並初始化 ReplicationSpec 資源

    TransferJob {
     "name": "TRANSFER_JOB_NAME",
     ...
     ReplicationSpec: {
       "gcsDataSource": {
         "bucketName": "SOURCE_BUCKET_NAME"
       },
       "gcsDataSink" {
         "bucketName": "DESTINATION_BUCKET_NAME"
       },
       "objectConditions": {
       },
       "transferOptions": {
         "overwriteWhen": "OVERWRITE_OPTION"
       }
     }
     ...
    }

    取代:

    • TRANSFER_JOB_NAME 改成您要指派給複製作業的名稱。如要瞭解命名規定,請參閱transferJobs參考說明文件

    • SOURCE_BUCKET_NAME,其中包含要複製的物件。例如:example-source-bucket

    • DESTINATION_BUCKET_NAME,並將其替換為要複製物件的目標值區名稱。例如:example-destination-bucket

    • OVERWRITE_OPTION,並提供選項,說明如何覆寫目的地值區中現有的物件 (如果目的地物件和來源物件的名稱相同,就可能發生這種情況)。這個值必須是下列其中一種:

      • ALWAYS:一律覆寫目的地值區中的物件

      • DIFFERENT:只有在目標物件資料與來源物件資料不同時,才覆寫目標值區中的物件

      • NEVER:絕不覆寫目的地 bucket 中的物件

  3. 使用 cURL 透過 transferJobs.create 要求呼叫 Storage 移轉服務 REST API

    curl -X POST --data-binary @JSON_FILE_NAME \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs"

    其中:

    • JSON_FILE_NAME 是您在步驟 2 建立的 JSON 檔案名稱。

如要查看複製作業的狀態,請查看 Storage Transfer Service 記錄的 Cloud Logging

列出複製工作

控制台

如需如何使用 Google Cloud 控制台列出複製作業的說明,請參閱「使用 Google Cloud 控制台列出複製作業」。

指令列

使用加上 --job-type 旗標的 gcloud alpha transfer jobs list 指令:

gcloud alpha transfer jobs list --job-type=replication

REST API

JSON API

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 cURL 透過 transferJobs.list 要求呼叫 Storage 移轉服務 REST API

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs"

查看複製工作

控制台

如需透過 Google Cloud 控制台查看複寫工作的操作說明,請參閱「使用 Google Cloud 控制台查看複寫工作」。

指令列

使用 gcloud alpha transfer jobs describe 指令:

gcloud alpha transfer jobs describe JOB_NAME

取代:

  • JOB_NAME,其中包含複製作業的專屬 ID。例如,1234567890。如要找出移轉工作 ID,請列出複製工作

REST API

JSON API

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 cURL 透過 transferJobs.get 要求呼叫 Storage 移轉服務 REST API

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    取代:

    • JOB_NAME,其中包含複製工作的專屬 ID。例如,1234567890。如要找出複製作業的 ID,請列出複製作業

更新複製工作

您可以更新複寫作業的下列欄位:

  • 複製工作的說明

  • 執行複寫作業的設定

  • 發布至 Pub/Sub 的通知設定

  • 複製作業的記錄行為

  • 複製作業的狀態 (已啟用、已停用或已刪除)

控制台

如需透過 Google Cloud 控制台更新複寫作業的指示,請參閱「使用 Google Cloud 控制台更新複寫作業」。

指令列

使用 gcloud alpha transfer jobs update 指令,並加上可控制要更新的複寫作業屬性的旗標。如需可能旗標的清單,請參閱 gcloud alpha transfer jobs update 說明文件

舉例來說,如要更新複製作業的物件覆寫行為,請執行 gcloud alpha transfer jobs update 指令並加上 --overwrite-when 旗標:

gcloud alpha transfer jobs update JOB_NAME --overwrite-when=OVERWRITE_OPTION

取代:

  • JOB_NAME,其中包含複製作業的專屬 ID。例如,1234567890。如要找出移轉工作 ID,請列出查看移轉工作。

  • OVERWRITE_OPTION,並提供選項,說明如何覆寫目的地值區中現有的物件 (這可能是複製作業的結果,也可能發生在目的地物件和來源物件的名稱相同時)。這個值必須是下列其中一個:

    • always:一律覆寫目的地物件。

    • different:只有在目標物件資料與來源物件資料不同時,才覆寫目標值區中的物件。

    • never:絕不覆寫目的地物件。

REST API

JSON API

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 建立 JSON 檔案,內含下列結構,其中包含要更新的 TransferJob 物件欄位:

    {
     "projectId": string,
     "transferJob": {
       object (TransferJob)
     },
       "updateTransferJobFieldMask": UPDATE_MASK
    }

    其中:

    • object (TransferJob) 會替換為您要更新的複寫作業欄位。詳情請參閱「TransferJob資源表示法」。

    • UPDATE_MASK 是以半形逗號分隔的欄位名稱清單,列出您要更新的欄位。值可以是一或多個下列項目:descriptiontransferSpecnotificationConfigloggingConfigstatus

    如要進一步瞭解可加入的欄位名稱,請參閱 transferJobs.patch 要求主體

  3. 使用 cURL 透過 transferJobs.patch 要求呼叫 Storage 移轉服務 REST API

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    取代:

    • JOB_NAME,其中包含複製工作的專屬 ID。例如,1234567890。如要找出複製作業的 ID,請列出複製作業

刪除複製工作

控制台

如需透過 Google Cloud 控制台刪除複寫工作的操作說明,請參閱「使用 Google Cloud 控制台刪除複寫工作」。

指令列

使用 gcloud alpha transfer jobs delete 指令:

gcloud alpha transfer jobs delete JOB_NAME

取代:

  • JOB_NAME,其中包含複製作業的專屬 ID。例如,1234567890。如要找出複製作業的 ID,請列出複製作業

REST API

JSON API

  1. 安裝並初始化 gcloud CLI,以便為 Authorization 標頭產生存取權杖。

  2. 使用 cURL 透過 transferJobs.delete 要求呼叫 Storage 移轉服務 REST API

    curl -X DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://storagetransfer.googleapis.com/v1/transferJobs/JOB_NAME"

    取代:

    • JOB_NAME,其中包含複製工作的專屬 ID。例如,1234567890。如要找出複製作業的 ID,請列出複製作業