バケットを再配置する

このページでは、バケットをあるロケーションから別のロケーションに再配置するプロセスについて説明します。バケットの再配置については、バケットの再配置をご覧ください。

始める前に

バケットを再配置する前に、次のことを完了します。

  1. Storage Intelligence を構成します

  2. 削除(復元可能)を有効にします

  3. 割り当てと上限を確認して、新しいロケーションにバケットのデータに対応できる十分な割り当てがあることを確認します。

  4. バケットの再配置タイプを決定して、書き込みのダウンタイムが必要かどうかを確認します。

  5. 既存のバケットタグを削除します

  6. インベントリ レポートを使用する場合は、構成を保存します。

  7. 次のセクションで説明する必要なロールを取得します。

必要なロールを取得する

バケットの再配置に必要な権限を取得するには、プロジェクトに対するストレージ管理者roles/storage.admin)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

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

必要な権限

バケットを再配置するには、次の権限が必要です。

  • バケットを再配置する: storage.buckets.relocate
  • バケットの再配置オペレーションのステータスを表示する: storage.bucketOperations.get
  • プロジェクトのバケット再配置オペレーションのリストを表示する: storage.bucketOperations.list
  • バケットの再配置オペレーションをキャンセルする: storage.bucketOperations.cancel
  • バケットの再配置のドライラン増分データのコピーのフェーズでバケットのメタデータを表示する: storage.buckets.get
  • 再配置するバケット内のオブジェクトを取得する: storage.objects.get
  • 再配置するバケット内のオブジェクトを一覧表示する: storage.objects.list

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

バケットを再配置する

このセクションでは、Cloud Storage バケットをあるロケーションから別のロケーションに再配置するプロセスについて説明します。バケットを再配置する場合は、増分データコピー プロセスを開始してモニタリングし、最終同期ステップを開始します。これらの手順の詳細については、バケットの再配置プロセスを理解するをご覧ください。

ドライランの実行

バケットの再配置プロセス中に発生する可能性のある問題を最小限に抑えるため、ドライランを実行することをおすすめします。ドライランでは、データを移動せずにバケットの再配置プロセスをシミュレートするため、問題を早期に発見して解決できます。ドライランでは、次の非互換性が確認されます。

ドライランでは、リアルタイムのリソースの可用性などの要因により、ライブ マイグレーション中にのみ発生する問題があるため、考えられるすべての問題を特定することはできませんが、実際の再配置中に時間のかかる問題が発生するリスクを軽減できます。

コマンドライン

バケットの再配置のドライランをシミュレートします。

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run

ここで

  • BUCKET_NAME は、再配置するバケットの名前です。

  • LOCATION は、バケットの宛先ロケーションです。

ドライランを開始すると、長時間実行オペレーションが開始されます。オペレーション ID とオペレーションの説明が返されます。長時間実行オペレーションの詳細を取得して、ドライランの進行状況と完了を追跡します。

ドライランで問題が見つかった場合は、増分データのコピーステップを開始する前に問題を解決します。

REST API

JSON API

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

  2. バケットの設定を含む JSON ファイルを作成します。この設定には、destinationLocation パラメータと validateOnly パラメータを含める必要があります。設定の全リストについては、Buckets: relocate のドキュメントをご覧ください。一般的な設定は次のとおりです。

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "true"
    }

    ここで

    • DESTINATION_LOCATION は、バケットの宛先ロケーションです。
    • LOCATIONS は、構成可能なデュアルリージョンに使用するロケーション コードのリストです。
    • validateOnly はドライランを実行するために true に設定されています。
  3. cURL を使用して JSON API を呼び出します。

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.s3nsapis.fr/storage/v1/b/bucket=BUCKET_NAME/relocate"

    ここで

    • JSON_FILE_NAME は、作成した JSON ファイルの名前です。
    • BUCKET_NAME は、再配置するバケットの名前です。

    ドライランを開始すると、長時間実行オペレーションが開始されます。次の条件を満たしている場合、ドライランは成功しています。

    • ドライランでエラーが報告されていない。
    • operations リソースが done フィールド値として true を返している。

      {
      "kind": "storage#operation",
      "name": "projects/_/buckets/bucket/operations/operation_id",
      "metadata": {
        "@type": OperationMetadataType*,
        metadata OperationMetadata*
      },
      "done": "true",
      "response": {
        "@type": ResponseResourceType*,
        response ResponseResource*
      }
      }

    ドライランで問題が見つかった場合は、増分データのコピーステップを開始する前に問題を解決します。

増分データのコピーを開始する

コマンドライン

バケットの再配置オペレーションを開始します。

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION

