🦊

Firestoreのスケジュールバックアップ機能を使う

2024/07/26に公開

はじめに

Firestoreのスケジュールバックアップ機能(Scheduled backups)が2024年6月に一般提供されました。
これにより、Firestoreの標準機能でバックアップを行うことが可能になりました。
https://cloud.google.com/firestore/docs/backups

Scheduled backupsの特徴

Scheduled backupsには以下の特徴があります。

  • 日次または週次でバックアップを設定可能
    • それぞれ最大1つ設定が可能
    • 週次の場合、バックアップを取得する曜日を指定できる
  • バックアップの正確な時刻設定は不可
  • バックアップ作成によるFirestoreの読み書きパフォーマンスへの影響はない
  • コストはバックアップを保存するストレージ量に対して発生
    • 読み取りの費用はかからない
  • バックアップデータは最大14週間保存可能
    • 期限が切れたバックアップは自動で削除される

バックアップの設定

Scheduled backupsはgcloud CLIやTerraformを使用して設定できます。
以下は、Terraformを使って日次バックアップを設定する例です。

resource "google_firestore_backup_schedule" "daily-backup" {
  project  = "project-name"
  database = "(default)"

  retention = "604800s" # 14 weeks

  daily_recurrence {}
}

バックアップ設定の確認

バックアップの設定は以下のコマンドで確認できます。

$ gcloud firestore backups schedules list --project=project-name --database='(default)'
---
createTime: '2024-07-22T00:57:35.837458Z'
dailyRecurrence: {}
name: projects/project-name/databases/(default)/backupSchedules/1f93263c-f4ca-42ba-809c-f61030789621
retention: 604800s
updateTime: '2024-07-22T00:57:35.837458Z'

バックアップの確認

以下のコマンドで、作成されたバックアップの一覧を確認できます。日次バックアップが作成されていることがわかります。

$ gcloud firestore backups list --project=project-name
---
database: projects/project-name/databases/(default)
databaseUid: b9c219b4-1203-e222-6009-fc2c464f41fa
expireTime: '2024-07-30T10:40:36.462388Z'
name: projects/project-name/locations/asia-northeast1/backups/01f2a7da-1715-0fc7-6311-f879166c1d5f
snapshotTime: '2024-07-23T10:40:36.462388Z'
state: READY
---
database: projects/project-name/databases/(default)
databaseUid: b9c219b4-1203-e222-6009-fc2c464f41fa
expireTime: '2024-07-29T10:30:25.637845Z'
name: projects/project-name/locations/asia-northeast1/backups/1b7a5b5e-7d9e-85bd-79cf-29b10a08417b
snapshotTime: '2024-07-22T10:30:25.637845Z'
state: READY

リストアの方法

Firestoreのデータベースをリストアする際も、gcloud CLIを使用します。

$ gcloud firestore databases restore \
  --project=project-name \
  --source-backup=projects/PROJECT_ID/locations/LOCATION/backups/BACKUP_ID \
  --destination-database='restore-target-database'

Import/Export機能を使用したバックアップとの違い

これまで、Firestoreのバックアップを行うにはImport/Exportを何らかの方法で定期的に実行し、エクスポートしたデータをストレージに保存する必要がありました。
Import/Exportを利用した方法とScheduled backupsには、主に以下の3点で違いがあります。

1. 保存期間

Scheduled backupsは最大14週間のバックアップ保存が可能です。
これに対して、Import/Export方式ではエクスポートしたデータを任意のストレージに保存するため、保存期間に制限はありません。

2. コスト

Scheduled backupsでは、バックアップで使用するストレージの容量に対して課金が発生します。
一方、Import/Export方式ではエクスポートしたドキュメント数に応じて読み取りオペレーションが発生し、その件数に基づいて課金されます。

Firestoreのデータ件数が多い場合、読み取りオペレーションのコストが高額になるため、Scheduled backupsの方がコスト面で有利です。

3. リストア方法

Scheduled backupsは、同じプロジェクト内の新規データベースへのリストアが可能です。ただし、別プロジェクトにリストアしたり、既存のデータベースへの上書きはできません。
一方、Import/Export方式では既存のデータベースに上書きしたり、別プロジェクトに対してリストアできます。

まとめ

FirestoreにScheduled backupsが追加されたことで、バックアップの選択肢が広がりました。
Scheduled backupsとImport/Exportにはそれぞれメリットとデメリットがあるため、要件に合った方法を選択することが大切です。

参考

カウシェ Tech Blog

Discussion