Standard エディションから Enterprise エディションに移行する

Firestore Standard エディションのデータベースから Firestore Enterprise エディションのデータベースにデータを移行するには、次のいずれかのオプションを使用することをおすすめします。

  • インポート機能とエクスポート機能。インポート オペレーションのデータファイルは、Enterprise エディションと Standard エディションの両方と互換性があります。

  • firestore-to-firestore Dataflow テンプレート。 Dataflow サービスを使用するとデータ パイプラインを構築できます。firestore-to-firestore テンプレートは、Firestore データベース間にバッチ パイプラインを作成します。

インポートとエクスポートは、構成オプションが少なく、実行が簡単なオプションです。

Dataflow テンプレートはカスタマイズ性が高くなっています。 テンプレート コードを拡張して、部分的な移行やデータの変換を行うことができます。ワーカーの数とサイズを制御することもできます。

どちらのオプションでも、プロジェクトとリージョンをまたぐ移行がサポートされています。

エクスポートとインポートでデータを移行する

エクスポート オペレーションとインポート オペレーションでデータを移行するには、 データをエクスポートしてインポートするをご覧ください。 別のプロジェクトのデータベースにデータを移動するには、 プロジェクト間でデータを移動するをご覧ください。

Dataflow テンプレートでデータを移行する

firestore-to-firestore Dataflow テンプレートを使用してデータを移行する手順は次のとおりです。

始める前に

  1. データ移行を開始する前に、 ポイントインタイム リカバリ(PITR)が 移行元データベースで有効になっていることを確認してください。Dataflow ジョブは PITR を使用して、PITR タイムスタンプでデータを読み取ります。PITR が無効になっている場合、ジョブが 1 時間以上実行されると失敗します。

  2. 次のセクションで説明する必要なロールを割り当てます。

必要なロール

あるデータベースから別のデータベースにデータを移行するには、次のロールを割り当てます。 必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  1. 新しいデータベースを作成して Firestore データにアクセスするために必要な権限を取得するには、プロジェクトに対する Cloud Datastore オーナーroles/datastore.owner)Identity and Access Management(IAM)ロールを付与するよう管理者に依頼してください。
  2. Dataflow ジョブに Firestore データベースへの読み取り / 書き込みアクセス権を付与するには、Dataflow ワーカー サービス アカウント(PROJECT_NUMBER-compute@developer.gserviceaccount.com など)に、プロジェクトに対する Cloud Datastore ユーザーroles/datastore.user)IAM ロールを割り当てます。

    Dataflow のセキュリティの詳細については、 Dataflow のセキュリティと権限をご覧ください。

IAM ロールの付与については、 プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

1. 新しい Firestore Enterprise エディションのデータベースを作成する

Standard エディションのデータベースから Enterprise エディションのデータベースにデータを移行するには、まず Enterprise エディションの宛先データベースを作成する必要があります。 データベースを作成するをご覧ください。

2. Dataflow firestore-to-firestore テンプレートを実行する

firestore-to-firestore テンプレートを使用して Dataflow ジョブを構成して実行します。このテンプレートでは、データベース全体または指定したコレクション グループのみを移行できます。

制限事項

firestore-to-firestore Dataflow テンプレートには次の制限事項があります。

  • 移行元データベースは Standard エディションのデータベースである必要があります。
  • 移行では、特定の読み取り時点のデータが読み取られます。移行元データベースで ポイントインタイム リカバリ(PITR)を有効にすることをおすすめします。PITR が有効になっていない場合、データは 1 時間後に期限切れになるため、データ移行が完了するまでに十分な時間がない可能性があります。 PITR を使用すると、データ保持期間が 7 日間に延長されます。
  • インデックスは移行されません。
  • Dataflow ジョブでは、有効期間(TTL)ポリシー、バックアップ、PITR、顧客管理の暗号鍵(CMEK)などのデータベース構成は移行されません。

    これらの設定は、新しいデータベースで構成する必要があります。データ移行の速度を向上させるには、移行が完了してから宛先データベースで TTL、バックアップ、PITR を構成します。

次の例は、Google Cloud CLI を使用してテンプレートを実行する方法を示しています。

すべてのデータを移行

すべてのデータを移行するには、次のコマンドを使用します。

gcloud dataflow flex-template run "JOB_NAME" \
  --project "PROJECT" \
  --template-file-gcs-location gs://dataflow-templates-REGION_NAME/VERSION/flex/Cloud_Firestore_to_Firestore \
  --region REGION_NAME \
  --parameters "sourceProjectId=SOURCE_PROJECT_ID" \
  --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \
  --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \
  --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \
  --parameters "readTime=READ_TIME"

