データのバックアップと復元

このページでは、Cloud Firestore のスケジュール設定されたバックアップ機能を使用する方法について説明します。バックアップを使用して、アプリケーション レベルのデータ破損や偶発的なデータ削除からデータを保護します。

バックアップによって、指定したデータベースのバックアップを毎日、または毎週行うようにバックアップ スケジュールを構成できます。その後、これらのバックアップを使用して新しいデータベースにデータを復元できます。

バックアップについて

バックアップは、ある時点でのデータベースの一貫性のあるたコピーです。バックアップには、その時点でのすべてのデータとインデックス構成が含まれています。バックアップにデータベースの有効期間(TTL)ポリシーは含まれません。バックアップはソース データベースと同じロケーションに存在します。

バックアップは保持期間を構成でき、保持期間が終了するまで、またはバックアップを削除するまで保存されます。ソース データベースを削除しても、関連するバックアップは自動的に削除されません。

Cloud Firestore は、バックアップに関連するメタデータと、データベースに関連するバックアップ スケジュールを保存します。Cloud Firestore は、データベースのすべてのバックアップが期限切れになるか削除されるまで、このメタデータを保持します。

バックアップを作成または保持しても、ライブ データベースでの読み書きのパフォーマンスに影響はありません。

費用

バックアップを使用すると、以下の内容に対して課金されます。

  • 各バックアップで使用されるストレージの容量。
  • 復元オペレーションの場合は、バックアップのサイズに基づいて課金されます。

詳細と正確な料金については、料金のページをご覧ください。

準備

この機能を使用するには、Blaze 料金プランが必要です。

必要なロール

バックアップとバックアップ スケジュールを管理するために必要な権限を取得するには、次の Identity and Access Management ロールの 1 つ以上を付与するよう管理者に依頼します。

  • roles/datastore.owner: Cloud Firestore データベースに対する完全アクセス権
  • 以下のロールも使用できますが、Google Cloud コンソールには表示されません。Google Cloud CLI を使用して、次のロールを割り当てます。

    • roles/datastore.backupsAdmin: バックアップに対する読み取り / 書き込みアクセス権
    • roles/datastore.backupsViewer: バックアップに対する読み取りアクセス権
    • roles/datastore.backupSchedulesAdmin: バックアップ スケジュールに対する読み取り / 書き込みアクセス権
    • roles/datastore.backupSchedulesViewer: バックアップ スケジュールに対する読み取りアクセス権
    • roles/datastore.restoreAdmin: 復元オペレーションを開始する権限

バックアップ スケジュールを作成、管理する

以下の例は、バックアップ スケジュールを設定する方法を示しています。データベースごとに、最大 1 つの日次バックアップ スケジュールと、最大 1 つの週次バックアップ スケジュールを構成できます。異なる曜日について複数の週次バックアップ スケジュールを構成できません。

バックアップの日の正確な時刻は構成できません。バックアップは毎日異なる時刻に行われます。週次バックアップ スケジュールでは、バックアップを作成する曜日を構成できます。

バックアップ スケジュールを作成する

データベースのバックアップ スケジュールを作成するには、gcloud firestore backups schedules create コマンドまたは firebase firestore:databases:backups:schedules コマンドを使用します。

日次バックアップ スケジュールを作成する

gcloud
日次バックアップ スケジュールを作成するには、--recurrence フラグを daily に設定します。
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • RETENTION_PERIOD: これを最大 14 週間(14w)の値に設定します。
Firebase CLI
日次バックアップ スケジュールを作成するには、--recurrence フラグを DAILY に設定します。
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'DAILY' \
--retention RETENTION_PERIOD

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • RETENTION_PERIOD: これを最大 14 週間(14w)の値に設定します。
Terraform
日次バックアップ スケジュールを作成するには、google_firestore_backup_schedule リソースを作成します。
resource "google_firestore_backup_schedule" "daily-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  daily_recurrence {}
}

以下を置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • また、タイプ google_firestore_database の Terraform リソースに対するリソース リファレンスを使用することもできます。
  • RETENTION_PERIOD_SECONDS: 秒単位の値に設定し、後に「s」をつけます。最大値は 8467200s(14 週間)です。

週次バックアップ スケジュールを作成する

