Comment mettre en place et gérer plusieurs bases de données Firestore dans un même projet ?
Sommaire
Une nouvelle fonctionnalité ajoutée à Google Cloud Firestore est la gestion de plusieurs bases de données dans un même projet. Dans cet article/POC (proof of concept) nous allons explorer cette nouvelle fonctionnalité et voir comment l’intégrer dans un projet.
Cette fonctionalité est en Pre-GA. À utiliser avec précaution.
Vous travaillez sur un projet bien structuré avec plusieurs environnements : dev
, staging
, prod
et vous aimeriez tout garder dans un même projet. Vous avez alors la possibilité de :
dev_users
, prod_users
pour les collections des utilisateurs en dev et en prodCette fonctionnalité a actuellement quelques limitations :
Le concept est assez simple à comprendre et à utiliser (il existe déjà dans presque toutes les bdd) : créer une base de données isolée et la gérer individuellement.
Pour interagir avec le service Firestore et les bdd, il est possible d’utiliser :
Pour cette partie, nous utiliserons gcloud.
Voici les opérations possibles :
gcloud alphafirestore databases create --database=development --location=europe-west9 \
--type=firestore-native
Cette commande prend comme paramètres :
database
: nom de la bdd. Entre 4 et 63 caractèreslocation
: emplacement de la bdd (region, multiregion). voir: https://firebase.google.com/docs/firestore/locationstype
: type/mode de la bdd firestore. firestore-native
pour le mode natif et datastore-mode
pour le mode Datastore. firestore-native
par défaut-delete-protection
: pour activer la protection contre la suppression. C’est une fonctionnalité qui bloque la suppression d’une bdd tant qu'elle est activée.gcloud alpha firestore databases list
Cette commande liste toutes les bdd Firestore présente dans le projet.
gcloud firestore databases list
---
appEngineIntegrationMode: DISABLED
concurrencyMode: PESSIMISTIC
createTime: '2023-09-20T10:15:52.102833Z'
deleteProtectionState: DELETE_PROTECTION_DISABLED
earliestVersionTime: '2023-09-20T10:15:52.102833Z'
etag: IMbIiYH8uIEDMLGv98f6uIED
locationId: europe-west9
name: projects/loopbin/databases/development
pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
type: FIRESTORE_NATIVE
uid: 0a181b17-eae8-4e68-864f-ba9cf9d3ae6d
updateTime: '2023-09-20T10:15:52.102833Z'
versionRetentionPeriod: 3600s
---
gcloud alpha firestore databases update --database=development \
--type=firestore-native
Il permet aussi de gérer la protection de suppression de la bdd.
Activation sur la bdd se développent en utilisant --delete-protection
gcloud alpha firestore databases update --database=development --delete-protection
On peut utiliser --no-delete-protection
pour retirer cette protection.
gcloud alpha firestore databases delete --database=development
Bien sûr, cette commande échouera si la protection de suppression est activée.
La resource google_firestore_database
permet de créer des bdd Firestore grâce à Terraform.
Exemple :
resource "google_firestore_database" "database" {
project = var.project_id
name = "development"
location_id = "europe-west9"
type = "FIRESTORE_NATIVE"
concurrency_mode = "OPTIMISTIC"
app_engine_integration_mode = "DISABLED"
point_in_time_recovery_enablement = "POINT_IN_TIME_RECOVERY_ENABLED"
}
Maintenant, que nous avons nos 3 bases de donnee (default, development et staging) nous allons voir comment on peut les utiliser avec Python.
La spécification de la base de données à utiliser se fait durant l’initialisation du client dans notre code.
from google.cloud import firestore
db = firestore.Client(database='development')
collection_ref = db.collection("users")
Comme vous pouvez le voir dans la documentation, il est possible de passer la base de données en paramètre. La bdd de défaut est utilisé si rien n’est spécifié.
Pour les autres langages et SDK, veuillez consulter les documentations.
Until next time, stay in the loop, stay awesome.