firestore-incremental-capture/extension.yaml (179 lines of code) (raw):

# Copyright 2023 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: firestore-incremental-capture version: 0.0.7 specVersion: v1beta icon: icon.png displayName: Firestore Incremental Backup Stream description: Offers a cost-effective, flexible disaster recovery mechanism for Firestore. license: Apache-2.0 author: authorName: Google Cloud url: https://cloud.google.com/ contributors: - authorName: Invertase email: oss@invertase.io url: https://github.com/invertase sourceUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/ releaseNotesUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/tree/main/ apis: - apiName: eventarc.googleapis.com reason: Powers all events and triggers - apiName: bigquery.googleapis.com reason: Running queries - apiName: dataflow.googleapis.com reason: Running dataflow jobs roles: - role: datastore.user reason: Allows the extension to write updates to the database. - role: bigquery.dataEditor reason: Allows the creation of BQ jobs to import Firestore backups. # - role: dataflow.developer # reason: Allows this extension to create and run dataflow jobs. # - role: artifactregistry.writer # reason: Allows this extension to write to the artifact registry. billingRequired: true resources: - name: runInitialSetup type: firebaseextensions.v1beta.function description: >- Creates the backup BigQuery database if it does not exist properties: availableMemoryMb: 512 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: {} - name: syncData type: firebaseextensions.v1beta.function description: Enqueues a task to sync data to BigQuery properties: runtime: nodejs20 location: ${LOCATION} eventTrigger: eventType: providers/cloud.firestore/eventTypes/document.write resource: projects/${param:PROJECT_ID}/databases/(default)/documents/${param:SYNC_COLLECTION_PATH}/{docId} - name: syncDataTask type: firebaseextensions.v1beta.function description: >- Distributed cloud task for syncing data to BigQuery properties: availableMemoryMb: 512 location: ${LOCATION} runtime: nodejs20 timeout: 540s taskQueueTrigger: {} - name: onHttpRunRestoration type: firebaseextensions.v1beta.function description: >- Starts a new restoration task properties: location: ${LOCATION} runtime: nodejs20 httpsTrigger: {} # TODO change to a Firestore trigger - name: onBackupRestore type: firebaseextensions.v1beta.function description: >- Exports data from storage to a pre-defined Firestore instance. properties: location: ${LOCATION} runtime: nodejs20 availableMemoryMb: 1024 taskQueueTrigger: {} params: - param: LOCATION label: Cloud Functions location description: >- Where do you want to deploy the functions created for this extension? You usually want a location close to your database. For help selecting a location, refer to the [location selection guide](https://firebase.google.com/docs/functions/locations). type: select options: - label: Iowa (us-central1) value: us-central1 - label: South Carolina (us-east1) value: us-east1 - label: Northern Virginia (us-east4) value: us-east4 - label: Los Angeles (us-west2) value: us-west2 - label: Salt Lake City (us-west3) value: us-west3 - label: Las Vegas (us-west4) value: us-west4 - label: Warsaw (europe-central2) value: europe-central2 - label: Belgium (europe-west1) value: europe-west1 - label: London (europe-west2) value: europe-west2 - label: Frankfurt (europe-west3) value: europe-west3 - label: Zurich (europe-west6) value: europe-west6 - label: Taiwan (asia-east1) value: asia-east1 - label: Hong Kong (asia-east2) value: asia-east2 - label: Tokyo (asia-northeast1) value: asia-northeast1 - label: Osaka (asia-northeast2) value: asia-northeast2 - label: Seoul (asia-northeast3) value: asia-northeast3 - label: Mumbai (asia-south1) value: asia-south1 - label: Singapore (asia-southeast1) value: asia-southeast1 - label: Jakarta (asia-southeast2) value: asia-southeast2 - label: Montreal (northamerica-northeast1) value: northamerica-northeast1 - label: Sao Paulo (southamerica-east1) value: southamerica-east1 - label: Sydney (australia-southeast1) value: australia-southeast1 default: us-central1 required: true immutable: true - param: SYNC_COLLECTION_PATH label: Collection path description: > What is the path to the collection that contains the strings that you want to capture all changes of? Use `{document=**}` to capture all collections. example: users validationRegex: '^[^/]+(/[^/]+/[^/]+)*$' validationErrorMessage: Must be a valid Cloud Firestore Collection required: true - param: SYNC_DATASET label: Bigquery dataset Id description: > The id of the Bigquery dataset to sync data to. example: backup_dataset default: backup_dataset validationRegex: '^[a-zA-Z0-9_]+$' validationErrorMessage: > BigQuery dataset IDs must be alphanumeric (plus underscores) and must be no more than 1024 characters. required: true - param: SYNC_TABLE label: Bigquery table Id description: > The id of the Bigquery table to sync data to. example: backup_table default: backup_table required: true - param: BACKUP_INSTANCE_ID label: Backup instance Id description: > The name of the Firestore instance to backup the database to. example: my-backup validationRegex: '^[a-zA-Z][a-zA-Z0-9-]{2,61}[a-zA-Z0-9]$' validationErrorMessage: Enter a valid instance id required: true lifecycleEvents: onInstall: function: runInitialSetup processingMessage: Creates the backup BigQuery database if it does not exist onUpdate: function: runInitialSetup processingMessage: Creates the backup BigQuery database if it does not exist onConfigure: function: runInitialSetup processingMessage: Creates the backup BigQuery database if it does not exist