Tilbage

Automatiserede Firestore-backups i 5 nemme trin

Når du har fulgt denne vejledning, vil du have planlagt automatiserede daglige Firestore-backups, der opbevares i et år ved hjælp af forskellige lagringsklasser for at reducere lageromkostningerne.
16. juni 2021
Af
Nikolaj von Holck
,
Tidligere Tech Lead

Opsætning af automatiserede Firestore-backups i 5 nemme trin

Den skemaløse realtidsdatabase Firestore fra Firebase leveres ikke med indbyggede automatiske sikkerhedskopier. I dette blogindlæg guider vi dig gennem opsætning af automatiserede Firestore-backups inspireret af, hvordan vi gør det hos Kvalifik.

☝️ Vi antager, at du er ejer af Firebase-projektet, og at du har aktiveret fakturering. Læs mere her.

Firestore-backupperne startes af en cloud-funktion og gemmes i en dedikeret lagerbuket på Google Cloud Platform.

1) Anvend den relevante servicekontorolle

Åbn Google Cloud Platform, og vælg det Google Cloud-projekt, der er knyttet til dit Firebase-projekt.

Gå til IAM & Admin → IAM.

Rediger medlemmet "[project-id][@appspot.gserviceaccount.com]".

Tilføj endnu en rolle: "Cloud Datastore Import Export Admin".

Klik på Gem.

2) Opret lagerbucket til Firestore-backups

Gå til afsnittet Lagring i Google Cloud Platform.

Opret spand:

  1. Navngiv din spand, f.eks:
  2. Navn: [projekt-id]-backup
  3. Vi foreslår, at du vælger, hvor du vil gemme dine data:
  4. Lokalitetstype: Multi-region
  5. Beliggenhed: eu (flere regioner i Den Europæiske Union)
  6. Vi foreslår, at du vælger en standardlagringsklasse til dine data:
  7. Standardopbevaringsklasse: Nearline
  8. Vi foreslår, at du vælger, hvordan du vil kontrollere adgangen til objekter:
  9. Adgangskontrol: Ensartet
  10. Avancerede indstillinger, foreslår vi:
  11. Opbevaringspolitik: Opbevaring: Opbevares i 7 dage

Dette sikrer, at sikkerhedskopier fra de sidste syv dage ikke kan slettes ved et uheld.

Klik på Opret.

3) Konfigurer indstillingerne for spandens livscyklus

Du er velkommen til at justere disse indstillinger for livscyklus, så de passer til dine behov.

Gå til Livscyklusindstillinger, og tilføj følgende regler:

  1. Vælg en handling: Indstil lagringsklasse til Coldline
  2. Vælg objektbetingelser: Alder: 7 dage
  3. Vælg en handling: Indstil lagringsklasse til Arkiv
  4. Vælg objektbetingelser: Alder: 30 dage
  5. Vælg en handling: Slet objekt
  6. Vælg objektbetingelser: Alder: 365 dage

4) Opsætning af cloud-funktion til at starte sikkerhedskopier

Vi anbefaler, at du bruger miljøvariabler for at kunne dele den samme cloud-funktion på tværs af flere Firebase-projekter. For at gøre dette skal du køre følgende kommando på din lokale maskine (med Firebase CLI installeret):

⚠️ Hvis du har flere miljøer, skal du sørge for at skifte til det korrekte projekt ved hjælp af kommandoen "firebase use [environment-name]".

$ firebase functions:config:set backup.bucket_name="*[project-id]*-backup"

Tilføj følgende Typescript cloud-funktion firestoreBackupDaily. Bemærk, at denne cloud-funktion er tilpasset fra Javascript-versionen, der findes her.

import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'

const client = new admin.firestore.v1.FirestoreAdminClient()
const env = functions.config()

export const firestoreBackupDaily = functions
  .region('europe-west1') // Change to appropriate region.
  .pubsub.schedule('0 0 * * *') // Every 24 hours (at midnight).
  .onRun(async () => {
    const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT
    const databaseName = client.databasePath(projectId, '(default)')
    const timestamp = new Date().toISOString()
    const dest = `gs://${env.backup.bucket_name}/firestore/${timestamp}`

    try {
      const responses = await client.exportDocuments({
        name: databaseName,
        outputUriPrefix: dest,
        collectionIds: [] // Leave empty to export all collections.
      })
      const response = responses[0]
      console.log(`Operation Name: ${response['name']}`)
    } catch (error) {
      console.error(error)
      throw new Error('Export operation failed.')
    }
  })

Endelig skal du implementere din cloud-funktion ved hjælp af følgende kommando:

$ firebase deploy --only functions:firestoreBackupDaily

5) Test din cloud-funktion

Gå til siden Cloud Scheduler, og klik på "Run now" (Kør nu) i rækken, der svarer til din nyoprettede cloud-funktion. Kort tid efter bør du se en Firestore-backup i mappen "firestore" i den tidligere oprettede storage bucket.

Næste skridt

For at afslutte denne opsætning anbefaler vi, at du opretter overvågning og en plan for katastrofeberedskab. Bemærk desuden, at den løsning, der præsenteres her, kun udfører sikkerhedskopiering af Firestore. Du er måske også interesseret i at sikkerhedskopiere Firebase Storage og Firebase Auth. Førstnævnte kan opnås ved at konfigurere et dagligt overførselsjob på Google Cloud Platform, mens sidstnævnte er mere tricky (husk også at gemme en kopi af password hash-parametrene!). Du kan bruge listUsers-funktionen, der er præsenteret her, i en planlagt cloud-funktion i lighed med den tidligere præsenterede. Vi dækker måske nogle af disse emner i et fremtidigt blogindlæg.

Fortsæt med at læse