ここで

  • BUCKET_NAME は、再配置するバケットの名前です。

  • LOCATION は、バケットの宛先ロケーションです。

REST API

JSON API

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

  2. バケットの設定を含む JSON ファイルを作成します。設定の全リストについては、Buckets: relocate のドキュメントをご覧ください。一般的な設定は次のとおりです。

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "false"
    }

    ここで

    • DESTINATION_LOCATION は、バケットの宛先ロケーションです。
    • LOCATIONS は、構成可能なデュアルリージョンに使用するロケーション コードのリストです。
    • validateOnlyfalse に設定され、バケットの再配置の増分データコピー ステップが開始されます。
  3. cURL を使用して JSON API を呼び出します。

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.s3nsapis.fr/storage/v1/b/bucket=BUCKET_NAME/relocate"

    ここで

    • JSON_FILE_NAME は、作成した JSON ファイルの名前です。
    • BUCKET_NAME は、再配置するバケットの名前です。

増分データのコピーをモニタリングする

バケットの再配置プロセスは長時間実行オペレーションであるため、進行状況を確認するためにモニタリングが必要です。長時間実行オペレーションのリストを定期的に確認して、増分データのコピーステップのステータスを確認できます。長時間実行オペレーションの詳細を取得する方法、長時間実行オペレーションのリストを表示する方法、長時間実行オペレーションをキャンセルする方法については、Cloud Storage で長時間実行オペレーションを使用するをご覧ください。

次の例は、増分データのコピー オペレーションによって生成される出力を示しています。

  done: false
  kind: storage#operation
  metadata:
  '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketMetadata
  commonMetadata:
    createTime: '2024-10-21T04:26:59.666Z
    endTime: '2024-12-29T23:39:53.340Z'
    progressPercent: 99
    requestedCancellation: false
    type: relocate-bucket
    updateTime: '2024-10-21T04:27:03.2892'
  destinationLocation: US-CENTRAL1
  finalizationState: 'READY'
  progress:
    byteProgressPercent: 100
    discoveredBytes: 200
    remainingBytes: 0
    discoveredObjectCount: 10
    remainingObjectCount: 8
    objectProgressPercent: 100
    discoveredSyncCount: 8
    remainingSyncCount: 0
    syncProgressPercent: 100
  relocationState: SYNCING
  sourceLocation: US
  validateOnly: false
  estimatedWriteDowntimeDuration: '7200s'
  writeDowntimeExpireTime: '2024-12-30T10:34:01.786Z'
  name: projects//buckets/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
  response:
    '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketResponse
      selfLink: https://storage.googleusercontent.com/storage/v1_ds/b/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
 

次の表は、増分データのコピー オペレーションによって生成される出力のキーフィールドに関する情報を示しています。

フィールド名 説明 設定可能な値
done バケットの再配置オペレーションの完了を示します。 truefalse
kind このリソースがストレージ オペレーションを表すことを示します。
metadata オペレーションに関する情報を示します。
metadata.@type オペレーションのタイプがバケットの再配置であることを示します。
metadata.commonMetadata すべてのオペレーションに共通のメタデータ。
metadata.commonMetadata.createTime 長時間実行オペレーションが作成された時刻。
metadata.commonMetadata.endTime 長時間実行オペレーションが終了した時刻。
metadata.commonMetadata.progressPercent 長時間実行オペレーションのおおよその進行状況(パーセント)。 0100% の値。-1 の値は、進行状況が不明か、利用できないことを意味します。
metadata.commonMetadata.requestedCancellation ユーザーが長時間実行オペレーションのキャンセルをリクエストしたかどうかを示します。 truefalse
metadata.commonMetadata.type 長時間実行オペレーションのタイプを示します。
metadata.commonMetadata.updateTime 長時間実行オペレーションが最後に更新された時刻。
metadata.destinationLocation バケットの宛先ロケーション。
metadata.finalizationState 最終同期ステップ開始の準備状況を示します。
  • READY: 最終同期ステップを開始できることを示します。ただし、progressPercent フィールドの値が 99 に達するまで待つことをおすすめします。
  • WAITING_ON_SYNC: 最終同期ステップを開始できないことを示します。
  • NOT_REQUIRED: このバケットでは最終同期ステップが不要であり、スキップできることを示します。
  • BLOCKED_ON_ERRORS: エラーが原因でファイナライズ ステップが一時停止されていることを示します。ステップを続行するには、エラーを解決する必要があります。
  • RUNNING: ファイナライズ ステップが進行中であることを示します。
  • FINALIZED: ファイナライズ ステップが正常に完了したことを示します。
