コンテンツにスキップ

Firestoreエクスポート・インポート

Google Cloud Firestoreのデータをエクスポート・インポートする方法について説明します。

特定のコレクションをCloud Storageにエクスポートします。

Terminal window
# handlebarコレクションをエクスポート
gcloud firestore export gs://nerikosodev.appspot.com/firestore_export/handlebar --collection-ids=handlebar

エクスポートしたデータをFirestoreにインポートします。

Terminal window
# handlebarコレクションをインポート
gcloud firestore import gs://nerikosodev.appspot.com/firestore_export/handlebar --collection-ids=handlebar
  • gs://nerikosodev.appspot.com/firestore_export/handlebar: エクスポート先/インポート元のCloud Storageパス
  • --collection-ids=handlebar: 対象のコレクションID
Terminal window
# 複数のコレクションをエクスポート
gcloud firestore export gs://your-bucket/firestore_export/$(date +%Y%m%d_%H%M%S) \
--collection-ids=users,posts,comments
# 全コレクションをエクスポート(--collection-idsを省略)
gcloud firestore export gs://your-bucket/firestore_export/all_$(date +%Y%m%d_%H%M%S)
Terminal window
# エクスポート/インポート操作の一覧表示
gcloud firestore operations list
# 特定の操作の詳細確認
gcloud firestore operations describe [OPERATION_NAME]
Terminal window
# ソースプロジェクトからエクスポート
gcloud firestore export gs://source-bucket/firestore_export/data \
--project=source-project
# ターゲットプロジェクトにインポート
gcloud firestore import gs://source-bucket/firestore_export/data \
--project=target-project
#!/bin/bash
# 設定
PROJECT_ID="nerikosodev"
BUCKET="gs://${PROJECT_ID}.appspot.com"
COLLECTIONS=("handlebar" "users" "settings")
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
# 各コレクションをバックアップ
for collection in "${COLLECTIONS[@]}"; do
echo "エクスポート中: ${collection}"
gcloud firestore export "${BUCKET}/firestore_backup/${TIMESTAMP}/${collection}" \
--collection-ids="${collection}" \
--project="${PROJECT_ID}"
done
echo "バックアップ完了: ${TIMESTAMP}"
#!/bin/bash
# エクスポート一覧の確認
gsutil ls gs://nerikosodev.appspot.com/firestore_backup/
# 特定の日時のバックアップからリストア
BACKUP_PATH="gs://nerikosodev.appspot.com/firestore_backup/20240101_120000/handlebar"
# データのインポート
gcloud firestore import "${BACKUP_PATH}" --collection-ids=handlebar
# インポート状況の確認
gcloud firestore operations list --filter="metadata.operationType=IMPORT_DOCUMENTS"
  1. 権限: Cloud Storageへの読み書き権限とFirestoreの管理権限が必要
  2. コスト: エクスポート/インポート操作は読み取り・書き込み操作としてカウントされる
  3. データ整合性: エクスポート中もFirestoreは稼働しているため、完全な整合性は保証されない
  4. タイムスタンプ: エクスポート先のパスに日時を含めることを推奨
Terminal window
# サービスアカウントに必要な権限を付与
gcloud projects add-iam-policy-binding [PROJECT_ID] \
--member="serviceAccount:[SERVICE_ACCOUNT_EMAIL]" \
--role="roles/datastore.importExportAdmin"
Terminal window
# Cloud Storageバケットの存在確認
gsutil ls gs://nerikosodev.appspot.com/
# バケットへの書き込み権限確認
gsutil acl get gs://nerikosodev.appspot.com/