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