6
votes

Exportation / importation de Firestore et de seau de stockage entre les projets

Ainsi, dans les fonctions bêta actuelles de l'interface de ligne de commande Google Cloud, il existe une option permettant d'importer et d'exporter des données Firestore. https://firebase.google.com/docs/firestore/manage-data / export-import

Maintenant, j'ai fait une exportation dans un bucket, tout a bien fonctionné et je l'ai réimporté, bien travaillé aussi. Maintenant, j'ai 2 projets différents et je veux importer la sauvegarde dans un autre projet, est-ce possible? Ce serait bien si je n'ai besoin d'un compte de facturation que pour un seul projet.

Cette ligne dans la documentation dit que c'est possible

Une fois que vous avez exporté des fichiers dans Cloud Storage, vous pouvez importer des documents dans ces fichiers dans votre projet ou dans un autre projet.

Mais les documents ne couvrent pas exactement comment c'est fait?


3 commentaires

La documentation vous donne des exemples de commandes gcloud à exécuter pour importer la sauvegarde depuis votre compartiment de stockage. Je pense que cela suppose que vous comprenez comment faire fonctionner gcloud entre différents projets. Tant que votre compte Google dispose d'un accès administrateur aux deux projets, vous devriez pouvoir importer à partir d'un bucket d'un projet vers Firestore dans un autre projet. Y a-t-il quelque chose de spécifique sur lequel vous êtes coincé?


@DougStevenson Rien de spécifique, mais que se passerait-il si j'avais un Cloud Bucket avec le même nom et une sauvegarde avec le même nom dans les deux projets, lequel prendrait-il le chemin si j'opte pour la syntaxe du chemin d'importation comme dans la documentation


Il ne peut y avoir deux buckets portant le même nom nulle part dans Google Cloud. Ils sont uniques.


4 Réponses :


13
votes

Il est possible d'importer / d'exporter entre les projets. Voici les étapes qui ont fonctionné pour moi:

Tout d'abord, assurez-vous que l'outil de ligne de commande gcloud est installé. Instructions de configuration, et des informations complètes sur le processus d'exportation / importation peuvent être lues sur la documentation de Firebase page sur Export et import Firestore .

Avant de continuer, définissez le projet gcloud sur le projet à partir duquel vous souhaitez source vos données:

Projet gcloud config set [PROJECT_ID]

Ensuite, à l'aide de l'application Web Google Cloud Console , assurez-vous qu'un bucket Cloud Storage a été créé sur le projet qui sera la source des données.

Par exemple, pour le bucket source, vous pouvez créer un bucket tel que:

gs: // mon-export-projet-source .

Vous pouvez nommer le bucket comme vous le souhaitez, à condition de choisir quelque chose d'unique.

L'exportation des données sources peut ensuite être complétée à l'aide d'une commande. Par exemple, si vous souhaitez exporter uniquement les collections caméras et radios dans votre compartiment my-source-project-export , avec un répertoire daté pour identifier l'exportation, vous incluez l'indicateur optionnel collection-ids , comme suit:

gcloud beta firestore export gs: // mon-projet-source-export / export-20190113_2109 --collection-ids = 'caméras', 'radios'

Omettre l'indicateur copierait TOUTES les collections.

L ' outil CLI gcloud devrait terminer l'exportation sans problème.

Maintenant, pour terminer l ' importation , nous commençons par basculer le projet gcloud vers la cible pour nos données:

Projet gcloud config set [PROJECT_ID]

Ensuite, nous pouvons tenter l'importation:

gcloud beta firestore import --collection-ids = 'caméras', 'radios' gs: // mon-projet-source-export / export-20190113_2109

L'opération peut échouer en raison de problèmes d'autorisation. Si tel est le cas, il indiquera quel compte de service doit avoir accès au seau. Pour résoudre les problèmes d'autorisation, vous pouvez simplement utiliser le Navigateur de stockage Google Cloud Console pour administrer le autorisations pour le bucket source . Le compte de service requis doit être ajouté à la liste des membres avec le rôle Storage Admin .

Une fois les permissions corrigées, l'opération peut être tentée à nouveau. Pour les opérations de longue durée, une liste des opérations et leurs statuts peuvent être récupérés à l'aide de la commande suivante:

Liste des opérations de gcloud beta firestore

Une fois l'importation terminée, il peut être judicieux de révoquer les autorisations accordées au compte de service, le cas échéant, pour éviter tout problème de sécurité indésirable.

J'espère que cela vous aidera.


5 commentaires

Merci, je vais l'essayer une fois à la maison plus tard dans la journée, puis donner la note complète, d'ici là +1


Cela a bien fonctionné, je viens de recevoir un problème d'autorisation en raison de l'absence de méthode de paiement sur le 2ème projet, je ne pourrai pas l'utiliser alors ... mais votre solution aurait fonctionné alors merci


Je reçois le problème d'autorisation dont vous avez parlé. J'ai ajouté le compte à la liste des membres et je le reçois toujours. Est-ce parce que le compte dit «utilisateur» en survol plutôt que «compte de service»?


Pour ceux qui ne savent pas quel est leur compte de service: c'est [PROJECT_ID] @ appspot.gserviceaccount.com. Donc, si vous souhaitez importer des données du projet A vers le projet B, vous devez autoriser le compte de service du projet A [PROJECT_A_ID] @ appspot.gserviceaccount.com dans le bucket du projet B


J'ai d'abord essayé de le faire dans l'application Web Google Cloud Console, mais je ne pouvais jamais obtenir le projet de destination pour voir le bucket du projet source. Cependant, faire la même chose avec gcloud CLI à la place (selon ci-dessus, sauf sans préfixe bêta) a fonctionné! Je ne comprends toujours pas pourquoi mais oui! Merci pour la présentation claire et concise!



3
votes

La réponse acceptée n'a pas fonctionné pour moi. Quelles que soient les autorisations accordées sur le bucket source, l'importation échouait toujours avec PERMISSION REFUSÉE: l'appelant n'a pas l'autorisation

La solution était de créer un autre compte de service. J'ai créé un compte de service sur le projet de destination avec les rôles Cloud Datastore Import Export Admin et Storage Admin . J'ai ensuite ajouté ce compte de service au projet source IAM avec les mêmes rôles. Après cela, le processus suivant a fonctionné pour moi:

gcloud auth activate-service-account --key-file=./mynewserviceaccount.json
gcloud beta firestore export gs://mysourceprojectbucket --project mysourceprojectid
gcloud beta firestore import gs://mysourceprojectbucket/WHATEVER_NAME_FROM_EXPORT --project mydestinationproject


0 commentaires

0
votes

Principales étapes: Assurez-vous que la facturation est activée dans les deux projets.

Pour PROJECT_1,

  1. Créer un bucket de stockage (BUCKET_1) dans Google Cloud Storage dans PROJET_1
  2. Exportez les données de Firestore vers BUCKET_1 à l'aide de Cloud Shell
  3. Obtenez le compte de service de PROJECT_2 et accordez-lui l'autorisation "Administrateur du stockage" dans BUCKET_1

PROJET_2

Importer des données depuis BUCKET_1

J'ai mis la sortie de toutes les étapes de ce article de blog


0 commentaires

0
votes

Dans mon cas, la base de données cible n'avait pas de règles d'écriture.

Passage de:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true; /* Allow writes by setting true here */
    }
  }
}

à:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

J'ai résolu mon problème


0 commentaires