How to implement a daily background job that exports your Firestore data to a storage bucket. 324 words.
Last Updated
As of today, Firestore does not support automatic backups, but it DOES support exports via the gcloud CLI or REST API. Although not technically a backup in database jargon, an automatic export is valuable to have for disaster recovery because it can be re-imported to replace lost data.
The following snippet exports all Firestore data automatically every day at midnight using a scheduled Github Action.
Generate a Service Key on GCP
We need a service account to grant Github Actions permission to run the export command via the Google Cloud CLI.
Grant Permissions to the Service Account
Create a service account on GCP Console with the minimum permissions needed to run the export command.
Save it as a Secret on Github
We can share this data with Github as a secret environment variable. From your Github repo, go to settings > secrets and add a new secret.
cat path-to-your-service-account.json | base64
Use the command above to convert the JSON service account to a base64 string.
Firestore Backup Github Action
Create the Github Action to run the export job on a schedule.
Workflow
The workflow below uses a cron schedule to run the export once per day at midnight. GCP has an official action that handles the setup for gcloud.
name: Backup Firestore
on:
schedule:
- cron: '0 0 * * *'
env:
PROJECT_ID: YOUR-PROJECT
BUCKET: gs://YOUR-BUCKET
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
- run: gcloud info
- run: gcloud config set project $PROJECT_ID
- run: gcloud firestore export $BUCKET
Deploy
Deploy this workflow by simply committing it to the master branch on github.
git add .
git commit -m "backup my firestore data"
git push origin master
When the schedule event fires, you should see a successful export job similar to the output below. The exported data will be available in your Firebase storage bucket.