metadata.progress 再配置オペレーションの進行状況の詳細。
metadata.progress.byteProgressPercent コピーされたバイト数の進行状況(%)。 0100% の値。-1 の値は、進行状況が不明か、利用できないことを意味します。
metadata.progress.discoveredBytes ソースバケットで検出されたバイト数。
metadata.progress.discoveredObjectCount ソースバケットで検出されたオブジェクトの数。
metadata.progress.discoveredSyncCount ソースバケットで検出されたオブジェクト メタデータの更新数。
metadata.progress.objectProgressPercent コピーされたオブジェクトの進捗状況(%)。 0100% の値。-1 の値は、進行状況が不明か、利用できないことを意味します。
metadata.progress.remainingBytes ソースバケットから宛先バケットにコピーする残りのバイト数。
metadata.progress.remainingObjectCount ソースバケットから宛先バケットにコピーする残りのオブジェクトの数。
metadata.progress.remainingSyncCount 同期する残りのオブジェクト メタデータの更新数。
metadata.progress.syncProgressPercent 同期するオブジェクト メタデータの更新の進行状況(%)。 0100% の値。-1 の値は、進行状況が不明か、利用できないことを意味します。
metadata.relocationState バケットの再配置オペレーションの全体的な状態。
  • SYNCING: 増分データのコピーステップで、ソースバケットから宛先バケットにオブジェクトがアクティブにコピーされていることを示します。
  • FINALIZING: ファイナライズ ステップが開始されたことを示します。
  • FAILED: 増分データのコピーステップでエラーが発生し、正常に完了しなかったことを示します。
  • SUCCEEDED: 増分データのコピーステップが正常に完了したことを示します。
  • CANCELLED: 増分データのコピーステップがキャンセルされたことを示します。
metadata.sourceLocation バケットのソース ロケーション。
metadata.validateOnly バケットの再配置のドライランが開始されたかどうかを示します。 truefalse
metadata.estimatedWriteDowntimeDuration 書き込みのダウンタイムの推定時間。finalizationStateREADY になると値が入ります。 最小値は 7200s です。
metadata.writeDowntimeExpireTime 書き込みのダウンタイムが終了する時刻。
name この再配置オペレーションの固有識別子。
形式: projects/_/buckets/bucket-name/operations/operation-id
response オペレーションのレスポンス。
response.@type レスポンスのタイプ。
selfLink このオペレーションへのリンク。

他の Cloud Storage 機能と連携する際に問題が発生した場合は、制限事項をご覧ください。

最終同期ステップを開始する

最終同期ステップでは、バケットに対して書き込みオペレーションを実行できない期間があります。最終同期ステップは、アプリケーションの中断を最小限に抑える時間にスケジュールすることをおすすめします。

続行する前に、増分データのコピーステップの出力で finalizationState 値を確認して、バケットが完全に準備されていることを確認します。続行するには、finalizationState の値が READY である必要があります。

最終同期ステップを早期に開始すると、コマンドからエラー メッセージ The relocate bucket operation is not ready to advance to finalization running state が返されますが、再配置プロセスは続行されます。

progressPercent 値が 99 になるまで待ってから、最終同期ステップを開始することをおすすめします。

コマンドライン

finalizationState の値が READY になったら、バケットの再配置オペレーションの最終同期ステップを開始します。

gcloud storage buckets relocate --finalize --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

ここで

  • BUCKET_NAME は、再配置するバケットの名前です。
  • OPERATION_ID: 長時間実行オペレーションの ID。この ID は、呼び出したメソッドのレスポンスとして返されます。たとえば、gcloud storage operations list の呼び出しから次のレスポンスが返された場合、長時間実行オペレーション ID は AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74 です。
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

ttl フラグを設定すると、再配置プロセスをより細かく制御できます。例:

gcloud storage buckets relocate --finalize --ttl TTL_DURATION --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

ここで

TTL_DURATION は、再配置プロセス中の書き込みダウンタイム フェーズの有効期間(TTL)です。文字列として表されます(12 時間の場合は 12h など)。TTL_DURATION は、書き込みのダウンタイム フェーズで許容される最長時間を決定します。書き込みのダウンタイムがこの上限を超えると、再配置プロセスは自動的に増分コピーステップに戻り、バケットへの書き込みオペレーションが再度有効になります。値は 6h(6 時間)~48h(48 時間)の範囲内である必要があります。指定しない場合、デフォルト値は 12h(12 時間)です。

REST API

