Cloud Firestore の import / export やってみた


Firebase の import / export 機能がきたので、実際に試してみました。
Export and import data | Firebase

流れとしては以下のようになります。

  • gcloud のコマンドを使って Cloud Storage に export データを保存
  • import も Cloud Storage にあるデータを Firestore に復元

所感としては、いい感じに動いてそうです。

事前準備

Before you begin

  • 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 all documents

全件 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 専門の用途として使うべきでしょう。