【速報】Firebase Cloud Firestoreがexport / importに対応しました
こんにちは。
クラウドソリューショングループのwatanabe.tです。
Google Cloud Next ’18でアップデートが予告されていた、Cloud Firestoreの複数のアップデートがついに行われました。
今回はその中でも多くの人の待望であった、Cloud Firestoreのexport / import機能のサポートについてお話します。
事前準備
Cloud Firestoreでexport/importをサポートする上でいくつか準備して置かなければいけないことがあります。
Blazeプランへのアップデート
Cloud Firestoreのexport/importはBlazeプランでのみ有効です。
Spark、Flameプランを使用している人は、プロジェクトのプランをBlazeに変更する必要があります。
export先のCloud StorageのBucketを作成する
データはCloud Storageにエクスポートされるため、GCPのコンソールからCloud StorageにBucketを作成しておきましょう。
このとき、Cloud Firestoreのリージョンと同一のリージョンに作成するのが推奨されているので、Multi-Regional : 米国で作成しておきます。
gcloudコマンドのセットアップ
Cloud Firestoreのデータのエクスポートにはgcloudコマンドを利用するため、gcloudコマンドのセットアップを行います。
まずは、Firebaseのプロジェクトと紐付けるため、GCPのコンソールにアクセスして、Cloud Shellから以下のコマンドを実行します。
PROJECT_ID
はFirebaseコンソールの プロジェクトの設定
、またはGCPコンソールの左上から プロジェクトの選択
で確認することができます。
gcloud config set project [PROJECT_ID]
次に、gcloudコマンドの最新のalpha版にしかfirestoreオプションが実装されていないため、以下のコマンドを実行してgcloudコマンドをアップデートします。
sudo gcloud components update
データのExport
準備は整ったので、いよいよエクスポート作業に入ります。
ただし、このエクスポートはエクスポート開始時の完全なスナップショットではないことに注意が必要です。
操作の実行中にデータに変更が加えられると、その変更も反映される場合があるようです。
では、以下のコマンドを実行してデータをエクスポートしてみましょう。
ちなみに、データを非同期でエクスポートしたい場合は --async
をつければOKです。
gcloud alpha firestore export gs://[BUCKET_NAME]
また、特定のコレクションのみエクスポートしたい場合は --collection-ids
を使いましょう。
gcloud alpha firestore export gs://[BUCKET_NAME] --collection-ids='[COLLECTION_ID_1]','[COLLECTION_ID_2]'
これでエクスポートしたデータがCloud Storageにファイルとして作成されます。
ただし、ファイルはjsonなどの形式でエクスポートされるわけでは無いようで、あくまでバックアップを目的としたもののようです。
データのImport
次にexportしたデータをimportしてみましょう。
このときの注意点としては、エクスポートしたデータにはインデックス情報が含まれていないため、カスタムインデックスを使用するには再度インデックスを張り直す必要があることです。
では、エクスポートしたデータのバケットとプレフィックスを指定して以下のコマンドを実行します。
gcloud alpha firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
他のプロジェクトのインポートにも対応しているとのことで、バックアップだけでなくレプリカのような使い方もできるかもしれませんね。
まとめ
ようやく待望のデータバックアップを行えるようになりました。
これで間違ってコレクションを消してしまって真っ青、なんてことからおさらばすることができますね。
ただし、注意しなくてはならないのは料金です。
この機能自体には料金は発生しませんが、エクスポートするための読み取りオペレーションやインポートするための書き込みオペレーション、Cloud Storageの使用料はかかります。
気づいたらすごい料金が発生していた、なんてことにならないよう十分注意しましょう。