Utiliser la récupération à un moment précis (PITR)

Cette page explique comment utiliser la récupération à un moment précis (PITR) pour conserver et récupérer des données dans Firestore compatible avec MongoDB.

Pour comprendre les concepts de la récupération PITR, consultez Récupération à un moment précis.

Autorisations

Pour obtenir les autorisations nécessaires pour gérer les paramètres de PITR, demandez à votre administrateur de vous accorder le rôle IAM Propriétaire Cloud Datastore (roles/datastore.owner) sur le projet dont vous souhaitez activer les paramètres de PITR. Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle prédéfini contient les autorisations requises pour gérer les paramètres de récupération à un moment précis. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer les paramètres de PITR :

  • Pour activer la récupération PITR lors de la création d'une base de données : datastore.databases.create
  • Pour mettre à jour les paramètres PITR sur une base de données existante : datastore.databases.update,datastore.databases.list
  • Pour effectuer des lectures à partir de données PITR : datastore.databases.get,datastore.entities.get,datastore.entities.list
  • Pour exporter des données PITR : datastore.databases.export
  • Pour importer des données PITR : datastore.databases.import
  • Pour cloner une base de données : datastore.databases.clone

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Avant de commencer

Notez les points suivants avant de commencer à utiliser la récupération à un moment précis :

  • Vous ne pouvez pas commencer à lire des données datant de sept jours immédiatement après avoir activé la récupération PITR.
  • Si vous souhaitez activer la récupération à un moment précis lors de la création d'une base de données, vous devez utiliser la commande gcloud firestore databases create. L'activation de la récupération à un moment précis lors de la création d'une base de données à l'aide de la console Google Cloud n'est pas possible.
  • Firestore compatible avec MongoDB commence à conserver les versions à partir du moment où la PITR est activée.
  • Vous ne pouvez pas lire les données PITR dans la fenêtre PITR après avoir désactivé la récupération PITR.
  • Si vous réactivez la récupération PITR immédiatement après l'avoir désactivée, les anciennes données de récupération PITR ne sont plus disponibles. Toutes les données PITR créées avant la désactivation de la PITR seront supprimées après la date d'expiration de la PITR.
  • Si vous avez accidentellement supprimé des données au cours de la dernière heure et que la récupération à un moment précis est désactivée, vous pouvez restaurer vos données en l'activant dans l'heure qui suit la suppression.
  • Toute lecture effectuée sur des données PITR expirées échoue.

Activer la récupération PITR

Avant d'utiliser la récupération PITR, activez la facturation pour votre projet Google Cloud. Seuls les projets Google Cloud pour lesquels la facturation est activée peuvent utiliser la fonctionnalité de récupération PITR.

Pour activer la récupération PITR pour votre base de données :

Console

  1. Dans la console Google Cloud , accédez à la page Bases de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Reprise après sinistre.

  4. Cliquez sur Modifier pour modifier les paramètres.

  5. Cochez la case Activer la récupération à un moment précis, puis cliquez sur Enregistrer.

L'activation de la PITR entraîne des frais de stockage. Consultez la page Tarifs pour en savoir plus.

Pour désactiver la PITR, décochez la case Activer la récupération à un moment précis sur la page "Reprise après sinistre" de la console Google Cloud .

gcloud

Activez la récupération à un moment précis lors de la création de la base de données à l'aide de la commande gcloud firestore databases create et de la commande --enable-ptir comme suit :

gcloud firestore databases create\
  --location=LOCATION\
  --database=DATABASE_ID\
  --edition=enterprise\
  --enable-pitr

Remplacez les valeurs comme suit :

  • LOCATION : emplacement où vous souhaitez créer votre base de données.
  • DATABASE_ID : défini sur un ID de base de données.

Vous pouvez désactiver la récupération à un moment précis à l'aide de la commande gcloud firestore databases update comme suit :

gcloud firestore databases update\
  --database=DATABASE_ID\
  --no-enable-pitr

Remplacez les valeurs comme suit :

  • DATABASE_ID : défini sur l'ID de la base de données ou (par défaut).

Obtenir la durée de conservation et la date de la première version

