0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Firestoreのスケジュールバックアップが提供開始されたので設定した話

Posted at

昨年秋、Firestoreのバックアップのプレビュー版が提供され始めました。費用・管理面で日々のバックアップで利点があったため、導入した話を共有いたします。

背景

Firestore上のデータをバックアップする場合、これまでFirestoreのエクスポート/インポートを使う必要がありました。この方式において、以下の課題がありました。

  • エクスポートしたドキュメント数に比例して読み取り費用が発生する
    • データベース全体で5000万ドキュメントがある場合、nam5リージョンでおよそ$30/回かかる計算になります。
  • 定期バックアップさせる場合、バックアップ用の関数を作る必要がある
  • バックアップ間でデータの損失が発生したとき、復旧する手段がない

そんな折、昨年秋にスケジュールバックアップが公開プレビュー版で提供されました1。このバックアップでは、以下の特徴があります。

  • 設定した保持期間が過ぎると、自動で当該バックアップをクリアする
  • バックアップ費用は、ストレージ費用(GiB/月)に対して課金される。Firestoreの読み取り費用は含まれない
  • ポイントインタイムリカバリ(PITR)と組み合わせることで、日々のデータ復元はPITR、週次のデータ復元はスケジュールバックアップでカバーと運用できる
  • バックアップの作成・保持はfirestoreのパフォーマンスには影響しない
  • gcloudを使って設定できる

以上の点から、費用・管理面で利点があります。
そこで、1GCPプロジェクトに対してエクスポートを月1で残しつつ、試験的にデータのバックアップを追加しました。

注意点

スケジュールバックアップは以下の制約があります。

  • バックアップは、バックアップ元のデータと同じロケーションに作成されます。したがって、災害対策には適しません
    • このため、firestoreのエクスポートを予備のフルバックアップとして、別のロケーションに保存しておくことが望ましいです
  • 指定したバックアップの日・週・月において、何時頃にバックアップがされるかは不定です

設定方法

IAMの設定

スケジュールバックアップを設定するプリンシパルについて、以下のロールいずれかが必要です。

  • roles/datastore.backupSchedulesAdmin: バックアップ スケジュールに対する読み取り / 書き込みアクセス権

データのリストアを行う場合は roles/datastore.restoreAdmin が追加で必要となります。roles/datastore.owner を追加するとFirestore全体の完全アクセス権が得られるものの、強めの権限になるので推奨されません。

スケジュールの設定

毎週火曜に、保持期間7日でデフォルトのデータベースをバックアップするよう下記の通り設定しました。

# 2024/7 現在、alpha はなくても良い
gcloud alpha firestore backups schedules create \
--database='(default)' \
--retention=7d \
--recurrence=weekly \
--day-of-week=TUE \
--project=your-project

コマンド実行後、以下のコマンドで設定したバックアップスケジュールを確認できます。

gcloud alpha firestore backups schedules list --database "(default)" --project=your-project
createTime: '2024-02-22T01:34:43.295238Z'
name: projects/your-project/databases/(default)/backupSchedules/c01831f3-367c-4155-838a-1ab19df0ac72
retention: 604800s
updateTime: '2024-02-22T01:34:43.295238Z'
weeklyRecurrence:
  day: TUESDAY

この状態で翌火曜日になると、下記の通りバックアップが作成されました。なお、月曜日に何時頃バックアップが作成されるかは不定です。UTCの午前0時に作られることもあれば、午後11時50分前後になっても作られていない場合があります。

gcloud firestore backups list --project=your-project
database: projects/your-project/databases/(default)
databaseUid: 0f44f5b9-fb06-40c8-b4aa-5ff7da62ae8b
expireTime: '2024-03-05T13:50:53.234353Z'
name: projects/your-project/locations/asia-northeast1/backups/8244ea64-312c-49a8-b8ef-589e6194292c
snapshotTime: '2024-02-27T13:50:53.234353Z'
state: READY
  1. https://cloud.google.com/blog/ja/products/databases/firestore-adds-point-in-time-recovery-and-scheduled-backups より。また、2024年6月末にGenerally Availableとなりました。 https://cloud.google.com/firestore/docs/release-notes#June_28_2024

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?