データのバックアップと復元
このページでは、Firestore スケジュール バックアップ機能を使用する方法について説明します。バックアップを使用して、アプリケーション レベルのデータ破損や偶発的なデータ削除からデータを保護します。
バックアップによって、指定したデータベースのバックアップを毎日、または毎週行うようにバックアップ スケジュールを構成できます。その後、これらのバックアップを使用して新しいデータベースにデータを復元できます。
バックアップについて
バックアップは、ある時点におけるデータベースの一貫性のあるコピーです。バックアップには、その時点でのすべてのデータとインデックス構成が含まれています。バックアップにデータベースの有効期間(TTL)ポリシーは含まれません。バックアップはソース データベースと同じロケーションにあります。
バックアップには保持期間を構成でき、保持期間が終了するまで、またはバックアップを削除するまで保存されます。ソース データベースを削除しても、関連するバックアップは自動的に削除されません。
Firestore は、バックアップに関連するメタデータと、データベースに関連するバックアップ スケジュールを保存します。Firestore は、データベースのすべてのバックアップが期限切れになるか削除されるまで、このメタデータを保持します。
バックアップを作成または保持しても、ライブ データベースでの読み書きのパフォーマンスに影響はありません。
費用
バックアップを使用すると、以下の内容に対して課金されます。
- 各バックアップで使用されるストレージの容量。
- 復元オペレーションの場合は、バックアップのサイズに基づいて課金されます。
詳細と正確な料金については、料金ページをご覧ください。
準備
Google Cloud プロジェクトの課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。必要なロール
バックアップとバックアップ スケジュールを管理するために必要な権限を取得するには、次の Identity and Access Management ロールの 1 つ以上を付与するよう管理者に依頼します。
roles/datastore.owner
: 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)'
に設定します。
また、タイプ - RETENTION_PERIOD_SECONDS: 秒単位の値に設定し、後に「s」をつけます。最大値は
8467200s
(14 週間)です。
google_firestore_database
の Terraform リソースに対するリソース リファレンスを使用することもできます。週次バックアップ スケジュールを作成する
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)'
に設定します。
また、タイプ - RETENTION_PERIOD_SECONDS: 秒単位の値に設定し、後に「s」をつけます。最大値は
8467200s
(14 週間)です。 - DAY: バックアップを行う曜日。次のいずれかに設定します。
SUNDAY
(日曜日)MONDAY
(月曜日)TUESDAY
(火曜日)WEDNESDAY
(水曜日)THURSDAY
(木曜日)FRIDAY
(金曜日)SATURDAY
(土曜日)
google_firestore_database
の Terraform リソースに対するリソース リファレンスを使用することもできます。バックアップ スケジュールを一覧表示する
データベースのすべてのバックアップ スケジュールを一覧表示するには、次のいずれかの方法を使用します。
gcloud
gcloud firestore backups schedules list
コマンドを使用します。
gcloud firestore backups schedules list \ --database='DATABASE_ID'
'(default)'
を使用します。Firebase CLI
firebase firestore:backups:schedules:list
コマンドを使用します。
firebase firestore:backups:schedules:list \ --database 'DATABASE_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
- BACKUP_SCHEDULE: バックアップ スケジュールの完全なリソース名。 すべてのバックアップ スケジュールを一覧表示すると、各バックアップ スケジュールの名前を表示できます。
- RETENTION_PERIOD: これを最大 14 週間(
14w
)の値に設定します。
バックアップ スケジュールの保持期間は更新できますが、繰り返しの設定は更新できません。繰り返し期間の異なるバックアップ スケジュールが必要な場合は、古いバックアップ スケジュールを削除し(今後は不要となる場合)、必要な繰り返し期間のバックアップ スケジュールを作成します。
バックアップ スケジュールを削除する
バックアップ スケジュールを削除するには、次のいずれかの方法を使用します。
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
- 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
は、Firestore ロケーションの名前に置き換えます。Firebase CLI
firebase firestore:backups:list
コマンドを使用します。
firebase firestore:backups:list
--location
フラグを使用します。firebase firestore:backups:list \ --location=LOCATION
LOCATION
は、Firestore ロケーションの名前に置き換えます。バックアップを記述する
バックアップの詳細を表示するには、次のいずれかの方法を使用します。
gcloud
gcloud firestore backups describe
コマンドを使用します。
gcloud firestore backups describe \ --location=LOCATION \ --backup=BACKUP_ID
- LOCATION: データベースのロケーション。
- BACKUP_ID: バックアップの ID。すべてのバックアップを一覧表示すると、各バックアップの ID を確認できます。
Firebase CLI
firebase firestore:backups:get
コマンドを使用します。
firebase firestore:backups:get BACKUP
- BACKUP: バックアップの完全なリソース名。すべてのバックアップを一覧表示すると、各バックアップの名前を確認できます。
バックアップを削除
gcloud
gcloud firestore backups delete
コマンドを使用します。
gcloud firestore backups delete \ --location=LOCATION \ --backup=BACKUP_ID
- LOCATION: データベースのロケーション。
- BACKUP_ID: バックアップの ID。すべてのバックアップを一覧表示すると、各バックアップの ID を確認できます。
Firebase CLI
firebase firestore:backups:delete
コマンドを使用します。
firebase firestore:backups:delete \ BACKUP
- BACKUP: バックアップの完全なリソース名。すべてのバックアップを一覧表示すると、各バックアップの名前を確認できます。
データベースのバックアップからデータを復元する
復元オペレーションでは、バックアップからのデータが新しい 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 は使用できません。
metadata
、name
、response
のコンポーネントが含まれます。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 は使用できません。