Console

  1. Dans la console Google Cloud , accédez à la page Bases de données.

    Accéder à la page "Bases de données"

  2. Sélectionnez la base de données requise dans la liste des bases de données.

  3. Dans le menu de navigation, cliquez sur Reprise après sinistre.

  4. Dans la section Paramètres, notez la durée de conservation et la date de la première version.

    • Période de conservation : période pendant laquelle Firestore compatible avec MongoDB conserve toutes les versions des données de la base de données. La valeur est d'une heure lorsque la récupération PITR est désactivée et de sept jours lorsqu'elle est activée.
    • Heure de la version la plus ancienne : code temporel le plus ancien à partir duquel les anciennes versions des données peuvent être lues dans la période de récupération PITR. Cette valeur est mise à jour en continu par Firestore compatible avec MongoDB et devient obsolète au moment où elle est interrogée. Si vous utilisez cette valeur pour récupérer des données, veillez à tenir compte du moment où la valeur est interrogée jusqu'au moment où vous lancez la récupération.
    • Récupération à un moment précis : affiche Enabled si la récupération PITR est activée. Si la récupération PITR est désactivée, Disabled s'affiche.

gcloud

Exécutez la commande gcloud firestore databases describe comme suit :

gcloud firestore databases describe --database=DATABASE_ID

Remplacez DATABASE_ID par l'ID de la base de données ou '(default)'.

Voici le résultat :

    appEngineIntegrationMode: ENABLED
    concurrencyMode: PESSIMISTIC
    createTime: '2021-03-24T17:02:35.234Z'
    deleteProtectionState: DELETE_PROTECTION_DISABLED
    earliestVersionTime: '2023-06-12T16:17:25.222474Z'
    etag: IIDayqOevv8CMNTvyNK4uv8C
    keyPrefix: s
    locationId: nam5
    name: projects/PROJECT_ID/databases/DATABASE_ID
    pointInTimeRecoveryEnablement: POINT_IN_TIME_RECOVERY_DISABLED
    type: FIRESTORE_NATIVE
    uid: 5230c382-dcd2-468f-8cb3-2a1acfde2b32
    updateTime: '2021-11-17T17:48:22.171180Z'
    versionRetentionPeriod: 3600s

où :

  • earliestVersionTime : code temporel des données PITR les plus anciennes stockées.
  • pointInTimeRecoveryEnablement : affiche POINT_IN_TIME_RECOVERY_ENABLED si la récupération PITR est activée. Si la PITR est désactivée, vous verrez POINT_IN_TIME_RECOVERY_DISABLED ou le champ pointInTimeRecoveryEnablement ne s'affichera pas.
  • versionRetentionPeriod : période pendant laquelle les données PITR sont conservées, en millisecondes. La valeur peut être d'une heure lorsque la récupération PITR est désactivée ou de sept jours si elle est activée.

Lire les données PITR

Vous pouvez lire les données PITR à l'aide de la session d'instantané dans différents pilotes clients MongoDB. Définissez un snapshotTimestamp sur la session. L'exemple suivant utilise le pilote Java MongoDB. Une fonctionnalité similaire est disponible dans d'autres pilotes :

Java

    var session =
        mongoClient.startSession(ClientSessionOptions.builder().snapshot(true).build());
  session.setSnapshotTimestamp(new BsonTimestamp(seconds, nanos));

  // run a find query with PITR timestamp
  collection.find(session, <filter>).toList();

  // run an aggregation query pipeline with PITR timestamp
  collection.aggregate(session, <aggregation pipeline stages>).toList();

  // run distinct command with PITR timestamp
  collection.distinct(session, <field>, <return value type class>).toList();

Dans MongoDB, BsonTimestamp est un type BSON interne à MongoDB de 64 bits. Les 32 premiers bits représentent les secondes de l'horodatage d'epoch, et les 32 derniers bits représentent un nombre d'opérations ordinales au sein d'un cluster MongoDB.

Dans Firestore compatible avec MongoDB, le code temporel de l'instantané, qui utilise toujours un type de valeur BsonTimestamp, interprète les 32 premiers bits comme des secondes de code temporel d'epoch, mais les 32 derniers bits comme des nanosecondes dans la seconde. Notez que tous les instantanés PITR à la nanoseconde ne sont pas compatibles. Les codes temporels en microsecondes de la dernière heure sont autorisés, de même que les codes temporels en minutes entières des sept derniers jours. Consultez la présentation de la récupération à un moment précis (PITR) pour connaître les codes temporels de lecture compatibles.

Cloner à partir d'une base de données