JSON API

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

  2. バケットの再配置の設定を含む JSON ファイルを作成します。設定の全リストについては、Buckets: advanceRelocateBucket のドキュメントをご覧ください。一般的な設定は次のとおりです。

    {
        "expireTime": "EXPIRE_TIME",
        "ttl": "TTL_DURATION"
    }

    ここで

    • EXPIRE_TIME は、書き込みのダウンタイムが期限切れになる時刻です。
    • TTL_DURATION は、再配置プロセス中の書き込みダウンタイム フェーズの有効期間(TTL)です。文字列として表されます(12 時間の場合は 12h など)。TTL_DURATION は、書き込みのダウンタイム フェーズで許容される最長時間を決定します。書き込みのダウンタイムがこの上限を超えると、再配置プロセスは自動的に増分コピーステップに戻り、バケットへの書き込みオペレーションが再度有効になります。値は 6h(6 時間)~48h(48 時間)の範囲内である必要があります。指定しない場合、デフォルト値は 12h(12 時間)です。
  3. cURL を使用して JSON API を呼び出します。

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.s3nsapis.fr/storage/v1/b/bucket/BUCKET_NAME/operations/OPERATION_ID/advanceRelocateBucket"

    ここで

    • JSON_FILE_NAME は、作成した JSON ファイルの名前です。
    • BUCKET_NAME は、再配置するバケットの名前です。
    • OPERATION_ID: 長時間実行オペレーションの ID。この ID は、呼び出したメソッドのレスポンスとして返されます。たとえば、Operations: list の呼び出しから次のレスポンスが返された場合、長時間実行オペレーション ID は AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74 です。

バケットの再配置プロセスを検証する

再配置を開始したら、正常に完了したことを確認します。このセクションでは、データの転送が正常に完了したことを確認する方法について説明します。

次の方法で、再配置プロセスが正常に完了したことを確認します。

  • 長時間実行オペレーションをポーリングする: バケットの再配置は長時間実行オペレーションです。operation id を使用して長時間実行オペレーションをポーリングして、オペレーションの進行状況のモニタリングし、success 状態を検証することで、オペレーションが正常に完了したことを確認できます。これには、オペレーションが完了状態に達するまで、オペレーションのステータスを定期的にクエリする必要があります。長時間実行オペレーションのモニタリングについては、Cloud Storage で長時間実行オペレーションを使用するをご覧ください。

  • Cloud Audit Logs エントリを分析する: Cloud Audit Logs は、 Trusted Cloud by S3NS 環境のイベントとオペレーションの詳細な記録を提供します。再配置に関連付けられた Cloud Audit Logs エントリを分析して、成功を確認できます。転送中に問題の可能性を示唆するエラー、警告、予期しない動作がないかログを分析します。Cloud Audit Logs でのログの表示については、監査ログの表示をご覧ください。

    次のログエントリは、移動が成功したかどうかを判断するのに役立ちます。

    • 再配置に成功: Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • 再配置に失敗: Relocate bucket has failed. Bucket location remains unchanged.

    Pub/Sub 通知を使用して、特定の成功または失敗イベントがログに表示されたときに通知するアラートを設定することもできます。Pub/Sub 通知の設定については、Cloud Storage の Pub/Sub 通知を構成するをご覧ください。

バケットの再配置後のタスクを完了する

バケットの再配置が正常に完了したら、次の手順を完了します。

  1. 省略可: バケットのタグベースのアクセス制御を復元します。
  2. 既存のインベントリ レポートの構成は、再配置プロセス中に保持されないため、手動で再作成する必要があります。インベントリ レポート構成の作成については、インベントリ レポート構成を作成するをご覧ください。
  3. Terraform や Google Kubernetes Engine 構成コネクタなどの Infrastructure as Code 構成を更新して、バケットの新しいロケーションを指定します。
  4. リージョン エンドポイントは特定のロケーションに関連付けられているため、新しいエンドポイントを反映するようにアプリケーション コードを変更する必要があります。

失敗したバケットの再配置オペレーションを処理する方法

失敗したバケットの再配置オペレーションを処理する前に、次の要素を検討してください。

  • バケットの再配置に失敗すると、一時ファイルや不完全なデータコピーなどの古いリソースが宛先に残る可能性があります。同じ宛先への別のバケットの再配置を開始するには、7~14 日間待つ必要があります。別の宛先へのバケットの再配置は、すぐに開始できます。

  • 宛先ロケーションがデータに最適な場所でない場合は、再配置をロールバックすることをおすすめします。ただし、すぐに再配置を開始することはできません。再び再配置プロセスを開始するには、最長 14 日間の待機期間が必要です。この制限事項は、安定性を確保し、データの競合を防ぐために設けられています。

次のステップ