Firestore Standard エディションのデータベースから Firestore Enterprise エディションのデータベースにデータを移行するには、次のいずれかのオプションを使用することをおすすめします。
インポートとエクスポート機能。インポート オペレーションのデータファイルは、Enterprise エディションと Standard エディションの両方と互換性があります。
firestore-to-firestoreDataflow テンプレート。Dataflow サービスを使用するとデータ パイプラインを構築できます。また、firestore-to-firestoreテンプレートを使用すると、Cloud Firestore データベース間にバッチ パイプラインを作成できます。
インポートとエクスポートは、構成オプションが少なく、実行が簡単なオプションです。
Dataflow テンプレートはカスタマイズ性が高くなっています。テンプレート コードを拡張して、部分的な移行を実行したり、データを変換したりできます。ワーカーの数とサイズを制御することもできます。
どちらのオプションも、プロジェクトとリージョン間の移行をサポートしています。
エクスポートとインポートを使用してデータを移行する
エクスポート オペレーションとインポート オペレーションを使用してデータを移行するには、データのエクスポートとインポートをご覧ください。別のプロジェクトのデータベースにデータを移動するには、プロジェクト間でデータを移動するをご覧ください。
Dataflow テンプレートを使用してデータを移行する
firestore-to-firestore Dataflow テンプレートを使用してデータを移行する手順は次のとおりです。
始める前に
データ移行を開始する前に、移行元データベースでポイントインタイム リカバリ(PITR)が有効になっていることを確認してください。Dataflow ジョブは PITR を使用して、PITR タイムスタンプでデータを読み取ります。PITR が無効になっている場合、ジョブの実行時間が 1 時間を超えると、ジョブは失敗します。
次のセクションで説明する必要なロールを割り当てます。
必要なロール
データベース間でデータを移行するには、次のロールを割り当てます。必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
- 新しいデータベースを作成して Cloud Firestore データにアクセスするために必要な権限を取得するには、プロジェクトに対する Cloud Datastore オーナー(
roles/datastore.owner)Identity and Access Management(IAM)ロールを付与するよう管理者に依頼してください。 -
Dataflow ジョブに Cloud Firestore データベースに対する読み取り / 書き込みアクセス権を付与するには、Dataflow ワーカー サービス アカウント(
PROJECT_NUMBER-compute@など)に、プロジェクトに対する 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: ソース Cloud Firestore データベースの ID。DESTINATION_PROJECT_ID: 新しい Cloud Firestore データベースの宛先 Google Cloud プロジェクトの ID。DESTINATION_DATABASE_ID: 宛先 Cloud 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: ソース Cloud Firestore データベースの ID。COLLECTION_GROUP_IDS: 移行するコレクション グループ ID のカンマ区切りリスト。サブコレクションは再帰的に含まれません。たとえば、
usersコレクション グループを指定した場合、messagesコレクション グループも指定しない限り、移行には/users/userid/messagesのmessagesサブコレクションは含まれません。DESTINATION_PROJECT_ID: 新しい Cloud Firestore データベースの宛先 Google Cloud プロジェクトの ID。DESTINATION_DATABASE_ID: 宛先 Cloud Firestore データベースの ID。READ_TIME: ソース データベースからデータを読み取るタイムスタンプ。RFC 3339 形式のタイムスタンプ(2026-05-15T16:31:00.00Zなど)を分単位で設定します。有効な最も古いタイムスタンプは、ポイントインタイム リカバリ(PITR)の設定によって異なります。最も古いバージョンの時刻を取得するをご覧ください。
3. データベースを構成する
firestore-to-firestore ジョブはデータのみを移行します。インデックスやその他のデータベース設定は移行されません。データの移行に加えて、新しいデータベースで次の構成を行うことを検討してください。
インデックス: Firestore Enterprise エディションのデータベースでは、クエリの実行にインデックスが厳密に必要とされず、デフォルトで自動インデックスが作成されません。クエリのインデックスを作成するには、以下をご覧ください。
- Firestore Enterprise エディションのインデックスの概要。
- インデックスを使用してクエリのパフォーマンスを最適化する。
- Firebase CLI を使用して、インデックスをエクスポートし、新しいデータベースにデプロイできます。
- Query Insights を使用して、インデックスで最適化できるクエリを特定します。
TTL: TTL ポリシーを作成する。
バックアップ: バックアップを設定します。
PITR: PITR を有効にします。
データベースを構成したら、新しいデータベースでアプリのテストを続行できます。移行を完了するには、新しいデータベースを使用するようにアプリケーションを更新します。
トラブルシューティング
データベースが大きい場合、一度に読み取るデータが多すぎると、ジョブが失敗する可能性があります。この問題を解決するには:
maxNumWorkers値を増やします。
次のステップ
- Pipeline オペレーションを使用したデータのクエリについて学習する。
- Firestore Enterprise エディションでクエリを最適化する方法について学習する
- Enterprise エディションのデータベースがスケーリングされる仕組みを理解する。