gcloud
週次バックアップ スケジュールを作成するには、--recurrence フラグを weekly に設定します。
gcloud firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY
次のように置き換えます。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • RETENTION_PERIOD: これを最大 14 週間(14w)の値に設定します。
  • DAY: バックアップを行う曜日。次のいずれかに設定します。
    • SUN(日曜日)
    • MON(月曜日)
    • TUE(火曜日)
    • WED(水曜日)
    • THU(木曜日)
    • FRI(金曜日)
    • SAT(土曜日)
Firebase CLI
週次バックアップ スケジュールを作成するには、--recurrence フラグを WEEKLY に設定します。
firebase firestore:backups:schedules:create \
--database 'DATABASE_ID' \
--recurrence 'WEEKLY' \
--retention RETENTION_PERIOD
--day-of-week DAY
次のように置き換えます。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • RETENTION_PERIOD: これを最大 14 週間(14w)の値に設定します。
  • DAY: バックアップを行う曜日。次のいずれかに設定します。
    • SUNDAY(日曜日)
    • MONDAY(月曜日)
    • TUESDAY(火曜日)
    • WEDNESDAY(水曜日)
    • THURSDAY(木曜日)
    • FRIDAY(金曜日)
    • SATURDAY(土曜日)
Terraform
週次バックアップ スケジュールを作成するには、google_firestore_backup_schedule リソースを作成します。
resource "google_firestore_backup_schedule" "weekly-backup" {
  project  = PROJECT_ID
  database = DATABASE_ID

  retention = RETENTION_PERIOD_SECONDS

  weekly_recurrence {
    day = DAY
  }
}

以下を置き換えます。

  • PROJECT_ID: プロジェクトの ID。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • また、タイプ google_firestore_database の Terraform リソースに対するリソース リファレンスを使用することもできます。
  • RETENTION_PERIOD_SECONDS: 秒単位の値に設定し、後に「s」をつけます。最大値は 8467200s(14 週間)です。
  • DAY: バックアップを行う曜日。次のいずれかに設定します。
    • SUNDAY(日曜日)
    • MONDAY(月曜日)
    • TUESDAY(火曜日)
    • WEDNESDAY(水曜日)
    • THURSDAY(木曜日)
    • FRIDAY(金曜日)
    • SATURDAY(土曜日)

バックアップ スケジュールを一覧表示する

データベースのすべてのバックアップ スケジュールを一覧表示するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups schedules list コマンドを使用します。
gcloud firestore backups schedules list \
--database='DATABASE_ID'
DATABASE_ID は、データベースの ID に置き換えます。デフォルトのデータベースには '(default)' を使用します。
Firebase CLI
firebase firestore:backups:schedules:list コマンドを使用します。
firebase firestore:backups:schedules:list \
--database 'DATABASE_ID'
DATABASE_ID は、データベースの ID に置き換えます。デフォルトのデータベースには '(default)' を使用します。

バックアップ スケジュールを記述する

バックアップ スケジュールに関する情報を取得するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups schedules describe コマンドを使用します。
gcloud firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
次のように置き換えます。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • BACKUP_SCHEDULE_ID: バックアップ スケジュールの ID。すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの ID を表示できます。

バックアップ スケジュールを更新する

バックアップ スケジュールの保持期間を更新するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups schedules update コマンドを使用します。
gcloud firestore backups schedules update \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID \
--retention=RETENTION_PERIOD
次のように置き換えます。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • BACKUP_SCHEDULE_ID: バックアップ スケジュールの ID。すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの ID を表示できます。
  • RETENTION_PERIOD: これを最大 14 週間(14w)の値に設定します。
Firebase CLI
firebase firestore:backups:schedules:update コマンドを使用します。
firebase firestore:backups:schedules:update \
BACKUP_SCHEDULE \
--retention RETENTION_PERIOD
次のように置き換えます。

バックアップ スケジュールの保持期間は更新できますが、繰り返しの設定は更新できません。繰り返し期間の異なるバックアップ スケジュールが必要な場合は、古いバックアップ スケジュールを削除し(今後は不要となる場合)、必要な繰り返し期間のバックアップ スケジュールを作成します。

バックアップ スケジュールを削除する

バックアップ スケジュールを削除するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups schedules delete コマンドを使用します。
gcloud firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID
次のように置き換えます。
  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は '(default)' に設定します。
  • BACKUP_SCHEDULE_ID: バックアップ スケジュールの ID。すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの ID を表示できます。
