0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Firestoreのプロジェクト間移行を少しだけ楽にやってみた

Last updated at Posted at 2025-05-22

以下は完全に自分用でメモ程度にまとめたものなので、詳細は公式ドキュメントまたは参考になった記事を参照されることをおすすめします。

経緯

本来の手順としてはざっくり以下のようなフローだが、

(移行元)Firestore → (移行元)Cloud Storage → (移行後)Cloud Storage → (移行後)Firestore

Cloud Storageに対してサービスアカウントがプロジェクト間をクロスするような形で運用することが想定される。実際にやってみたところ、移行元のCloud Storageにて移行先のサービスアカウントに対する権限の付与や、gcloudでの設定の切り替えが煩雑になってしまい手間取ってしまった。ついでにどのロールが必要になるのか試行錯誤しながらやったため時間がかかってしまった。( "Storage レガシー読み取り" が必要ってわからないよ…)

以下のようなフローで実施したことにより、ちょっとだけ楽ができた&自分にとってはわかりやすかったので備忘録として残しておきます。

(移行元)Firestore → (移行元)Cloud Storage → ローカルへダウンロード → (移行先)Cloud Storageへアップロード → (移行後)Firestore

Firebase/GCPコンソール上でもある程度は操作できますが、Google Cloud SDK(CLI)で作業しています。

1. 移行元プロジェクトでの手順

  1. Cloud Storageにて、Firestoreのデータベースと同じリージョンでバケットを作成する

  2. Google Cloud SDKで操作する際は、Firestoreで使用するサービスアカウントに次の権限が付与されるようにする

    • Storage オブジェクト 管理者
    • Storage レガシー バケット 読み取り
  3. 権限を付与したサービスアカウントのキーをダウンロードする

    gcloud iam service-accounts keys create ~/path/to/key.json \
    --iam-account=<your-serviceaccount@iam.gserviceaccount.com>
    
  4. サービスアカウントを認証する

    gcloud auth activate-service-account \
    <your-serviceaccount@iam.gserviceaccount.com> \
    --key-file=~/paht/to/key.json
    
  5. 認証したサービスアカウントをデフォルトプロジェクト・アカウントに設定

    gcloud config set project <src-project-id>
    gcloud config set account <your-serviceaccount@iam.gserviceaccount.com>
    
  6. Firestore → Cloud Storage にエクスポート

    gcloud firestore export `
    <エクスポート先バケット>/<エクスポートプレフィックス> `
    --project=<src-project-id>
    

2. ローカルでの手順

  1. Cloud Storageからローカルへ再帰的にダウンロード

    gsutil -m cp -r `
    <エクスポート先バケット>/<エクスポートプレフィックス> `
    <ローカル保存先>
    

3. 移行先プロジェクトでの作業

  1. 移行先プロジェクト・サービスアカウントに切り替える

    gcloud config set project <dest-project-id>
    gcloud config set account <your-serviceaccount@iam.gserviceaccount.com>
    
  2. 移行先プロジェクトでのサービスアカウントにCloud Storage, Firestoreの権限を付与する

    • Storage オブジェクト 管理者
  3. ローカルからCloud Storageへ再帰的アップロード

    gsutil -m cp -r `
    <ローカル保存先パス>\<エクスポートプレフィックス> `
    <アップロード先バケット>
    
  4. Firestoreでデータベース名 (default) を作成しておく

  5. Cloud Storage から Firestore へインポート

    gcloud firestore import `
    <アップロード先バケット>/<エクスポートプレフィックス> `
    --project=<dest-project-id>
    

なお、Firestoreへはデータベース名が (default) でインポートされるが、任意のデータベース名を指定してインポートできるかは未確認

参考

https://firebase.google.com/docs/firestore/manage-data/move-data?hl=ja&_gl=1*1rrrwmf*_up*MQ..*_ga*MTYyNjMxNDYyNS4xNzQ3OTAyMzYw*_ga_CW55HF8NVT*czE3NDc5MDIzNTkkbzEkZzAkdDE3NDc5MDIzNTkkajAkbDAkaDAkZHlUc2RTaHpIcDNiWXAxMGFVaUJ6bW8tNUJvZ2k4QXRqVnc.

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?