Firestoreのバックアップをローカルのemulatorにインポートする


手順

  1. firestoreのデータをエクスポート
  2. エクスポートされたデータをCloudStorageからダウンロード
  3. firestoreエミュレーターにダウンロードしたデータをインポートして起動する

1. firestoreのデータをエクスポート

くわしくはこちら参照

gcloud firestore export gs://{{project_name}}.appspot.com/ --async

2. エクスポートされたデータをCloudStorageからダウンロード

詳しくはこちら参照

$ gsutil -m cp -R gs://{{project_name}}.appspot.com/ ./store_export

3. firestoreエミュレーターにダウンロードしたデータをインポートして起動する

問題はここ。
ローカルでエミュレーターのデータをエクスポート/インポートに関してはこちらにあるがデータ形式をみたところCloudStorage上も同じようなので、同じようにファイルを指定すればインポートできましたが、ダウンロードしたそのままではできなかったため備忘録を残そうと思います。

firebase-export-metadata.jsonを作成

importオプションで指定するディレクトリ直下に作成します。
エミュレーターのエクスポートで生成されるファイルをベースにしています。
エミュレーターエクスポートした場合のファイル内容

firebase-export-metadata.json
{
  "version": "8.4.3",
  "firestore": {
    "version": "1.11.4",
    "path": "firestore_export",
    "metadata_file": "firestore_export/firestore_export.overall_export_metadata"
  }
}

jsonのpathとmetadata_fileを編集

pathはall_namespacesが直下にあるディレクトリパス。
metadata_fileは.overall_export_metadata のファイル名を指定する。

補足
overall_export_metadataのファイル名がそのままだと:が使われておりmacのfinderだと/になるので注意

インポートオプションを指定して起動

$ firebase emulators:start --only firestore --import {{firebase-export-metadata.jsonがあるディレクトリ}}