このページでは、クロスバケット レプリケーションの概要と、この機能の使用方法について説明します。
クロスバケット レプリケーションの概要
場合によっては、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 を使用する場合は、既存のバケットのレプリケーション ジョブを作成できます。
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。初期化された
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
: 転送先バケット内のオブジェクトを上書きしません
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
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。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
以下のように置き換えます。
JOB_NAME
は、レプリケーション ジョブの一意の ID に置き換えます。例:1234567890
転送ジョブの ID を確認するには、レプリケーション ジョブを一覧表示します。
REST API
JSON API
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。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"
以下のように置き換えます。
JOB_NAME
は、レプリケーション ジョブの一意の ID に置き換えます。例:1234567890
レプリケーション ジョブの ID を確認するには、レプリケーション ジョブを一覧表示します。
レプリケーション ジョブを更新する
レプリケーション ジョブの次のフィールドを更新できます。
レプリケーション ジョブの説明
レプリケーション ジョブ実行の構成
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
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。更新する
TransferJob
オブジェクトのフィールドを含む次の構造を含む JSON ファイルを作成します。{ "projectId": string, "transferJob": { object (TransferJob) }, "updateTransferJobFieldMask": UPDATE_MASK }
ここで
object (TransferJob)
は、更新するレプリケーション ジョブのフィールドに置き換えます。詳細については、TransferJob
リソース表現をご覧ください。UPDATE_MASK
は、更新するフィールド名のカンマ区切りのリストです。値は、description
、transferSpec
、notificationConfig
、loggingConfig
、status
のいずれかになります。
含めることができるフィールド名の詳細については、
transferJobs.patch
リクエストの本文をご覧ください。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"
以下のように置き換えます。
JOB_NAME
は、レプリケーション ジョブの一意の ID に置き換えます。例:1234567890
レプリケーション ジョブの ID を確認するには、レプリケーション ジョブを一覧表示します。
レプリケーション ジョブを削除する
Console
レプリケーション ジョブを削除する 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
gcloud CLI のインストールと初期化を行います。これにより、
Authorization
ヘッダーのアクセス トークンを生成できます。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"
以下のように置き換えます。
JOB_NAME
は、レプリケーション ジョブの一意の ID に置き換えます。例:1234567890
レプリケーション ジョブの ID を確認するには、レプリケーション ジョブを一覧表示します。