Open3
【Firestore】データのインポート・エキスポート
Firestoreからexport ➡︎ Firebase Emulatorにimport
- firebaseにログイン
$ firebase login
- 使うprojectを指定
$ firebase projects:list
$ firebase use <your-project-name>
- 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 を持つすべてのコレクションとサブコレクション(任意のパス上)が含まれる
- exportデータをコピー
作業中のfunctionsディレクトリにexportデータをコピー
$ cd functions
$ gsutil -m cp -r gs://<your-project-name>.appspot.com/<your-choosen-folder-name> <コピーしたファイルを置くディレクトリ>
- exportデータをimportしてemulatorを起動
$ firebase emulators:start --import <ファイルを置いたディレクトリ>/<your-choosen-folder-name>
Exportしたデータを他のfirebase projectにimport
- gcloud cliでfirestoreのexport 参考
export元のprojectでfirestoreのデータを指定のストレージbucketにexport
$ gcloud firestore export gs://<your-project-name>.appspot.com/<your-chosen-folder-name>
- ローカルのfirebase projectをimport先のprojectに設定
$ firebase use hogehoge
- コマンドラインでimportしたいexportデータを指定
$ gcloud firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
-
[BUCKET_NAME]
:exportデータが保存されているstorage名 -
[EXPORT_PREFIX]
:フォルダ名
- Permissionがない場合
- 別プロジェクトにあるbucketにアクセスするには権限が設定されている必要がある
- PERMISSION_DENIEDのエラーが出たら権限を付与する必要がある
$ gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:admin \ gs://[SOURCE_BUCKET]
-
[DESTINATION_PROJECT_ID]
:実際にfirebaseなどで操作してるproject名と若干異なる可能性があるので、エラーに表示されているリソース名を使うと良い
Import・Exportオペレーションの確認
- 上記importやexportコマンドを実行するとoperationが始まる
- Operationの進捗確認
$ gcloud firestore operations describe [OPERATION_NAME]
- Operationの履歴
gcloud firestore operations list
参考