バックアップしたfirestoreをリストアする手順

こんにちは。[もぐめっと](https://mogmet.com)です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/234a1f0f-8f66-ae32-38cc-bf566e5b23ee.png)
最近フードかぶった状態でしか写真をとってないため深刻な自分の写真素材不足です。上は膝怪我して完治してないけどつい飛びたくなって飛んでしまったの図です。

今回はあまりやらないであろうfirestoreのリストアする手順を説明します。

詳細は下記になります。

https://firebase.google.com/docs/firestore/manage-data/export-import?hl=ja#import_data

まっさらなプロジェクトを立ててそこに対してリストアできるか検証します。

## 前準備

新規firebaseプロジェクトを立ててfirestoreを有効化しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/c2710de5-94f1-1228-b10c-eea566b829c3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/67d202d1-be6d-9e23-ad4e-79a53bd7bf57.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/f6be71f1-28df-fb62-071a-41a16b183ba6.png)

また、プランをBlazeにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/0c6e9c3b-1f1e-8a11-3b27-9f0087c45a45.png)


次にバックアップしているファイルをダウンロードします。
Cloud Storageを見に行きますが、、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/94d6b938-f481-6c85-4b12-c3bb4a27bca2.png)
firebaseの管理画面からはいっぺんにダウンロードする方法がありません。
いっぺんにダウンロードするにはgsutilコマンドを用いる必要があるようです。

※gsutilのインストールは下記を参照

https://cloud.google.com/storage/docs/gsutil_install?hl=ja

https://zenn.dev/phi/articles/gcloud-setup-with-homebrew-on-mac

下記のように実行してダウンロードしましょう。（今回は2022-03-17T18:00:07_91656ディレクトリを対象とした。）

```
gsutil -m cp -r \
  "gs://{cloud storageのバケット名}/2022-03-17T18:00:07_91656" \
  .
```

次にバックアップファイルをリストア用のバケットに移動させます。

今回は別プロジェクトにインポートしようとしているため、リストア用のバケットを作成します。
[cloud storage](https://console.cloud.google.com/storage)でバケットを作成します。


バケットに名前をつけて続行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/5627d7c4-c462-556f-c1af-0217cd2b9f3b.png)

ロケーションタイプとロケーションを選択して続行。
ロケーションタイプは今回テスト用に一回しか使わないので最低のレイテンシでもいいとは思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/120a5ef0-f434-b7fd-801d-7ec81320abed.png)

ストレージクラスを選択して続行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/360cbf6c-9abb-69ee-5a06-73b4c4a82baa.png)

アクセス制御を選択して続行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/0c8689d8-d930-5033-011d-556d86e335b4.png)

保護方法を選択して続行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/12e0f7b9-5cfb-5d8c-beac-93c7c4969ecc.png)

バケットを作成したらバケットの詳細からフォルダをアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/982f5538-ac96-411e-8cd2-7bf17dacb975.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/1c73e49e-8f0c-b385-8933-6971b380c7f7.png)

いっぱいあるけどアップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/b2402966-f210-742f-4581-1cb0739f8e8f.png)

ようやくこれで準備完了です。

## リストア手順

Google Cloud Platform Console で Cloud Firestore の [[インポート / エクスポート]](https://console.cloud.google.com/firestore/import-export?hl=ja) ページに移動します。

[インポート]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/a626f991-5e97-82ee-5e23-d527494e13f5.png)

[参照]を押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/31900b1b-e8d8-bcbb-7836-b14e88460b8a.png)

先程作ったバケット内のリストアファイル（.overall_export_metadataファイル）を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/c56614a4-d87f-5012-4f41-63a5baf0965f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/734d5f90-5c13-6f0f-5c1b-0cf5a4bddfb2.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/8f70337c-eadd-bbc4-8787-d7e805dff5a7.png)

プロジェクトに問題ないか確認してからインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/e2d06a7a-cf52-1c1d-b569-169c481ea8eb.png)

しばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/8e162920-35dd-b703-e163-4db8e96e8a71.png)

時間がかかりましたが終わりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/24fe7bf6-0329-a11b-524b-4c99ac5dd3f2.png)


すると、なんということでしょう～。あんなに空っぽだったfirestoreに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/b2f858c9-4134-d791-839c-78caecc660fd.png)

データが現れました！！
![mosaic_20220318185634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42234/0cfac71e-5934-22ac-c42d-9b6a9ccf7a2a.png)

firestoreのルールはデフォルトのままなので自分で設定するようにしましょう。

## まとめ

Google Cloud Consoleを駆使することでリストアをすることができました！
バックアップはとりあえずとってるけどリストアできるかどうかはわからないというところ結構多いんじゃないかと思います。
いざというときに困らないようにバックアップを取った後にリストアできるかどうかもテストをして障害に備えておきましょう！！

最後に、[ワンナイト人狼オンライン](https://online.1nite-jinro.com/link/blog)というゲームを作ってます！よかったら遊んでね！

https://online.1nite-jinro.com/link/blog

他にも[Camecon](https://camecon.me/)や[Offcha](https://offcha.com/)といったサービスも作ってるのでよかったら使ってね！

https://camecon.me/

https://offcha.com/

また、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話も受け付けてますので御用の方は弊社までお問い合わせください。

https://virapture.com/