6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Firestoreコレクションをエクスポート/インポートで別プロジェクトに移行

Last updated at Posted at 2019-11-22

#Firestoreコレクションをエクスポート/インポートで別プロジェクトに移行

ぜったい忘れる。備忘録。
ちなみにこの作業はバックアップ/リストアにも使える。

###下準備①

  • 移行元プロジェクトと移行先プロジェクトをBlaze plan(従量課金制)にする。

###下準備②

$ sudo gcloud components update
$ gcloud config set project [PROJECT_ID]

※ PROJECT_IDはコレ。
image.png

###下準備③

  • Google Cloud StorageのBucketを作成しておく
    image.png
    image.png
    RegionはFirebaseプロジェクトと同じにする。
    image.png
    image.png
    image.png
    そのまま作成ボタン
    image.png

  • 作成したバケットに自分をストレージ管理者として追加。
    image.png
    image.png


###移行元プロジェクトからエクスポート 以下Cloud Shellでの作業。 念のため移行元プロジェクトにもう一度セット。
$ gcloud config set project [PROJECT_ID]

コレクションを作成したバケットにエクスポート。

$ gcloud beta firestore export gs://[バケット名] --collection-ids [コレクション名]

複数の場合

gcloud beta firestore export gs://[バケット名] --collection-ids='[コレクション名]','[コレクション名]'

※ バックアップ目的なら--collection-idsパラメータはつけない方がいいようだ。

成功したかどうか以下のコマンドで確認。

gcloud beta firestore operations list

done: trueとかoperationState: SUCCESSFULとか表示されているはず。

$ gcloud beta firestore operations list
---
done: true
metadata:
  '@type': type.googleapis.com/google.firestore.admin.v1.ExportDocumentsMetadata
  collectionIds:
  - [collectonName]
  endTime: '2019-11-21T08:13:23.707922Z'
  operationState: SUCCESSFUL
  outputUriPrefix: gs://xxxxxxx.appspot.com/2019-11-21T08:13:11_53544
  startTime: '2019-11-21T08:13:11.909308Z'
name: projects/xxxxx/databases/(default)/operations/ASAxMDMxxxxxx
response:
  '@type': type.googleapis.com/google.firestore.admin.v1.ExportDocumentsResponse
  outputUriPrefix: gs://xxxxxx.appspot.com/2019-11-21T08:13:11_53544
---

バケット内に2018-08-09T01:58:11_44344みたいな名前のフォルダができているのが確認できる。
image.png

###移行先プロジェクトへインポート

  • Cloud Shellで移行先プロジェクトにセットしておく。
$ sudo gcloud components update
$ gcloud config set project [PROJECT_ID]

PROJECT_IDはいわずもがな移行先プロジェクトのプロジェクトID

  • インポートコマンドを走らせる。
$ gcloud beta firestore import gs://[バケット名]/[バケット内のフォルダ名]

例えばこんな感じ

$ gcloud beta firestore import gs://collection_export_bucket/2019-10-19T08:11:39_12345/

たぶん以下のようなエラーが出る・・・

[Error] Error details: [移行先プロジェクト名]@appspot.gserviceaccount.com does not have storage.buckets.get access to commentsfaqs_bucket

まあ、そしたら [移行先プロジェクト名]@appspot.gserviceaccount.comというアカウント(サービスアカウントのようだ)をバケットの権限でストレージ管理者として追加してあげる。
そしてもう一度インポートコマンドを走らせる。

以下のコマンドで成功したことを確認して移行先プロジェクトに無事インポートできているはず。

$ gcloud beta firestore operations list

参考:
Cloud Firestoreのバックアップ・リストア

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?