次のように置き換えます。

  • JOB_NAME: ジョブの名前。
  • PROJECT: 実際の Google Cloud プロジェクト ID。
  • REGION_NAME: Dataflow ジョブを実行するGoogle Cloud ロケーション。 データベースに近いロケーションを使用します。
  • VERSION: 使用するテンプレートのバージョン。使用できる値は次のとおりです。

    • latest:最新バージョンのテンプレートを使用します。このテンプレートは、バケット内の 日付のない親フォルダ( gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内の対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • SOURCE_PROJECT_ID: Firestore Standard エディションのデータベースを含む移行元 Google Cloud プロジェクトの ID。

  • SOURCE_DATABASE_ID: 移行元 Firestore データベースの ID。

  • DESTINATION_PROJECT_ID: 新しい Firestore データベースの宛先 Google Cloud プロジェクトの ID。

  • DESTINATION_DATABASE_ID: 宛先 Firestore データベースの ID。

  • READ_TIME: 移行元データベースからデータを読み取るタイムスタンプ。RFC 3339 形式のタイムスタンプ(2026-05-15T16:31:00.00Z など)を分単位で設定します。

    有効なタイムスタンプの最小値は、ポイントインタイム リカバリ(PITR) の設定によって異なります。以前のバージョンの時刻を取得するをご覧ください。

指定したコレクション グループを移行する

特定のコレクション グループのみを移行するには、次のコマンドを使用します。

gcloud dataflow jobs run "JOB_NAME" \
  --project "PROJECT" \
  --gcs-location gs://dataflow-templates-REGION_NAME/VERSION/Cloud_Firestore_to_Firestore \
  --region REGION_NAME \
  --parameters "sourceProjectId=SOURCE_PROJECT_ID" \
  --parameters "sourceDatabaseId=SOURCE_DATABASE_ID" \
  --parameters "collectionGroupIds=COLLECTION_GROUP_IDS" \
  --parameters "destinationProjectId=DESTINATION_PROJECT_ID" \
  --parameters "destinationDatabaseId=DESTINATION_DATABASE_ID" \
  --parameters "readTime=READ_TIME"

次のように置き換えます。

  • JOB_NAME: ジョブの名前。
  • PROJECT: 実際の Google Cloud プロジェクト ID。
  • REGION_NAME: Dataflow ジョブを実行するGoogle Cloud ロケーション。 データベースに近いロケーションを使用します。
  • VERSION: 使用するテンプレートのバージョン。使用できる値は次のとおりです。

    • latest:最新バージョンのテンプレートを使用します。このテンプレートは、バケット内の日付のない親フォルダ(gs://dataflow-templates-REGION_NAME/latest/)にあります。
    • バージョン名(例: 2023-09-12-00_RC00)。特定のバージョンのテンプレートを使用します。このテンプレートは、バケット内の対応する日付の親フォルダ(gs://dataflow-templates-REGION_NAME/)にあります。
  • SOURCE_PROJECT_ID: Firestore Standard エディションのデータベースを含む移行元 Google Cloud プロジェクトの ID。

  • SOURCE_DATABASE_ID: 移行元 Firestore データベースの ID。

  • COLLECTION_GROUP_IDS: 移行するコレクション グループ ID のカンマ区切りのリスト。

    サブコレクションは再帰的に含まれません。たとえば、 users コレクション グループを指定した場合、移行には /users/userid/messagesmessages サブコレクションは含まれません。 messages コレクション グループも指定してください。

  • DESTINATION_PROJECT_ID: 新しい Firestore データベースの宛先 Google Cloud プロジェクトの ID。

  • DESTINATION_DATABASE_ID: 宛先 Firestore データベースの ID。

  • READ_TIME: 移行元データベースからデータを読み取るタイムスタンプ。RFC 3339 形式のタイムスタンプ(2026-05-15T16:31:00.00Z など)を分単位で設定します。

    有効なタイムスタンプの最小値は、ポイントインタイム リカバリ(PITR) の設定によって異なります。以前のバージョンの時刻を取得するをご覧ください。

3. データベースを構成する

firestore-to-firestore ジョブはデータのみを移行します。インデックスやその他のデータベース設定は移行されません 。データの移行に加えて、新しいデータベースで次の構成を行うことを検討してください。

データベースを構成したら、新しいデータベースでアプリのテストを続行できます。完全な移行を行うには、新しいデータベースを使用するようにアプリケーションを更新します。

トラブルシューティング

大規模なデータベースの場合、一度に読み取るデータが多すぎるとジョブが失敗することがあります。 この問題を解決するには:

次のステップ