以前Firestoreのバックアップの手動での取り方がググってもちょっとわからなかったところがあったので
備忘録としてまとめておきます。
前提条件
- Sparkより上のプランに設定されている必要があります。(== Blazerプランを設定する必要がある. 2020/09/30現在)
- FirestoreとFirestorageの権限を持っておく必要があります。
動作環境
確認した環境は以下の環境です。
macOS Catalina バージョン10.15.6(19G2021) gcloud CLI Google Cloud SDK 312.0.0 bq 2.0.61 core 2020.09.25 gsutil 4.53
手順
gcloud CLIをインストール
こちらのサイト( https://cloud.google.com/sdk/docs/quickstart?hl=ja )を参考にgloud SDKをインストールします。
インストールができたら、下記コマンドを実行し、バックアップを実行するアカウントでログインします。
gcloud auth login
上記コマンドを実行すると、ブラウザが開くのでログインしたいアカウントを選択するとログインできます。
下記コマンドでログインしているアカウントを確認します。
gcloud auth list
実行すると、下記の様な画面が表示されます。 gyazo.com
下記コマンドで、有効なSDK構成のプロパティのリストを表示します。
gcloud config list
上記コマンドを実行後、下記の様な内容が表示され、現在選択されているプロジェクトIDとアカウントを確認することが可能です。 gyazo.com
下記コマンドで、現在ログイン中のアカウントに紐づいているFirebaseのプロジェクト一覧が表示されるのでバックアップを取りたいプロジェクトであるか確認します。
gcloud projects list
下記コマンドで、対象のプロジェクトを設定することができます。
gcloud config set project $project_id
1つ前のコマンドで表示されたプロジェクトから設定したいプロジェクトのプロジェクトIDを$project_idに入力し、設定します。
e.g.) project IDが「hogehoge」の場合のコマンドは
gcloud config set project hogehoge
です。再度glocud config listで対象のプロジェクトが選択されているか確認します。
対象のプロジェクトのStoregeにバケットを作成していない場合は下記手順を参考にbackup用のバケットを作成します。
- Blazerプランの場合はCloud Storageのロケーションを選択することができた。Sparkプランで選択できない様になっていました。
Firebase Consoleでバックアップ用のバケットを作成します。
既に用意されている場合は飛ばしてください。
gyazo.com リージョンはasiaを選択した。(どのリージョンが良いかは調査していない為、今度調査を行う。)
下記コマンドを実行し、現在のfirestoreのデータをエクスポート(backupを保存)します。
gcloud firestore export $bucket_path
実行すると、指定したバケットにfirestoreのドキュメントのバックアップが保存されます。 gyazo.com
- バックアップしたfirestoreのドキュメントをインポートする場合は、下記のコマンドで実行できます。
gcloud firestore import $buckup_baket_path
- $buckup_baket_pathはインポートしたいバックアップのフォルダのパスを設定します。
- 上記の画像に記載しているバックアップをインポートする場合のコマンドは、
gcloud firestore import gs://xxxx-xxxx/2020-09-30T02:48:40_62280
です。
- 上記の画像に記載しているバックアップをインポートする場合のコマンドは、
上記でバックアップのエクスポートとインポートについては以上です。
インポート時の注意点
前述したFirestoreのドキュメントのインポートで反映される内容には一点気をつける点があります。
それはバックアップ後に追加されたドキュメントは削除されないということです。
バックアップ時に保存されているドキュメントは全てバックアップ時にフィールドなども戻る為そこは気にしなくても良いと思います。
文字だけだとわかりづらいので具体例を記載します。
usersコレクションに1つドキュメントがある状態でエクスポートします。
バックアップ時の状態 gyazo.com
この後、新しいドキュメントをusersコレクションに追加する。 gyazo.com
また、元々あったドキュメントに新しいフィールド'answer'を追加し、nameフィールドを変更します。 gyazo.com
この状態で、先ほどとったバックアップをインポートします。
インポート後は下記の様な状態になります。 gyazo.com
- 画像を確認すると、バックアップ後に追加したドキュメントはそのまま残っています。
バックアップ後に追加したドキュメントの内容を添付します。 gyazo.com
- バックアップ時に存在していた1つ目のドキュメントはバックアップ時に戻っていることが確認できます。
以上です。