Déplacer des données entre des projets
Cette page explique comment utiliser les fonctionnalités d'importation et d'exportation gérées pour transférer des données Firestore d'un projet à un autre. Cela peut être utile pour la configuration d'un environnement de développement ou dans le cadre de la migration permanente d'une application vers un autre projet. L'exemple présenté sur cette page montre comment exporter des données à partir d'un projet source, puis les réimporter dans un projet de destination. Pour déplacer des données d'un projet à l'autre, procédez comme suit :
- Créez un bucket Cloud Storage pour stocker les données de votre projet source.
- Exportez les données de votre projet source vers le bucket.
- Accordez à votre projet de destination l'accès en lecture à partir du bucket.
- Importez les données du bucket dans votre projet de destination.
Avant de commencer
Pour pouvoir utiliser le service d'exportation et d'importation géré, vous devez effectuer les tâches ci-dessous :
- Activez la facturation pour votre projet source et votre projet de destination. Seuls les projets Google Cloud pour lesquels la facturation est activée peuvent utiliser les fonctionnalités d'exportation et d'importation.
-
Assurez-vous que votre compte dispose des autorisations IAM nécessaires dans votre projet source et votre projet de destination. Si vous êtes le propriétaire des deux projets, votre compte dispose des autorisations requises. Sinon, les rôles IAM suivants accordent les autorisations nécessaires pour les opérations d'importation et d'exportation Firestore :
Owner
,Cloud Datastore Owner
ouCloud Datastore Import Export Admin
Un propriétaire de projet peut attribuer l'un de ces rôles en suivant les étapes de la section Accorder l'accès.
-
Configurez l'outil de ligne de commande
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.Assurez-vous que
gcloud
est configuré pour le bon projet :gcloud config set project [SOURCE_PROJECT_ID]
-
-
Configurez des index dans votre nouveau projet. Les index composites doivent correspondre entre les projets source et de destination. Les index doivent d'abord être configurés pour éviter d'avoir à traiter chaque document plusieurs fois.
Exporter les données du projet source
Exportez vos données en créant un bucket Cloud Storage pour vos fichiers d'exportation Firestore et en démarrant une opération d'exportation.
Créer un bucket Cloud Storage
Créez un bucket Cloud Storage à l'emplacement où se trouve votre base de données Firestore. Pour connaître la zone de votre base de données, consultez vos paramètres de localisation du projet. Vous ne pouvez pas utiliser de bucket "Paiements du demandeur" pour les opérations d'exportation et d'importation.
Si votre bucket Cloud Storage ne se trouve pas dans votre projet source, vous devez accorder au compte de service par défaut du projet source l'accès au bucket. Chaque projet Google Cloud dispose d'un compte de service par défaut créé automatiquement sous le nom PROJECT_ID@appspot.gserviceaccount.com
. Les opérations d'exportation Firestore utilisent ce compte de service par défaut pour autoriser les opérations de bucket Cloud Storage. Pour accorder au compte de service par défaut l'accès à votre bucket source, attribuez-lui le rôle Storage Admin
.
Vous pouvez attribuer ce rôle avec l'outil gsutil
disponible dans Cloud Shell :
gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\ gs://[BUCKET_NAME]@
Vous pouvez également attribuer ce rôle dans Google Cloud Console.
Désactiver les opérations d'écriture (facultatif)
Si votre application continue à écrire dans votre base de données pendant que vous effectuez une opération d'exportation, vous risquez de ne pas capturer toutes ces écritures dans vos fichiers d'exportation. Pour exporter des données à partir d'un état cohérent, désactivez les écritures dans votre base de données en mettant à jour vos règles de sécurité et en interrompant les opérations du SDK Admin.
Mettre à jour les règles de sécurité
Dans l'onglet Règles Firestore de la console, mettez à jour les règles de sécurité de votre projet source pour refuser toutes les écritures. Exemple :
// Deny write access to all users under any conditions service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow write: if false; } // Reads do not affect export operations // Add your read rules here } }
Interrompre les écritures des SDK Admin
Les règles de sécurité n'empêchent pas les écritures provenant d'environnements de serveurs privilégiés créés à l'aide d'un SDK Firebase Admin ou d'une bibliothèque cliente du serveur Google Cloud. Veillez à interrompre les opérations d'écriture depuis vos serveurs d'administration en fermant ou en mettant à jour vos serveurs.
Lancer une opération d'exportation
Utilisez la commande gcloud firestore export
pour exporter les données de votre projet source. Vous pouvez exporter toutes vos données ou seulement certaines collections. Remplacez [SOURCE_BUCKET]
par le nom de votre bucket Cloud Storage.
- Exporter toutes les données
-
gcloud firestore export gs://[SOURCE_BUCKET] --async
- Exporter des collections spécifiques
-
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_ID_1],[COLLECTION_ID_2] --async
Notez le outputURIPrefix
de votre opération d'exportation, car vous l'utiliserez ultérieurement. Par défaut, Firestore ajoute un préfixe à vos fichiers d'exportation en fonction d'un horodatage :
outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418
Lorsque l'opération d'exportation est en cours d'exécution, vous pouvez utiliser la commande firestore operations list
pour afficher la progression de votre opération :
gcloud firestore operations list
Importer des données dans le projet de destination
Ensuite, accordez au projet de destination l'accès à vos fichiers de données Firestore et lancez une opération d'importation.
Accorder au projet de destination l'accès à vos fichiers de données
Avant de lancer une opération d'importation, vous devez vous assurer que votre projet de destination peut accéder à vos fichiers de données Firestore.
Déplacer des fichiers de données vers un bucket local
Si la zone du bucket source diffère de celle de votre projet de destination Firestore, vous devez déplacer vos fichiers de données vers un bucket Cloud Storage situé dans la même zone que votre projet de destination.
Déplacez vos fichiers de données vers un autre bucket Cloud Storage en suivant les étapes décrites dans la section Déplacer et renommer des buckets.
Pour toutes les étapes suivantes, utilisez ce nouveau bucket en tant que [SOURCE_BUCKET]
.
Accorder au compte de service du projet l'accès à votre bucket source
Si votre bucket source n'est pas dans votre projet de destination, vous devez accorder au compte de service par défaut du projet de destination l'accès à votre bucket source. Le compte de service par défaut s'appelle [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com
. Pour accorder au compte de service par défaut l'accès à votre bucket source, attribuez-lui les autorisations appropriées pour y accéder.
Vous pouvez attribuer les rôles nécessaires avec l'outil gsutil
disponible dans Cloud Shell:
gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \ gs://[SOURCE_BUCKET]
Vous pouvez également attribuer ce rôle dans Google Cloud Console.
Lancer une opération d'importation
Avant de lancer l'importation, assurez-vous que gcloud
est configuré pour le bon projet :
gcloud config set project [DESTINATION_PROJECT_ID]
Utilisez la commande gcloud firestore import
pour importer les données de votre bucket source dans votre projet de destination :
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async
Où [EXPORT_PREFIX]
correspond au préfixe dans le outputUriPrefix
de votre opération d'exportation. Exemple :
gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async
Lorsque l'opération d'exportation est en cours d'exécution, vous pouvez utiliser la commande firestore operations list
pour afficher la progression de votre opération :
gcloud firestore operations list