#Firestoreコレクションをエクスポート/インポートで別プロジェクトに移行
ぜったい忘れる。備忘録。
ちなみにこの作業はバックアップ/リストアにも使える。
###下準備①
- 移行元プロジェクトと移行先プロジェクトをBlaze plan(従量課金制)にする。
###下準備②
-
Google Cloud Shellにアクセスしておく。https://console.cloud.google.com/home/dashboard?cloudshell=true
-
Cloud Shellで移行元プロジェクトにセットしておく。
$ sudo gcloud components update
$ gcloud config set project [PROJECT_ID]
###下準備③
###移行元プロジェクトからエクスポート 以下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みたいな名前のフォルダができているのが確認できる。
###移行先プロジェクトへインポート
- 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