クロスバケット レプリケーションを使用する

このページでは、クロスバケット レプリケーションの概要と、この機能の使用方法について説明します。

クロスバケット レプリケーションの概要

場合によっては、Cloud Storage バケット間でデータをコピーする必要がある場合があります。クロスバケット レプリケーションは、新規オブジェクトと更新されたオブジェクトをソースバケットから宛先バケットに非同期でコピーします。

クロスバケット レプリケーションは、データが 2 つのバケットに存在し、それぞれにストレージのロケーション、暗号化、アクセス、ストレージ クラスなどの独自の構成がある点で、デフォルトのレプリケーションやターボ レプリケーションとは異なります。その結果、データ復旧と可用性が実現されるだけでなく、次のような場合にも適しています。

  • データ主権: 地理的に離れたリージョンにまたがるデータを維持します。
  • 開発環境と本番環境で異なるバージョンを維持: 別個のバケットと名前空間を作成して、開発環境が本番環境のワークロードに影響しないようにします。
  • データ共有: ベンダーまたはパートナーが所有するバケットにデータを複製します。
  • データ集約: さまざまなバケットのデータを 1 つのバケットに結合して、分析ワークロードを実行します。
  • 費用、セキュリティ、コンプライアンスの管理: さまざまな所有権、ストレージ クラス、保持期間でデータを維持します。

クロスバケット レプリケーションでは、Storage Transfer Service を使用してオブジェクトを複製し、Pub/Sub を使用してソースバケットと宛先バケットの変更に関するアラートを受信します。クロスバケット レプリケーションは、作成した新しいバケットと既存のバケットで有効にできます。ほとんどのオブジェクトは数分で複製できますが、1 GiB を超えるオブジェクトでは数時間かかることがあります。

始める前に

始める前に、次の手順を行います。

Storage Transfer Service API を有効にする

まだ有効にしていない場合は、Storage Transfer Service API を有効にします。

必要なロールを取得する

クロスバケット レプリケーションを使用するのに必要な権限を取得するには、バケットまたはプロジェクトに対するストレージ転送ユーザーroles/storagetransfer.user)IAM ロールを付与するよう管理者に依頼します。

この事前定義ロールには、クロスバケット レプリケーションを使用するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

バケット間レプリケーションを使用するには、次の権限が必要です。

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

バケットに対してロールを付与する手順については、バケットで IAM を使用するをご覧ください。 プロジェクトにロールを付与する手順については、プロジェクトへのアクセス権を管理するをご覧ください。

必要な役割の付与

クロスバケット レプリケーションは、Pub/Sub を使用してソースバケットの変更通知を受け取り、Storage Transfer Service を使用してソースバケットから宛先バケットにオブジェクトを複製します。クロスバケット レプリケーションを使用するには、Storage Transfer Service がデータのレプリケーションに使用するサービス エージェントと、Pub/Sub が通知の書き込みに使用するサービス エージェントに必要な権限を付与する必要があります。

Storage Transfer Service サービス エージェントに必要なロールを付与する

Storage Transfer Service は、Google 管理のサービス エージェントを使用してデータを複製します。このサービス エージェントのメールアドレスは、project-PROJECT_NUMBER@storage-transfer-service. という名前の形式になります。Storage Transfer Service サービス エージェントのメールアドレスは、Storage Transfer Service googleServiceAccounts.get API を使用して取得できます。

Storage Transfer Service サービス エージェントは、オブジェクトを複製し、ソースバケットの Pub/Sub 通知を設定するために、次の権限が必要です。

必要な権限

  • ソースバケットと宛先バケットに対する storage.buckets.get
  • ソースバケットに対する storage.buckets.update
  • ソースバケットに対する storage.objects.list
  • ソースバケットに対する storage.objects.get
  • 宛先バケットに対する storage.objects.rewrite
  • プロジェクトに対する pubsub.topics.create
  • プロジェクトに対する pubsub.subscriptions.create
  • プロジェクトに対する pubsub.subscriptions.consume

これらの権限は、Pub/Sub 編集者(roles/pubsub.editor)ロールとストレージ管理者(roles/storage.admin)ロールから付与できます。ストレージ管理者ロールよりも権限が少ないロールの場合は、カスタムロールを使用することもできます。

Cloud Storage サービス エージェントに必要なロールを付与する

Cloud Storage は、Google 管理のサービス エージェントを使用して Pub/Sub 通知を管理します。このサービス エージェントのメールアドレスは、service-PROJECT_NUMBER@gs-project-accounts. の命名形式に従います。

Cloud Storage サービス エージェントは、Pub/Sub を設定してトピックにメッセージをパブリッシュするために、次の権限が必要です。