Vous pouvez cloner une base de données existante à un code temporel sélectionné dans une nouvelle base de données :

  • La base de données clonée est une nouvelle base de données qui sera créée au même emplacement que la base de données source.

    Pour créer un clone, Firestore utilise les données de récupération à un moment précis (PITR) de la base de données source. La base de données clonée inclut toutes les données et tous les index.

  • Par défaut, la base de données clonée est chiffrée de la même manière que la base de données source, à l'aide du chiffrement par défaut de Google ou du chiffrement CMEK. Vous pouvez spécifier un autre type de chiffrement ou utiliser une autre clé pour le chiffrement CMEK.

  • Le code temporel a un niveau de précision d'une minute et spécifie un point dans le temps dans le passé, au cours de la période définie par la fenêtre de récupération PITR :

    • Si la récupération PITR est activée pour votre base de données, vous pouvez sélectionner n'importe quelle minute au cours des sept derniers jours (ou moins si la récupération PITR a été activée il y a moins de sept jours).
    • Si la récupération PITR n'est pas activée, vous pouvez sélectionner n'importe quelle minute de l'heure précédente.
    • Vous pouvez vérifier le code temporel le plus ancien que vous pouvez sélectionner dans la description de votre base de données.

Console

  1. Dans la console Google Cloud , accédez à la page Bases de données.

    Accéder à la page "Bases de données"

  2. Cliquez sur Afficher plus sur la ligne du tableau correspondant à la base de données que vous souhaitez cloner. Cliquez sur Cloner. La boîte de dialogue Créer un clone s'affiche.

  3. Dans la boîte de dialogue Créer un clone, indiquez les paramètres de clonage de la base de données :

    1. Dans le champ Indiquez un ID pour le clone, saisissez un ID de base de données pour une nouvelle base de données clonée. Cet ID de base de données ne doit pas être associé à une base de données existante.

    2. Dans le champ Cloner à partir de, sélectionnez un moment précis à utiliser pour le clonage. L'heure sélectionnée correspond à un code temporel PITR, à la minute près.

  4. Cliquez sur Créer un clone.

gcloud

Utilisez la commande gcloud firestore databases clone pour cloner une base de données :

gcloud firestore databases clone \
--source-database='SOURCE_DATABASE' \
--snapshot-time='PITR_TIMESTAMP' \
--destination-database='DESTINATION_DATABASE_ID'

Remplacez les éléments suivants :

  • SOURCE_DATABASE : nom d'une base de données existante que vous souhaitez cloner. Le nom utilise le format projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • PITR_TIMESTAMP : code temporel PITR au format RFC 3339, à la minute près. Par exemple, 2025-06-01T10:20:00.00Z ou 2025-06-01T10:30:00.00-07:00.

  • DESTINATION_DATABASE_ID : ID de base de données pour une nouvelle base de données clonée. Cet ID de base de données ne doit pas être associé à une base de données existante.

Exemple :

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db'

Si vous souhaitez lier des tags lors du clonage d'une base de données, utilisez la commande précédente avec l'option --tags, qui est une liste facultative de paires KEY=VALUE de tags à lier.

Exemple :

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--tags=key1=value1,key2=value2

Par défaut, la base de données clonée aura la même configuration de chiffrement que la base de données source. Pour modifier la configuration du chiffrement, utilisez l'argument --encryption-type :

  • (Par défaut) use-source-encryption : utilisez la même configuration de chiffrement que la base de données source.
  • google-default-encryption : utiliser le chiffrement par défaut de Google.
  • customer-managed-encryption : utilisez le chiffrement CMEK. Spécifiez un ID de clé dans l'argument --kms-key-name.

L'exemple suivant montre comment configurer le chiffrement CMEK pour la base de données clonée :

gcloud firestore databases clone \
--source-database='projects/example-project/databases/(default)' \
--snapshot-time='2025-06-01T10:20:00.00Z' \
--destination-database='example-dest-db' \
--encryption-type='customer-managed-encryption' \
--kms-key-name='projects/example-project/locations/us-central1/keyRings/example-key-ring/cryptoKeys/example-key'

CLI Firebase

Utilisez la commande firebase firestore:databases:clone pour cloner une base de données :

firebase firestore:databases:clone \
'SOURCE_DATABASE' \
'DESTINATION_DATABASE' \
--snapshot-time 'PITR_TIMESTAMP'