Firebase CLI
firebase firestore:backups:schedules:delete コマンドを使用します。
firebase firestore:backups:schedules:delete \
BACKUP_SCHEDULE
次のように置き換えます。

バックアップ スケジュールを削除しても、このスケジュールによってすでに作成されているバックアップは削除されないためご注意ください。保持期間が終了して期限切れになるのを待つか、バックアップの削除を参照して手動でバックアップを削除してください。

バックアップを管理する

バックアップを一覧表示する

利用可能なバックアップを一覧表示するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups list コマンドを使用します。
gcloud firestore backups list \
--format="table(name, database, state)"
--format="table(name, database, state)" フラグは、出力を読みやすい形式にフォーマットします。 特定のロケーションのバックアップのみを一覧表示するには、--location フラグを使用します。
gcloud firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"
LOCATION は、Cloud Firestore のロケーションの名前に置き換えます。
Firebase CLI
firebase firestore:backups:list コマンドを使用します。
firebase firestore:backups:list
特定のロケーションのバックアップのみを一覧表示するには、--location フラグを使用します。
firebase firestore:backups:list \
--location=LOCATION
LOCATION は、Cloud Firestore のロケーションの名前に置き換えます。

バックアップを記述する

バックアップの詳細を表示するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore backups describe コマンドを使用します。
gcloud firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID
次のように置き換えます。
Firebase CLI
firebase firestore:backups:get コマンドを使用します。
firebase firestore:backups:get BACKUP
次のように置き換えます。

バックアップを削除

バックアップを削除するには、次のいずれかの方法を使用します。警告: 削除したバックアップを復元することはできません。
gcloud
gcloud firestore backups delete コマンドを使用します。
gcloud firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID
次のように置き換えます。
Firebase CLI
firebase firestore:backups:delete コマンドを使用します。
firebase firestore:backups:delete \
BACKUP
次のように置き換えます。

データベースのバックアップからデータを復元する

復元オペレーションでは、バックアップからのデータが新しい Cloud Firestore データベースに書き込まれます。

復元オペレーションを開始するには、次のいずれかの方法を使用します。

gcloud
gcloud firestore databases restore コマンドを使用します。
gcloud firestore databases restore \
--source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
--destination-database='DATABASE_ID'
次のように置き換えます。
  • PROJECT_ID: プロジェクト ID。
  • LOCATION: データベースのバックアップのロケーションと、復元されたデータ用に作成された新しいデータベースのロケーション。
  • BACKUP_ID: バックアップの ID。すべてのバックアップを一覧表示すると、各バックアップの ID を確認できます。
  • DATABASE_ID: 新しいデータベースのデータベース ID。すでに使用中のデータベース ID は使用できません。
出力には、metadatanameresponse のコンポーネントが含まれます。
metadata:
  '@type': type.googleapis.com/google.firestore.admin.v1.RestoreDatabaseMetadata
  backup: projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID
  database: projects/PROJECT_ID/databases/DATABASE_ID
  operationState: PROCESSING
  progressPercentage:
    completedWork: '20'
    estimatedWork: '100'
  startTime: '2023-12-06T14:20:17.398325Z'
name: projects/PROJECT_ID/databases/DATABASE_ID/operations/operation_uuid
response:
  '@type': type.googleapis.com/google.firestore.admin.v1.Database
  createTime: '2023-12-06T14:20:17.398325Z'
  name: projects/PROJECT_ID/databases/DATABASE_ID
  ...
metadata フィールドには、これまでの復元の進行状況の推定を示す progressPercentage コンポーネントと、復元の全体的な状態を示す operationState が含まれます。この情報を再度取得するには、gcloud firestore operations list を使用します。
gcloud firestore operations list --database=DATABASE_ID
または、上記の出力の name フィールドを使用して、gcloud firestore operations describe を指定します。
gcloud firestore operations describe OPERATION_NAME
Firebase CLI
firebase firestore:databases:restore コマンドを使用します。
firebase firestore:databases:restore \
--backup 'BACKUP' \
--database 'DATABASE_ID'
次のように置き換えます。
  • BACKUP: バックアップの完全なリソース名。 すべてのバックアップを一覧表示すると、各バックアップの名前を確認できます。
  • DATABASE_ID: 新しいデータベースのデータベース ID。すでに使用中のデータベース ID は使用できません。