Open3

【Firestore】データのインポート・エキスポート

heyhey1028heyhey1028

Firestoreからexport ➡︎ Firebase Emulatorにimport

  1. firebaseにログイン
$ firebase login
  1. 使うprojectを指定
$ firebase projects:list
$ firebase use <your-project-name>
  1. gcloud cliでfirestoreのexport 参考
    firestoreのデータは選択したfirebase projectのcloud storageに排出されます
$ gcloud firestore export gs://<your-project-name>.appspot.com/<your-chosen-folder-name>
  • <your-project-name>にはexportデータの排出先のfirebase project名を指定
  • <your-chosen-folder-name>にはexportデータの排出先フォルダ名を指定
  • 特定のコレクションを指定したい場合は、--collection-ids パラメータで指定
$ gcloud firestore export gs://[BUCKET_NAME] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2]
  • 指定したコレクション ID を持つすべてのコレクションとサブコレクション(任意のパス上)が含まれる
  1. exportデータをコピー
    作業中のfunctionsディレクトリにexportデータをコピー
$ cd functions
$ gsutil -m cp -r gs://<your-project-name>.appspot.com/<your-choosen-folder-name> <コピーしたファイルを置くディレクトリ>
  1. exportデータをimportしてemulatorを起動
$ firebase emulators:start --import <ファイルを置いたディレクトリ>/<your-choosen-folder-name>
heyhey1028heyhey1028

Exportしたデータを他のfirebase projectにimport

  1. gcloud cliでfirestoreのexport 参考
    export元のprojectでfirestoreのデータを指定のストレージbucketにexport
$ gcloud firestore export gs://<your-project-name>.appspot.com/<your-chosen-folder-name>
  1. ローカルのfirebase projectをimport先のprojectに設定
$ firebase use hogehoge
  1. コマンドラインでimportしたいexportデータを指定
$ gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
  • [BUCKET_NAME]:exportデータが保存されているstorage名
  • [EXPORT_PREFIX]:フォルダ名
  1. Permissionがない場合
  • 別プロジェクトにあるbucketにアクセスするには権限が設定されている必要がある
  • PERMISSION_DENIEDのエラーが出たら権限を付与する必要がある
$ gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:admin \ gs://[SOURCE_BUCKET]
  • [DESTINATION_PROJECT_ID]:実際にfirebaseなどで操作してるproject名と若干異なる可能性があるので、エラーに表示されているリソース名を使うと良い