必要な権限

  • Pub/Sub トピックの pubsub.topics.publish
  • Pub/Sub トピックの pubsub.subscriptions.consume
  • プロジェクトに対する pubsub.subscriptions.create

これらの権限は、Pub/Sub パブリッシャー(roles/pubsub.publisher)ロールから付与できます。

レプリケーション ジョブを作成する

Console

レプリケーション ジョブを作成する Google Cloud コンソール の手順については、Google Cloud コンソール を使用してレプリケーション ジョブを作成するをご覧ください。

コマンドライン

Google Cloud CLI を使用する場合は、既存のバケットのレプリケーション ジョブを作成できます。

レプリケーション ジョブを作成するには、--replication フラグを指定して gcloud alpha transfer jobs create コマンドを使用します。

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

以下のように置き換えます。

  • SOURCE_BUCKET_NAME は、複製するソースバケットの名前に置き換えます。例: my-source-bucket

  • DESTINATION_BUCKET_NAME は、宛先バケットの名前に置き換えます。 例: my-destination-bucket

REST API

JSON API

JSON API を使用する場合は、既存のバケットのレプリケーション ジョブを作成できます。

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. 初期化された ReplicationSpec リソースが含まれる TransferJob オブジェクトを含む JSON ファイルを作成します

    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: 転送先バケット内のオブジェクトを上書きしません

  3. cURL を使用して、transferJobs.create リクエストで Storage Transfer Service 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 を表示します。

レプリケーション ジョブを一覧表示する

Console

レプリケーション ジョブを一覧表示する Google Cloud コンソール の手順については、Google Cloud コンソール を使用してレプリケーション ジョブを一覧表示するをご覧ください。

コマンドライン

gcloud alpha transfer jobs list コマンドを使用し、--job-type フラグを指定します。

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

REST API

JSON API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. cURL を使用してtransferJobs.list リクエストで Storage Transfer Service REST API を呼び出します。

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

レプリケーション ジョブを表示する

Console

レプリケーション ジョブを表示する Google Cloud コンソール の手順については、Google Cloud コンソール を使用してレプリケーション ジョブを表示するをご覧ください。

コマンドライン

gcloud alpha transfer jobs describe コマンドを使用します。

gcloud alpha transfer jobs describe JOB_NAME

以下のように置き換えます。

REST API

JSON API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. cURL を使用してtransferJobs.get リクエストで Storage Transfer Service 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"

    以下のように置き換えます。

レプリケーション ジョブを更新する

レプリケーション ジョブの次のフィールドを更新できます。

  • レプリケーション ジョブの説明

  • レプリケーション ジョブ実行の構成

  • Pub/Sub に公開される通知の構成

  • レプリケーション ジョブ オペレーションのロギング動作

  • レプリケーション ジョブのステータス(有効、無効、削除済み)

Console

レプリケーション ジョブを更新する Google Cloud コンソール の手順については、Google Cloud コンソール を使用してレプリケーション ジョブを更新するをご覧ください。

コマンドライン

更新するレプリケーション ジョブのプロパティを制御するフラグを指定して、gcloud alpha transfer jobs update コマンドを使用します。使用可能なフラグの一覧については、gcloud alpha transfer jobs update のドキュメントをご覧ください。

たとえば、レプリケーション ジョブのオブジェクトの上書き動作を更新するには、--overwrite-when フラグを指定して gcloud alpha transfer jobs update コマンドを実行します。

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. 更新する TransferJob オブジェクトのフィールドを含む次の構造を含む JSON ファイルを作成します

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

    ここで

    • object (TransferJob) は、更新するレプリケーション ジョブのフィールドに置き換えます。詳細については、TransferJob リソース表現をご覧ください。

    • UPDATE_MASK は、更新するフィールド名のカンマ区切りのリストです。値は、descriptiontransferSpecnotificationConfigloggingConfigstatus のいずれかになります。

    含めることができるフィールド名の詳細については、transferJobs.patch リクエストの本文をご覧ください。

  3. cURL を使用して、transferJobs.patch リクエストで Storage Transfer Service 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"

    以下のように置き換えます。

レプリケーション ジョブを削除する

Console

レプリケーション ジョブを削除する Google Cloud コンソール の手順については、Google Cloud コンソール を使用してレプリケーション ジョブを削除するをご覧ください。

コマンドライン

gcloud alpha transfer jobs delete コマンドを使用します。

gcloud alpha transfer jobs delete JOB_NAME

以下のように置き換えます。

REST API

JSON API

  1. gcloud CLI のインストールと初期化を行います。これにより、Authorization ヘッダーのアクセス トークンを生成できます。

  2. cURL を使用してtransferJobs.delete リクエストで Storage Transfer Service 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"

    以下のように置き換えます。