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

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

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

バックアップについて

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

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

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

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

費用

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

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

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

準備

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

必要なロール

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

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

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

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

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

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

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

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

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

日次バックアップ スケジュールを作成するには、--recurrence フラグを daily に設定します。

gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=daily \
--retention=RETENTION_PERIOD

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は (default) に設定します。
  • RETENTION_PERIOD: daily のバックアップの繰り返しの場合は、最大 7 日(7d)に設定します。weekly のバックアップの繰り返しを設定する場合、最大 14 週間(14w)に設定します。

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

週次バックアップ スケジュールを作成するには、--recurrence フラグを weekly に設定します。

gcloud alpha firestore backups schedules create \
--database='DATABASE_ID' \
--recurrence=weekly \
--retention=RETENTION_PERIOD \
--day-of-week=DAY

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は (default) に設定します。
  • RETENTION_PERIOD: weekly のバックアップの繰り返しの場合は、最大 14 週間(14w)に設定します。
  • DAY: バックアップを行う曜日。次のいずれかに設定します。
    • SUN(日曜日)
    • MON(月曜日)
    • TUE(火曜日)
    • WED(水曜日)
    • THU(木曜日)
    • FRI(金曜日)
    • SAT(土曜日)

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

データベースのすべてのバックアップ スケジュールを一覧表示するには、gcloud alpha firestore backups schedules list コマンドを使用します。このコマンドは、すべてのバックアップ スケジュールに関する情報を返します。

gcloud alpha firestore backups schedules list \
--database='DATABASE_ID'

DATABASE_ID は、データベースの ID に置き換えます。デフォルトのデータベースには (default) を使用します。

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

バックアップ スケジュールに関する情報を取得するには、gcloud alpha firestore backups schedules describe コマンドを使用します。

gcloud alpha firestore backups schedules describe \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は (default) に設定します。
  • BACKUP_SCHEDULE_ID: バックアップ スケジュールの ID。すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの ID を表示できます。

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

バックアップ スケジュールの保持期間を更新するには、gcloud alpha firestore backups schedules update コマンドを使用します。

gcloud alpha 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: daily のバックアップの繰り返しを設定する場合、最大 7 日(7d)に設定します。weekly のバックアップの繰り返しを設定する場合、最大 14 週間(14w)に設定します。

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

バックアップを削除するには、gcloud alpha firestore backups schedules delete コマンドを使用します。

gcloud alpha firestore backups schedules delete \
--database='DATABASE_ID' \
--backup-schedule=BACKUP_SCHEDULE_ID

以下を置き換えます。

  • DATABASE_ID: バックアップするデータベースの ID。デフォルト データベースの場合は (default) に設定します。
  • BACKUP_SCHEDULE_ID: バックアップ スケジュールの ID。すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの ID を表示できます。

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

バックアップを管理する

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

利用可能なバックアップを一覧表示するには、gcloud alpha firestore backups list コマンドを使用します。

gcloud alpha firestore backups list \
--format="table(name, database, state)"

--format="table(name, database, state)" フラグは、出力を読みやすい形式にします。

特定のロケーションのバックアップのみを一覧表示するには、--location フラグを使用します。

gcloud alpha firestore backups list \
--location=LOCATION \
--format="table(name, database, state)"

LOCATION は、Cloud Firestore のロケーションの名前に置き換えます。

バックアップを記述する

バックアップの詳細を表示するには、gcloud alpha firestore backups describe コマンドを使用します。

gcloud alpha firestore backups describe \
--location=LOCATION \
--backup=BACKUP_ID

バックアップを削除

バックアップを削除するには、gcloud alpha firestore backups delete コマンドを使用します。

gcloud alpha firestore backups delete \
--location=LOCATION \
--backup=BACKUP_ID

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

復元オペレーションでは、バックアップからのデータが新しい Cloud Firestore データベースに書き込まれます。復元オペレーションを開始するには、gcloud alpha firestore databases restore コマンドを使用します。

gcloud alpha 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