Remplacez les éléments suivants :

  • SOURCE_DATABASE : nom d'une base de données existante que vous souhaitez cloner. Le nom utilise le format projects/PROJECT_ID/databases/SOURCE_DATABASE_ID.

  • DESTINATION_DATABASE : nom d'une nouvelle base de données clonée. Le nom utilise le format projects/PROJECT_ID/databases/DESTINATION_DATABASE_ID. Ce nom de base de données ne doit pas être associé à une base de données existante.

  • PITR_TIMESTAMP : code temporel PITR au format RFC 3339, à la minute près. Par exemple, 2025-06-01T10:20:00.00Z ou 2025-06-01T10:30:00.00-07:00. Si aucune valeur n'est spécifiée, l'instantané choisi correspond à l'heure actuelle, arrondie à la minute inférieure.

Par défaut, la base de données clonée aura la même configuration de chiffrement que la base de données source. Pour modifier la configuration du chiffrement, utilisez l'argument --encryption-type :

  • (Par défaut) USE_SOURCE_ENCRYPTION : utilisez la même configuration de chiffrement que la base de données source.
  • GOOGLE_DEFAULT_ENCRYPTION : utiliser le chiffrement par défaut de Google.
  • CUSTOMER_MANAGED_ENCRYPTION : utilisez le chiffrement CMEK. Spécifiez un ID de clé dans l'argument --kms-key-name.

L'exemple suivant montre comment configurer le chiffrement CMEK pour la base de données clonée :

firebase firestore:databases:clone \
'projects/example-project/databases/(default)' \
'projects/example-project/databases/example-dest-db' \
--snapshot-time 'PITR_TIMESTAMP' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION

Exporter et importer des données de récupération à un moment précis

Vous pouvez exporter votre base de données vers Cloud Storage à partir des données de récupération à un moment précis à l'aide de la commande gcloud firestore export. Vous pouvez exporter des données PITR dont le code temporel correspond à une minute entière au cours des sept derniers jours, mais pas avant le earliestVersionTime. Si les données correspondant au code temporel spécifié n'existent plus, l'opération d'exportation échoue.

L'opération d'exportation PITR est compatible avec tous les filtres, y compris l'exportation de tous les documents et l'exportation de collections spécifiques.

  1. Exportez la base de données en spécifiant le paramètre snapshot-time vers le code temporel de récupération choisi.

    gcloud

    Exécutez la commande suivante pour exporter la base de données vers votre bucket.

    gcloud firestore export gs://BUCKET_NAME_PATH \
        --snapshot-time=PITR_TIMESTAMP \
        --collection-ids=COLLECTION_IDS
    

    Remplacez les éléments suivants :

    • BUCKET_NAME_PATH : bucket Cloud Storage valide avec un préfixe de chemin d'accès facultatif où les fichiers d'exportation sont stockés.
    • PITR_TIMESTAMP : code temporel PITR à la minute près, par exemple 2023-05-26T10:20:00.00Z ou 2023-10-19T10:30:00.00-07:00.
    • COLLECTION_IDS : liste d'ID de collection ou d'ID de groupe de collections, par exemple 'specific-collection-group1','specific-collection-group2'.

    Notez les points suivants avant d'exporter des données PITR :

    • Activez la récupération PITR sur votre base de données. Si la récupération PITR est désactivée, l'exportation à un code temporel d'instantané échoue, même pour les codes temporels de l'heure précédente après earliestVersionTime. L'opération d'exportation renvoie l'erreur Point-in-Time Recovery must be enabled in order to execute exports at a snapshot timestamp.
    • Spécifiez le code temporel au format RFC 3339. Par exemple, 2023-05-26T10:20:00.00Z ou 2023-10-19T10:30:00.00-07:00.
    • Assurez-vous que le code temporel que vous spécifiez est un code temporel à la minute près, datant des sept derniers jours, mais pas antérieur à earliestVersionTime. Si les données correspondant au code temporel spécifié n'existent plus, une erreur est générée. Le code temporel doit être une minute entière, même si l'heure spécifiée se situe dans l'heure écoulée.
    • L'exportation PITR ayant échoué ne vous est pas facturée.
  2. Importez dans une base de données.

    Suivez la procédure décrite dans Importer tous les documents pour importer votre base de données exportée. Si un document existe déjà dans votre base de données, il sera écrasé.