Cette page explique comment exporter et importer des entités Firestore en mode Datastore à l'aide du service d'exportation et d'importation géré. Le service d'exportation et d'importation géré est disponible via la console Google Cloud, la CLI Google Cloud et l'API Datastore Admin (REST, RPC).
Le service d'exportation et d'importation géré vous permet de récupérer des données supprimées de manière accidentelle et de les exporter pour un traitement hors ligne. Vous pouvez exporter toutes les entités ou uniquement des genres d'entités spécifiques. De même, vous pouvez importer toutes les données d'une exportation ou uniquement des genres spécifiques. Lorsque vous utilisez le service d'exportation et d'importation géré, veuillez prendre en compte les éléments suivants :
Le service d'exportation utilise des lectures cohérentes à terme. Vous ne pouvez pas supposer qu'une exportation a lieu à un moment donné. L'exportation peut inclure des entités écrites après le lancement de l'exportation et exclure des entités écrites avant le début de l'exportation.
Une exportation ne contient aucun index. Lorsque vous importez des données, les index requis sont automatiquement recréés à l'aide des définitions d'index actuelles de votre base de données. Les paramètres d'index de valeur de propriété par entité sont exportés et sont valides lors de l'importation.
Les importations n'attribuent pas de nouveaux ID aux entités. Elles utilisent les ID qui existaient au moment de l'exportation et écrasent toutes les entités existantes avec le même ID. Lors d'une opération d'importation, les ID sont réservés à mesure que les entités sont importées. Cette fonctionnalité empêche les conflits d'ID avec de nouvelles entités si les opérations d'écriture sont activées lorsqu'une importation est en cours d'exécution.
Si une entité de votre base de données n'est pas affectée par une importation, elle restera dans votre base de données une fois l'importation terminée.
Les données exportées à partir d'une base de données en mode Datastore peuvent être importées dans une autre base de données en mode Datastore, même si elle se trouve dans un autre projet.
Le service d'exportation et d'importation géré limite le nombre d'exportations et d'importations simultanées à 50 et autorise un maximum de 20 requêtes d'exportation et d'importation par minute pour un projet. Pour chaque requête, le service limite le nombre de combinaisons de filtres d'entités à 100.
Le résultat d'une exportation gérée utilise le format de journal LevelDB.
Pour importer uniquement un sous-ensemble d'entités ou pour importer des données dans BigQuery, vous devez spécifier un filtre d'entité dans votre exportation.
Le nom du fichier
.overall_export_metadata
doit correspondre au nom de son dossier parent :gs://BUCKET_NAME/OPTIONAL_NAMESPACE_PATH/PARENT_FOLDER_NAME/PARENT_FOLDER_NAME.overall_export_metadata
Si vous déplacez ou copiez les fichiers de sortie d'une exportation, conservez le
PARENT_FOLDER_NAME
, le contenu des sous-dossiers et le nom de fichier.overall_export_metadata
.
Avant de commencer
Pour pouvoir utiliser le service d'exportation et d'importation géré, vous devez effectuer les tâches ci-dessous.
Activer la facturation pour votre projet Google Cloud. Seuls les projets Google Cloud pour lesquels la facturation est activée peuvent utiliser les fonctionnalités d'exportation et d'importation.
Créer un bucket Cloud Storage à l'emplacement où se trouve votre base de données Firestore en mode Datastore. Vous ne pouvez pas utiliser de bucket "Paiements du demandeur" pour les opérations d'exportation et d'importation.
Attribuer à votre compte utilisateur un rôle IAM, qui accorde l'autorisation
datastore.databases.export
si vous exportez des données ou l'autorisationdatastore.databases.import
si vous importez des données. Le rôleDatastore Import Export Admin
, par exemple, accorde les deux autorisations.Si le bucket Cloud Storage se trouve dans un autre projet, donnez-lui accès au bucket.
Configurer gcloud
pour votre projet
Si vous prévoyez d'utiliser gcloud
pour lancer vos opérations d'importation et d'exportation, configurez gcloud
et connectez-vous à votre projet de l'une des manières suivantes :
Accédez à
gcloud
à partir de la console Google Cloud à l'aide de Cloud Shell.Configurez la gcloud CLI pour qu'elle utilise votre projet actuel:
gcloud config set project project-id
Autorisations
Pour exécuter des opérations d'exportation et d'importation, votre compte utilisateur et les identifiants L'agent de service en mode Datastore nécessite les autorisations suivantes pour Identity and Access Management.
Autorisations du compte utilisateur
Le compte utilisateur ou le compte de service à l'origine de l'opération nécessite les autorisations IAM datastore.databases.export
et datastore.databases.import
. Si vous êtes le propriétaire du projet, votre compte dispose des autorisations requises. Sinon, les rôles IAM suivants accordent les autorisations nécessaires :
- Propriétaire Datastore
- Administrateur des importations et des exportations Cloud Datastore
Vous pouvez également attribuer ces autorisations avec un rôle personnalisé.
Un propriétaire de projet peut attribuer l'un de ces rôles en suivant les étapes de la section Accorder l'accès.
Autorisations de l'agent de service
Les opérations d'exportation et d'importation utilisent un agent de service Firestore pour : autoriser les opérations Cloud Storage. L'agent de service Firestore utilise la convention d'attribution de noms suivante :
- Agent de service Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Pour en savoir plus sur les agents de service, consultez la page Agents de service.
L'agent de service Firestore requiert un accès Bucket Cloud Storage utilisé dans une opération d'exportation ou d'importation. Si votre Le bucket Cloud Storage se trouve dans le même projet que Firestore base de données, l'agent de service Firestore peut accéder bucket par défaut.
Si le bucket Cloud Storage se trouve dans un autre projet, vous devez autoriser l'agent de service Firestore à accéder au bucket Cloud Storage.
Attribuer des rôles à l'agent de service
Vous pouvez utiliser l'outil de ligne de commande gsutil pour attribuer l'un des rôles ci-dessous. Par exemple, pour attribuer le rôle "Administrateur de l'espace de stockage" à l'agent de service Firestore, exécutez la commande suivante:
gsutil iam ch serviceAccount:service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com:roles/storage.admin \ gs://[BUCKET_NAME]
Remplacez PROJECT_NUMBER
par votre numéro de projet, qui permet de nommer votre agent de service Firestore. Pour afficher le nom de l'agent de service, consultez Afficher le nom de l'agent de service.
Vous pouvez également attribuer ce rôle à l'aide de la console Google Cloud.
Afficher le nom de l'agent de service
Vous pouvez afficher le compte utilisé par vos opérations d'importation et d'exportation pour autoriser les requêtes sur la page Importations/Exportations de la console Google Cloud. Vous pouvez également vérifier si votre base de données utilise le service ou l'ancien compte de service App Engine.
-
Dans la console Google Cloud, accédez à la page Base de données.
-
Sélectionnez la base de données requise dans la liste des bases de données.
-
Dans le menu de navigation, cliquez sur Importer/Exporter.
- Consultez le compte d'autorisation à côté Libellé Les jobs d'importation/exportation s'exécutent en tant que.
Opérations d'exportation
Pour les opérations d'exportation impliquant un bucket situé dans un autre projet, modifiez les autorisations du bucket pour attribuer l'un des rôles Identity and Access Management suivants : à l'agent de service en mode Datastore du projet qui contient votre base de données en mode Datastore:
- Administrateur de l'espace de stockage
- Propriétaire (rôle de base)
Vous pouvez également créer un rôle personnalisé IAM avec des autorisations légèrement différentes de celles contenues dans les rôles listés précédemment :
storage.buckets.get
storage.objects.create
storage.objects.delete
storage.objects.list
Opérations d'importation
Pour les opérations d'importation impliquant un bucket Cloud Storage situé dans un autre projet, modifiez les autorisations du bucket pour attribuer l'un des rôles Cloud Storage suivants à l'agent de service en mode Datastore du projet contenant votre base de données en mode Datastore :
- Administrateur de l'espace de stockage
- Lecteur des objets de l'espace de stockage et Lecteur des anciens buckets de l'espace de stockage
Vous pouvez également créer un rôle personnalisé IAM avec les autorisations suivantes :
storage.buckets.get
storage.objects.get
Lancer des opérations d'exportation et d'importation gérées
Cette section décrit comment lancer une opération d'exportation ou d'importation gérée.
Exporter toutes les entités
Console
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
- Dans le menu de navigation, cliquez sur Importer/Exporter.
- Cliquez sur Exporter.
- Définissez la valeur du champ Espace de noms sur
All Namespaces
, puis la valeur du champ Genre surAll Kinds
. - Au-dessous de Destination, saisissez le nom de votre bucket Cloud Storage.
- Cliquez sur Exporter.
La console revient à la page Importations/Exportations. Une alerte indique la réussite ou l'échec de votre requête d'exportation gérée.
gcloud
Utilisez le gcloud firestore export
pour exporter toutes les entités de votre base de données.
gcloud firestore export gs://bucket-name --async --database=DATABASE
où bucket-name correspond au nom de votre bucket Cloud Storage et à un préfixe facultatif, par exemple bucket-name/datastore-exports/export-name
. Vous ne pouvez pas réutiliser le même préfixe pour une autre opération d'exportation. Si vous ne fournissez pas de préfixe de fichier, le service d'exportation géré en crée un sur la base de l'heure actuelle.
Utilisez l'option [--async
][async-flag] pour empêcher gcloud
d'attendre
pour terminer l'opération. Si vous omettez l'option --async
, vous pouvez utiliser la combinaison de touches Ctrl+c
pour ne plus attendre la fin de l'opération. L'opération ne sera pas annulée.
Définissez l'indicateur --database
sur le nom de la base de données à partir de laquelle vous souhaitez exporter les entités. Pour la base de données par défaut, utilisez --database='(default)'
.
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
- bucket-name : nom de votre bucket Cloud Storage.
Méthode HTTP et URL :
POST https://datastore.googleapis.com/v1/projects/project-id:export
Corps JSON de la requête :
{ "outputUrlPrefix": "gs://bucket-name", }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-09-18T18:42:26.591949Z", "operationType": "EXPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": {}, "outputUrlPrefix": "gs://bucket-name/2019-09-18T18:42:26_85726" } }
Exporter des genres ou des espaces de noms spécifiques
Pour exporter un sous-ensemble spécifique de genres et/ou d'espaces de noms, fournissez un filtre d'entité avec des valeurs pour les genres et les ID d'espaces de noms. Chaque requête est limitée à 100 combinaisons de filtres d'entité, chaque combinaison de genre filtré et d'espace de noms étant comptabilisée comme un filtre distinct dans cette limite.
Console
Dans la console, vous pouvez sélectionner tous les genres ou un genre spécifique. De même, vous pouvez sélectionner tous les espaces de noms ou un espace de noms spécifique.
Pour spécifier une liste d'espaces de noms et de genres à exporter, utilisez plutôt gcloud
.
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
Cliquez sur Exporter.
Définissez la valeur du champ Espace de noms sur
All Namespaces
ou sur le nom de l'un de vos espaces de noms.Définissez la valeur du champ Genre sur
All Kinds
ou sur le nom d'un genre.Sous Destination, saisissez le nom de votre bucket Cloud Storage.
Cliquez sur Exporter.
La console revient à la page Importations/Exportations. Une alerte indique la réussite ou l'échec de votre requête d'exportation gérée.
gcloud
gcloud firestore export --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name \ --async \ --database=DATABASE
où bucket-name correspond au nom de votre bucket Cloud Storage et à un préfixe facultatif, par exemple bucket-name/datastore-exports/export-name
. Vous ne pouvez pas réutiliser le même préfixe pour une autre opération d'exportation. Si vous ne fournissez pas de préfixe de fichier, le service d'exportation géré en crée un sur la base de l'heure actuelle.
Utilisez l'indicateur [--async
][async-flag] pour empêcher gcloud
d'attendre la fin de l'opération. Si vous omettez l'option --async
, vous pouvez utiliser la combinaison de touches Ctrl+c
pour ne plus attendre la fin de l'opération. L'opération ne sera pas annulée.
Définissez l'option --database
sur le nom de la base de données à partir de laquelle vous souhaitez exporter des genres ou des espaces de noms spécifiques. Pour la base de données par défaut, utilisez --database='(default)'
.
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
- bucket-name : nom de votre bucket Cloud Storage.
- kind : genre de l'entité.
- namespace : ID de l'espace de noms (utilisez "" pour l'ID d'espace de noms par défaut).
Méthode HTTP et URL :
POST https://datastore.googleapis.com/v1/projects/project-id:export
Corps JSON de la requête :
{ "outputUrlPrefix": "gs://bucket-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:17:36.232704Z", "operationType": "EXPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name/2019-09-18T21:17:36_82974" } }
Fichiers de métadonnées :
Une opération d'exportation crée un fichier de métadonnées pour chaque paire espace de noms/genre spécifiée. Les fichiers de métadonnées sont généralement nommés NAMESPACE_NAME_KIND_NAME.export_metadata
. Toutefois, si un espace de noms ou un genre crée un nom d'objet Cloud Storage non valide, le fichier est nommé export[NUM].export_metadata
.
Les fichiers de métadonnées sont des tampons de protocole et peuvent être décodés à l'aide du compilateur de protocole protoc
.
Par exemple, vous pouvez décoder un fichier de métadonnées afin de déterminer l'espace de noms et les genres que les fichiers d'exportation contiennent :
protoc --decode_raw < export0.export_metadata
Importer toutes les entités
Console
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
Cliquez sur Importer.
Dans le champ
File
, cliquez sur Parcourir et sélectionnez un fichier.overall_export_metadata
.Assurez-vous que le fichier
.overall_export_metadata
n'est pas déplacé de l'emplacement par défaut.Définissez la valeur du champ Espace de noms sur
All Namespaces
, puis la valeur du champ Genre surAll Kinds
.Cliquez sur Import (Importer).
La console revient à la page Importations/Exportations. Une alerte indique la réussite ou l'échec de votre requête d'importation gérée.
gcloud
Utilisez la commande gcloud firestore import pour importer toutes les entités précédemment exportées avec le service d'exportation géré.
gcloud firestore import gs://bucket-name/file-path/file-name.overall_export_metadata \ --async \ --database=DATABASE
où bucket-name/file-path/file-name correspond au chemin d'accès à votre fichier overall_export_metadata
dans votre bucket Cloud Storage.
Utilisez l'indicateur [--async
][async-flag] pour empêcher gcloud
d'attendre la fin de l'opération. Si vous omettez l'option --async
, vous pouvez saisir
Ctrl+c
pour ne plus attendre une opération. L'opération ne sera pas annulée.
Définissez l'indicateur --database
sur le nom de la base de données dans laquelle vous souhaitez importer toutes les entités. Pour la base de données par défaut, utilisez --database='(default)'
.
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
- bucket-name : nom de votre bucket Cloud Storage.
- object-name : nom de votre objet Cloud Storage (exemple :
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
).
Méthode HTTP et URL :
POST https://datastore.googleapis.com/v1/projects/project-id:import
Corps JSON de la requête :
{ "inputUrl": "gs://bucket-name/object-name", }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:25:02.863621Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": {}, "inputUrl": "gs://bucket-name/2019-09-18T18:42:26_85726/2019-09-18T18:42:26_85726.overall_export_metadata" } }
Localiser votre fichier overall_export_metadata
Ouvrez le navigateur Cloud Storage dans la console Google Cloud pour déterminer la valeur de l'emplacement d'importation à utiliser :
Ouvrir le navigateur Cloud Storage
Vous pouvez également répertorier et décrire les opérations terminées. Le champ outputURL
indique le nom du fichier overall_export_metadata
:
"outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata",
Importer des genres ou des espaces de noms spécifiques
Pour importer un sous-ensemble spécifique de genres et/ou d'espaces de noms, fournissez un filtre d'entité avec des valeurs pour les genres et les ID d'espaces de noms.
Vous ne pouvez spécifier des genres et des espaces de noms que si les fichiers d'exportation ont été créés avec un filtre d'entité. Vous ne pouvez pas importer un sous-ensemble de genres et d'espaces de noms à partir d'une exportation de toutes les entités.
Console
Dans la console, vous pouvez sélectionner tous les genres ou un genre spécifique. De même, vous pouvez sélectionner tous les espaces de noms ou un espace de noms spécifique.
Pour spécifier une liste d'espaces de noms et de genres à exporter, utilisez plutôt gcloud
.
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
Cliquez sur Importer.
Dans le champ
File
, cliquez sur Parcourir et sélectionnez un fichier.overall_export_metadata
.Veillez à importer le fichier
.overall_export_metadata
, et non une.export_metadata
.Définissez le champ Espace de nom sur
All Namespaces
ou sur un espace de noms spécifique.Définissez la valeur du champ Genre sur
All Kinds
ou sur un genre spécifique.Cliquez sur Import (Importer).
La console revient à la page Importations/Exportations. Une alerte indique la réussite ou l'échec de votre requête d'importation gérée.
gcloud
gcloud firestore import --collection-ids="KIND1,KIND2" \ --namespaces="(default),NAMESPACE2" \ gs://bucket-name/file-path/file-nameoverall_export_metadata \ --async \ --database=DATABASE
où bucket-name/file-path/file-name correspond au chemin d'accès à votre fichier overall_export_metadata
dans votre bucket Cloud Storage.
Utilisez l'indicateur [--async
][async-flag] pour empêcher gcloud
d'attendre la fin de l'opération. Si vous omettez l'option --async
, vous pouvez saisir
Ctrl+c
pour ne plus attendre une opération. L'opération ne sera pas annulée.
Définissez l'indicateur --database
sur le nom de la base de données dans laquelle vous souhaitez importer les types ou les espaces de noms spécifiques. Pour la base de données par défaut, utilisez --database='(default)'
.
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
- bucket-name : nom de votre bucket Cloud Storage.
- object-name : nom de votre objet Cloud Storage (exemple :
2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata
). - kind : genre de l'entité.
- namespace : ID de l'espace de noms (utilisez "" pour l'ID d'espace de noms par défaut).
Méthode HTTP et URL :
POST https://datastore.googleapis.com/v1/projects/project-id:import
Corps JSON de la requête :
{ "inputUrl": "gs://bucket-name/object-name", "entityFilter": { "kinds": ["kind"], "namespaceIds": ["namespace"], }, }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/operations/operation-id", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ImportEntitiesMetadata", "common": { "startTime": "2019-09-18T21:51:02.830608Z", "operationType": "IMPORT_ENTITIES", "state": "PROCESSING" }, "entityFilter": { "kinds": [ "Task" ], "namespaceIds": [ "" ] }, "inputUrl": "gs://bucket-name/2019-09-18T21:49:25_96833/2019-09-18T21:49:25_96833.overall_export_metadata" } }
Exporter et importer des données PITR
Vous pouvez exporter votre base de données vers Cloud Storage à partir de données PITR
à 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 n'existent plus à l'horodatage spécifié, l'opération d'exportation échoue.
L'opération d'exportation PITR est compatible avec tous les filtres, y compris l'exportation de toutes les entités et l'exportation de genres ou d'espaces de noms spécifiques.
Exportez la base de données en spécifiant le paramètre
snapshot-time
vers l'horodatage de récupération requis.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] \ --namespace-ids=[NAMESPACE_IDS]
Où :
PITR_TIMESTAMP
: code temporel PITR au niveau de la minute, par exemple2023-05-26T10:20:00.00Z
.
Vous pouvez également [exporter un sous-ensemble spécifique de genres et/ou d'espaces de noms à l'aide d'un filtre d'entité][export-kind].
Notez les points suivants avant d'exporter des données PITR :
- Spécifiez l'horodatage au format RFC 3339.
Exemple :
2020-09-01T23:59:30.234233Z
- Assurez-vous que l'horodatage que vous spécifiez est un code temporel entier de la minute au cours des sept derniers jours, mais pas antérieur à
earliestVersionTime
. Si les données n'existent plus à l'horodatage spécifié, vous obtenez une erreur. - Aucuns frais ne vous seront facturés en cas d'échec de l'exportation PITR.
Importez des données dans une base de données.
Suivez la procédure décrite dans Importer toutes les entités pour importer votre base de données exportée. Si une entité existe déjà dans votre base de données, elle sera écrasée. Vous pouvez également importer un sous-ensemble spécifique de genres et/ou d'espaces de noms à l'aide d'un filtre d'entité.
Importer des transformations
Lorsque vous importez des entités depuis un autre projet, gardez à l'esprit que les clés d'entité incluent l'ID du projet. Une opération d'importation met à jour les clés d'entité et les propriétés des références de clé dans les données d'importation avec l'ID du projet de destination. Si cette mise à jour augmente la taille de vos entités, cela peut entraîner des erreurs de type "entity is too big" (l'entité est trop grande) ou "index entries too large" (les entrées d'index sont trop volumineuses) lors des opérations d'importation.
Pour éviter ces erreurs, importez les données dans un projet de destination présentant un ID de projet plus court. Cela n'affecte pas les opérations d'importation avec des données du même projet.
Gérer les opérations de longue durée
Les opérations d'importation et d'exportation gérées sont des opérations de longue durée. Ces appels de méthode peuvent prendre beaucoup de temps.
Lorsque vous lancez une opération d'exportation ou d'importation, le mode Datastore attribue un nom unique à l'opération. Vous pouvez utiliser le nom de l'opération pour supprimer, annuler ou vérifier l'état de l'opération.
Les noms des opérations sont précédés du préfixe projects/[PROJECT_ID]/databases/(default)/operations/
, par exemple :
projects/project-id/databases/(default)/operations/ASA1MTAwNDQxNAgadGx1YWZlZAcSeWx0aGdpbi1zYm9qLW5pbWRhEgopEg
Vous pouvez omettre le préfixe lorsque vous spécifiez un nom d'opération pour les commandes gcloud
.
Répertorier toutes les opérations de longue durée
Vous pouvez afficher les opérations en cours et récemment terminées de différentes manières. Une fois terminées, les opérations restent accessibles pendant quelques jours :
Console
Vous pouvez consulter la liste des opérations de longue durée dans la page Importer/Exporter de la console Google Cloud.
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
gcloud
Pour répertorier les opérations de longue durée, utilisez la commande gcloud datastore operations list.
gcloud datastore operations list
Par exemple, une opération d'exportation récemment terminée affiche les informations suivantes :
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
Méthode HTTP et URL :
GET https://datastore.googleapis.com/v1/projects/project-id/operations
Pour envoyer votre requête, développez l'une des options suivantes :
Consultez les informations concernant la réponse ci-dessous.
Par exemple, une opération d'exportation récemment terminée affiche les informations suivantes :
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2017-12-05T23:01:39.583780Z", "endTime": "2017-12-05T23:54:58.474750Z", "operationType": "EXPORT_ENTITIES" }, "progressEntities": { "workCompleted": "21933027", "workEstimated": "21898182" }, "progressBytes": { "workCompleted": "12421451292", "workEstimated": "9759724245" }, "entityFilter": { "namespaceIds": [ "" ] }, "outputUrlPrefix": "gs://bucket-name" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2017-05-25T23:54:39_76544/2017-05-25T23:54:39_76544.overall_export_metadata" } } ] }
Vérifier l'état de l'opération
Pour afficher l'état d'une opération de longue durée :
Console
Vous pouvez afficher la liste des opérations d'exportation et d'importation les plus récentes sur la page Importations/Exportations de Google Cloud Console.
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
gcloud
Utilisez la commande operations describe
pour afficher l'état d'une opération de longue durée.
gcloud datastore operations describe operation-name
rest
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
- project-id : ID de votre projet.
- operation-name : nom de l'opération.
Méthode HTTP et URL :
GET https://datastore.googleapis.com/v1/projects/project-id/operations/operation-name
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "name": "projects/project-id/operations/ASA3ODAwMzQxNjIyChp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKLRI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", "common": { "startTime": "2019-10-08T20:07:28.105236Z", "endTime": "2019-10-08T20:07:36.310653Z", "operationType": "EXPORT_ENTITIES", "state": "SUCCESSFUL" }, "progressEntities": { "workCompleted": "21", "workEstimated": "21" }, "progressBytes": { "workCompleted": "2272", "workEstimated": "2065" }, "entityFilter": {}, "outputUrlPrefix": "gs://bucket-name/2019-10-08T20:07:28_28481" }, "done": true, "response": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesResponse", "outputUrl": "gs://bucket-name/2019-10-08T20:07:28_28481/2019-10-08T20:07:28_28481.overall_export_metadata" } }
Estimation du délai d'exécution
Lorsque l'opération s'exécute, consultez la valeur du champ state
pour connaître son état global.
Une requête permettant d'obtenir l'état d'une opération de longue durée renvoie les métriques workEstimated
et workCompleted
. Chacune de ces métriques est renvoyée à la fois en nombre d'octets et en nombre d'entités :
workEstimated
indique le nombre total estimé d'octets et de documents qu'une opération va traiter. Le mode Datastore peut omettre cette métrique s'il ne peut pas effectuer d'estimation.workCompleted
indique le nombre d'octets et de documents traités jusqu'à présent. Une fois l'opération terminée, la valeur indique le nombre total d'octets et de documents réellement traités, qui peut être supérieur à la valeur deworkEstimated
.
Divisez workCompleted
par workEstimated
pour obtenir une estimation approximative de la progression. Cette estimation peut être inexacte, car elle dépend de la collecte de statistiques retardée.
Par exemple, voici l'état de la progression d'une opération d'exportation :
{ "operations": [ { "name": "projects/project-id/operations/ASAyMDAwOTEzBxp0bHVhZmVkBxJsYXJ0bmVjc3Utc2Jvai1uaW1kYRQKKhI", "metadata": { "@type": "type.googleapis.com/google.datastore.admin.v1.ExportEntitiesMetadata", ... "progressEntities": { "workCompleted": "1", "workEstimated": "3" }, "progressBytes": { "workCompleted": "85", "workEstimated": "257" }, ...
Lorsqu'une opération se termine, la description de l'opération contient "done":
true
. Consultez la valeur du champ state
pour afficher le résultat de l'opération. Si le champ done
n'est pas défini dans la réponse, sa valeur est false
. Ne vous basez pas sur l'existence de la valeur done
pour les opérations en cours.
Annuler une opération
Console
Vous pouvez annuler une opération d'exportation ou d'importation en cours d'exécution dans le page Importer/Exporter de la console Google Cloud.
Dans la console Google Cloud, accédez à la page Base de données.
Sélectionnez la base de données requise dans la liste des bases de données.
Dans le menu de navigation, cliquez sur Importer/Exporter.
Dans le tableau Recent imports and exports (Importations et exportations récentes), les opérations en cours d'exécution incluent un bouton Cancel (Annuler) dans la colonne Completed (Terminé). Cliquez sur le bouton Cancel (Annuler) pour arrêter l'opération. Le bouton affiche un message Annulation, puis passe à l'état Annulé lorsque l'opération s'arrête complètement.
gcloud
Utilisez la commande operations cancel
pour arrêter une opération en cours :
gcloud datastore operations cancel operation-name
L'annulation d'une opération en cours n'annule pas l'opération. Une opération d'exportation annulée laisse des documents déjà exportés dans Cloud Storage, et une opération d'importation annulée conserve les mises à jour déjà effectuées dans votre base de données. Vous ne pouvez pas importer une exportation partiellement terminée.
Supprimer une opération
gcloud
Utilisez la commande operations delete
pour supprimer une opération de la liste des opérations récentes. Cette commande ne supprime pas les fichiers d'exportation de Cloud Storage.
gcloud datastore operations delete operation-name
Facturation et tarifs des importations et exportations
Vous devez activer la facturation pour votre projet Google Cloud pour pouvoir utiliser le service d'exportation et d'importation géré. Les opérations d'exportation et d'importation contribuent à vos coûts Google Cloud de différentes manières :
- Les lectures et les écritures d'entités effectuées par les opérations d'exportation et d'importation sont comptabilisées dans les coûts liés à l'utilisation de Firestore en mode Datastore. Les opérations d'exportation entraînent une lecture par entité exportée. Les opérations d'importation entraînent une opération d'écriture par L'entité a été importée.
- Les fichiers de sortie stockés dans Cloud Storage sont comptabilisés dans les coûts de stockage des données de Cloud Storage.
Les opérations d'exportation ou d'importation déclencher des alertes de budget Google Cloud jusqu'à la fin de l'opération. De même, les lectures et les écritures effectuées lors d'une opération d'exportation ou d'importation appliqué à votre quota quotidien une fois l'opération terminée.
Afficher les coûts d'exportation et d'importation
Les opérations d'exportation et d'importation appliquent le libellé goog-firestoremanaged:exportimport
aux opérations facturées. Sur la page Rapports Cloud Billing, vous pouvez utiliser ce libellé pour afficher les coûts liés aux opérations d'importation et d'exportation :
Différences par rapport aux sauvegardes de l'administration Cloud Datastore
Si vous avez déjà utilisé la console d'administration Datastore pour les opérations de sauvegarde, vous remarquerez les différences suivantes :
Les exportations créées par une exportation gérée n'apparaissent pas dans le Console d'administration Datastore. Les exportations et importations gérées sont qui ne partage pas de données avec le service de sauvegarde et de restauration d'App Engine qui est administrée via la console Google Cloud.
Le service d'exportation et d'importation géré n'utilise pas les mêmes métadonnées que la sauvegarde de l'administration Datastore et ne stocke pas l'état de progression dans votre base de données. Pour en savoir plus sur la vérification de la progression des opérations d'exportation et d'importation, consultez la section Gérer les opérations de longue durée.
Vous ne pouvez pas afficher les journaux de service des opérations d'exportation et d'importation gérées.
Le service d'importation géré est rétrocompatible avec les fichiers de sauvegarde de l'administration Datastore. Vous pouvez importer un fichier de sauvegarde de l'administration Datastore à l'aide du service d'importation géré, mais vous ne pouvez pas importer le résultat d'une exportation gérée à l'aide de la console d'administration Datastore.
Importer des données dans BigQuery
Pour importer des données d'une exportation gérée dans BigQuery, consultez la section Charger des données du service d'exportation Datastore.
Les données exportées sans filtre d'entité spécifié ne peuvent pas être chargées dans BigQuery. Si vous souhaitez importer des données dans BigQuery, votre demande d'exportation doit inclure un ou plusieurs noms de genre dans le filtre d'entité.
Limite des colonnes BigQuery
BigQuery impose une limite de 10 000 colonnes par table. Les opérations d'exportation génèrent un schéma de table BigQuery pour chaque genre. Dans ce schéma, chaque propriété unique dans les entités d'un genre devient une colonne de schéma.
Si le schéma BigQuery d'un genre dépasse 10 000 colonnes, l'opération d'exportation tente de rester sous la limite de colonnes en traitant les entités intégrées comme des objets blob. Si cette conversion réduit le nombre de colonnes du schéma à moins de 10 000, vous pouvez charger les données dans BigQuery, mais vous ne pouvez pas interroger les propriétés dans les entités intégrées. Si le nombre de colonnes dépasse toujours 10 000, l'opération d'exportation ne génère pas de schéma BigQuery pour le genre et vous ne pouvez pas charger ses données dans BigQuery.
Migration de l'agent de service
Firestore utilise un agent de service Firestore pour autoriser l'importation et d'exportation au lieu d'utiliser le compte de service App Engine. L'agent de service et le compte de service utilisent les conventions d'attribution de noms suivantes:
- Agent de service Firestore
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
Firestore utilisait auparavant le service App Engine par défaut au lieu de l'agent de service Firestore. Si votre base de données utilise toujours le compte de service App Engine pour importer ou exporter des données, nous vous recommandons de suivre les instructions de cette section pour passer à l'agent de service Firestore.
- Compte de service App Engine
PROJECT_ID@appspot.gserviceaccount.com
L'agent de service Firestore est préférable, car il est spécifique vers Firestore. Le compte de service App Engine est partagé par plusieurs services.
Afficher le compte d'autorisation
Vous pouvez voir quel compte vos opérations d'importation et d'exportation utilisent pour autoriser depuis la page Importations/Exportations de la console Google Cloud. Vous pouvez également vérifier si votre base de données utilise déjà l'agent de service Firestore.
-
Dans la console Google Cloud, accédez à la page Base de données.
- Sélectionnez la base de données requise dans la liste des bases de données.
-
Dans le menu de navigation, cliquez sur Importer/Exporter.
- Consultez le compte d'autorisation à côté Libellé Les jobs d'importation/exportation s'exécutent en tant que.
Si votre projet n'utilise pas l'agent de service Firestore, vous pouvez migrer vers l'agent de service Firestore à l'aide de l'une des techniques suivantes :
- Migrer un projet en vérifiant et en mettant à jour les autorisations associées au bucket Cloud Storage (recommandé).
- Ajoutez une contrainte de règle d'administration qui affecte tous les projets de l'organisation.
La première de ces techniques est préférable, car elle localise la portée de dans un seul projet en mode Datastore. La deuxième technique n'est pas à privilégier, car les bucket Cloud Storage existants ne sont pas migrés autorisations. Il offre cependant une conformité en matière de sécurité au niveau de l'organisation à l'échelle du projet.
Migrer en vérifiant et en mettant à jour les autorisations du bucket Cloud Storage
Le processus de migration comporte deux étapes :
- Mettre à jour les autorisations du bucket Cloud Storage Pour en savoir plus, consultez la section suivante.
- Confirmez la migration vers l'agent de service Firestore.
Autorisations de bucket pour les agents de service
Pour toute opération d'exportation ou d'importation qui utilise un bucket Cloud Storage dans un autre projet, vous devez accorder des autorisations à l'agent de service Firestore pour ce bucket. Par exemple, les opérations qui déplacent des données vers un autre projet doit accéder à un bucket de cet autre projet. Sinon, ces les opérations échouent après la migration vers le service Firestore un agent.
Les workflows d'importation et d'exportation qui restent dans le même projet ne nécessitent pas les modifications apportées aux autorisations. L'agent de service Firestore peut accéder du même projet par défaut.
Mettez à jour les autorisations des buckets Cloud Storage à partir d'autres projets pour accorder un accès à l'agent de service service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
. Attribuez le rôle Firestore Service Agent
à l'agent de service.
Le rôle Firestore Service Agent
accorde des autorisations de lecture et d'écriture pour un
bucket Cloud Storage. Si vous ne devez accorder que des autorisations de lecture ou d'écriture, utilisez un rôle personnalisé.
Le processus de migration décrit dans la section suivante vous aide à identifier les buckets Cloud Storage qui peuvent nécessiter une mise à jour des autorisations.
Migrer un projet vers l'agent de service Firestore
Suivez les étapes ci-dessous pour migrer du compte de service App Engine vers l'agent de service Firestore. Une fois terminée, la migration est irréversible.
-
Dans la console Google Cloud, accédez à la page Base de données.
- Sélectionnez la base de données requise dans la liste des bases de données.
-
Dans le menu de navigation, cliquez sur Importer/Exporter.
-
Si votre projet n'a pas encore été migré vers l'agent de service Firestore, une bannière décrivant la migration et un bouton Vérifier l'état du bucket s'affichent. L'étape suivante vous aide à identifier et pour corriger les éventuelles erreurs d'autorisation.
Cliquez sur Vérifier l'état du bucket.
Un menu s'affiche avec l'option de terminer la migration et une liste de buckets Cloud Storage. L'opération peut prendre quelques minutes pour terminer le chargement.
Cette liste inclut les buckets qui ont récemment été utilisés dans des opérations d'importation et d'exportation, mais qui n'accordent pas actuellement d'autorisations de lecture et d'écriture à l'agent de service en mode Datastore.
- Notez le nom du principal de l'agent de service du mode Datastore de votre projet. Le nom de l'agent de service s'affiche sous le libellé Agent de service auquel donner l'accès.
-
Pour tout bucket de la liste que vous pour de futures opérations d'importation ou d'exportation, procédez comme suit : étapes:
-
Sur la ligne du tableau de ce bucket, cliquez sur Corriger. La page des autorisations de ce bucket s'ouvre dans un nouvel onglet.
- Cliquez sur Ajouter.
- Dans le champ Nouveaux comptes principaux, saisissez le nom de votre Agent de service Firestore.
- Dans le champ Sélectionnez un rôle, sélectionnez Agents de service > Agent de service Firestore.
- Cliquez sur Enregistrer.
- Revenez à l'onglet contenant la page "Importations/Exportations" du mode Datastore.
- Répétez ces étapes pour les autres buckets de la liste. Veillez à consulter toutes les pages de la liste.
-
-
Cliquez sur Migrer vers l'agent de service Firestore. Si vous des buckets dont les vérifications d'autorisation ont échoué, confirmer votre migration en cliquant sur Migrer.
Une alerte vous informe lorsque la migration est terminée. Cette opération est irréversible.
Afficher l'état de la migration
Pour vérifier l'état de la migration de votre projet :
-
Dans la console Google Cloud, accédez à la page Base de données.
- Sélectionnez la base de données requise dans la liste des bases de données.
-
Dans le menu de navigation, cliquez sur Importer/Exporter.
-
Recherchez l'utilisateur principal à côté de l'étiquette Les tâches d'importation/exportation s'exécutent avec.
Si le principal est
service-PROJECT_NUMBER@gcp-sa-firestore.iam.gserviceaccount.com
, votre projet a déjà été migré vers l'agent de service Firestore. La migration est irréversible.Si le projet n'a pas été migré, une bannière s'affiche en haut de la page. à l'aide d'un bouton Vérifier l'état du bucket. Consultez la section Migrer vers l'agent de service Firestore pour effectuer la migration.
Ajouter une contrainte de règle à l'échelle de l'organisation
-
Définissez la contrainte suivante dans le règlement de votre organisation :
Agent de service Firestore requis pour l'importation/exportation (
firestore.requireP4SAforImportExport
).Cette contrainte exige que les opérations d'importation et d'exportation utilisent l'agent de service Firestore pour autoriser les requêtes. Pour définir cette contrainte, consultez Créer et gérer des règles d'administration
L'application de cette contrainte de règle d'administration n'accorde pas automatiquement les autorisations appropriées pour le bucket Cloud Storage Agent de service Firestore.
Si la contrainte crée des erreurs d'autorisation pour des workflows d'importation ou d'exportation, vous pouvez la désactiver pour revenir au compte de service par défaut. Après avoir vérifié et mis à jour les autorisations du bucket Cloud Storage, vous pouvez réactiver la contrainte.