Firebase の import / export 機能がきたので、実際に試してみました。
Export and import data | Firebase
流れとしては以下のようになります。
- gcloud のコマンドを使って Cloud Storage に export データを保存
- import も Cloud Storage にあるデータを Firestore に復元
所感としては、いい感じに動いてそうです。
事前準備
- Blaze plan でないと import / export は利用できない
- export 用の Storage Bucket を作成
- Firestore, Cloud Storage の権限が適切か確認
Storage Bucket はこんな感じで作りました。
gcloud 設定
Set up gcloud for your project
GCP 管理画面から Shell を起動し、下記コマンドを打ちます。
gcloud config set project [PROJECT_ID]
Shell の起動はここからできます。
Google Cloud SDK のセットアップ
これはローカルでやります。
私は macOS なので https://cloud.google.com/sdk/docs/quickstart-macos から 64bit のを DL してセットアップしました。
基本的に手順通りにやれば良いのですが、 alpha は別途 install が必要です。
$ gcloud components list
│ Not Installed │ gcloud Alpha Commands │ alpha │ < 1 MiB │
デフォルトで aplha は利用できないので、 install して update します
$ gcloud components install alpha
$ gcloud components update
これで gcloud alpha firestore …
が利用できるようになります。
export
全件 export をしてみます。
$ gcloud alpha firestore export gs://firestore-export
Waiting for [projects/hoge/databases/(default)/operations/XxxxXxXXXxXXXXxXXXXXXXXXXxxxxxxxx] to finish...done.
metadata:
'@type': type.googleapis.com/google.firestore.admin.v1beta1.ExportDocumentsMetadata
operationState: PROCESSING
outputUriPrefix: gs://firestore-export/2018-08-09T02:15:18_53592
startTime: '2018-08-09T02:15:18.310360Z'
Storage を見てみると、このようなデータが作成されていました。
output-0 から大量のファイルができています。これがバックアップファイルのようです。
import
Import all documents from an export
先ほど export したデータを import します。
id が同一だとエラーになるので、一度全てのデータを削除して import しました。
$ Waiting for [projects/hoge/databases/(default)/operations/XxxxXxXXXxXXXXxXXXXXXXXXXxxxxxxxx] to finish...done.
metadata:
'@type': type.googleapis.com/google.firestore.admin.v1beta1.ImportDocumentsMetadata
inputUriPrefix: gs://firestore-export/2018-08-09T01:55:07_9048
operationState: PROCESSING
startTime: '2018-08-09T02:22:25.225520Z'
name: projects/hoge/databases/(default)/operations/XxxxXxXXXxXXXXxXXXXXXXXXXxxxxxxxx
Firestore の console をみると、 sub-collection 含めデータが復元されていました。
全てのデータのチェックはできないので完全かは不明ですが、ざっくり見た感じ問題はなさそうでした。
(import したデータを再度 export したら output ファイルの数が変わっていたので少し気になりますが)
Project A で export したものを Project B に import も試しましたが、問題なく実行されました。
export されたファイル
export されたファイルを BigQuery につっこめないかと思ったんですが難しそうです。
JSON 形式などなら良かったんですが、 vi で開くとこのようになっていました。
そのため、 backup 専門の用途として使うべきでしょう。