Help us understand the problem. What is going on with this article?

Firestore exportによるバックアップの確認をして気づいたこと

Firestoreのexportを使ってデータのバックアップができるようになりましたが、実際にできるか確認した際に気づいたことを書きます。

※ export/import方法についてはこちらになります。

import実行後のドキュメントの状況

Firestore中のドキュメントに関して、export後の操作とimport後の状態は次の通りです。

ドキュメントの種類 import後の状態
export後に修正したドキュメント export時の状態に戻る
export後に削除したドキュメント export時のものが復元される
export後に追加したドキュメント そのまま残る

「import」になるのでexport後に追加されたドキュメントはそのまま残ります。

Cloud FunctionsのonUpdateが発火する

importの際に、FirestoreをイベントトリガーにするCloud Functionsがいる場合は注意が必要です。

export後に修正されたドキュメントが、importによってexport前に戻る際にonUpdateが発火します
しかし一方、export後に削除されたドキュメントが、importによって復元される際にはonCreateは発火しません

この理由は理解できていないのですが、自分の環境で確認した際はそのような振る舞いをしていました。

collection-idsを指定した場合サブコレクションはexportされない(※追記あり)

collection-idsオプションを指定すると、特定のコレクションだけexportできるのですが、サブコレクションはexportされないようです。

例えば次のようにコマンドを打った場合、exportの対象はusersコレクション中のドキュメントが直接もつフィールドのみになります。もしusersのドキュメントにfollowersというサブコレクションがあった場合、followersは復元されません。

$ gcloud alpha firestore export gs://firestore-export --collection-ids='users'
$ gcloud alpha firestore import --collection-ids='users' gs://firestore-export/2018-11-01T00:00:00_00000/

ちなみにimportの際にcollection-idsを指定しないとMissing input fileというエラーになってしまいました。
また、自分が試した限りではcollection-idsはトップにあるコレクションでないとimportできませんでした。

2020/4/25追記

collection-idsはcollection groupに対して行われるようです。なので、usersとは別にfollowersをexportすれば、サブコレクションも対応できそうです。

exportでFirestore全体のバックアップを行うには

Firestoreの状態を完全に副作用なくexport時の状態にするには次のような手順になると思います。

  • export/importはcollection-idsを指定せずに実行
  • importは全データを削除してから実行

状況によってはcollection-ids指定してもいいですし、全データ削除せずにimportして大丈夫ですが、もし上の手順で行う場合は別環境でシミュレーションしてみた方がよさそうです。

最後に

まだFirestoreはベータですし、この辺りは振る舞いが変わる可能性が十分あると思いますので、Firestoreを導入する際にはバックアップ・リストアできるかテストしてみることをオススメします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした