Configuration requise pour App Engine

Auparavant, toutes les bases de données Firestore étaient associées à une application App Engine. Lorsqu'elle est associée, votre base de données nécessite une application App Engine active dans le même projet. Sans l'application App Engine active, l'accès en lecture et en écriture à la base de données est désactivé.

Par défaut, les bases de données Firestore sont provisionnées et dissociées d'App Engine.

Si votre base de données est liée à App Engine, vous pouvez la dissocier.

App Engine actif

Une application App Engine active signifie qu'elle existe dans le même projet et qu'elle n'est pas désactivée. L'application n'a pas besoin d'être utilisée. L'application et la base de données associées doivent exister dans la même région.

Si vous désactivez votre application App Engine, vous désactivez également l'accès à la base de données Firestore associée à cette application.

Vous pouvez vérifier l'état de la dissociation d'App Engine à l'aide de l'API REST:

curl  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)"

Dans la réponse, examinez la valeur de appEngineIntegrationMode. Si la valeur est DISABLED, votre base de données n'est pas associée à une application App Engine.

Si vous désactivez une application App Engine associée, vous désactivez également l'accès en lecture et en écriture à votre base de données. Dans ce cas, la page Données Firestore de la console Google Cloud propose une option permettant de dissocier votre base de données de l'application App Engine. Cliquez sur Dissocier la base de données pour commencer le processus.

Accéder à Firestore Data

Vous pouvez également dissocier votre base de données à l'aide de l'API REST:

curl -X PATCH \
--header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
--data '{"app_engine_integration_mode": "DISABLED"}' \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)?updateMask=appEngineIntegrationMode"

Lorsque vous dissociez votre base de données, vous pouvez désactiver App Engine sans affecter l'accès à votre base de données. La dissociation est définitive. La prise en compte de l'opération de dissociation peut prendre jusqu'à cinq minutes.

Migrer des ressources Terraform App Engine

Si vous avez déjà géré des bases de données Firestore via la ressource Terraform google_app_engine_application, vous pouvez utiliser la ressource Terraform google_firestore_database à la place.

Pour obtenir des instructions générales sur la gestion des bases de données Firestore avec Terraform, consultez la page Automatiser la création de bases de données.

Créer une ressource google_firestore_database

Dans votre fichier de configuration Terraform, créez une ressource google_firestore_database:

firestore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"

  type = "database_type" // either "FIRESTORE_NATIVE" or "DATASTORE_MODE"

  app_engine_integration_mode = "DISABLED"

  // Optional, but recommended for safety
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

Consultez la section Emplacements Firestore pour obtenir la liste des emplacements disponibles. Choisissez l'emplacement correspondant à celui de votre base de données existante.

Importer la base de données Firestore existante

Assurez-vous d'abord que l'API Firestore est activée.

Importez ensuite la base de données Firestore existante dans votre état Terraform:

terraform import google_firestore_database.database "(default)"

Exécutez la commande suivante :

terraform plan

Inspectez le résultat pour vous assurer que l'importation s'est bien déroulée. Si le résultat indique que des champs ont été modifiés, assurez-vous que ces modifications sont intentionnelles. Si le résultat comprend une ligne semblable à celle-ci:

google_firestore_database.database must be replaced

Ensuite, inspectez votre fichier de configuration Terraform pour vérifier si vous avez rencontré des erreurs, en particulier dans les champs project, location ou name, puis exécutez à nouveau terraform plan. Tous les champs qui nécessitent que Terraform remplace votre base de données seront marqués d'# forces replacement dans le résultat du plan.

Une fois que vous êtes satisfait du résultat du plan Terraform, exécutez la commande suivante:

terraform apply

Supprimer la ressource google_app_engine_application

Si une ressource google_app_engine_application existe déjà dans votre fichier de configuration Terraform, supprimez-la dès maintenant.

Ensuite, exécutez une nouvelle fois la commande suivante:

terraform plan

La sortie obtenue doit ressembler à ceci :

Terraform will perform the following actions:

  # google_app_engine_application.app will be destroyed
  # (because google_app_engine_application.app is not in configuration)

Une fois que vous êtes satisfait du résultat du plan, exécutez la commande suivante :

terraform apply

Actuellement, Terraform ne permet pas de supprimer des ressources App Engine. Bien qu'il indique que la ressource est en cours de destruction, il ne supprime pas l'application App Engine en réalité. Cependant, l'application App Engine ne sera plus gérée par Terraform.

Exigences concernant l'API Firestore

Auparavant, toutes les bases de données Firestore étaient associées à une application App Engine. Les bases de données Firestore sont désormais dissociées d'App Engine par défaut. De plus, toutes les bases de données, existantes et nouvelles, doivent désormais respecter les exigences suivantes:

  • Pour gérer votre base de données à partir de la console Google Cloud et de gcloud CLI, l'API Firestore doit être activée dans le projet. Cette opération est nécessaire pour les bases de données Firestore en mode natif et pour Firestore en mode Datastore.
  • Lorsqu'elles sont exécutées à partir de la console Google Cloud ou de la gcloud CLI, les opérations d'administration ci-dessous nécessitent les autorisations IAM suivantes:

    • Créer la base de données: datastore.databases.create
    • Afficher les métadonnées de la base de données: datastore.databases.getMetadata
    • Modifier les métadonnées de la base de données: datastore.databases.update

Les rôles prédéfinis, tels que Utilisateur Datastore et Lecteur Datastore, incluent les autorisations requises. Si vous avez créé des rôles IAM personnalisés, vous devrez peut-être les mettre à jour pour inclure les autorisations ci-dessus.

Si vous avez déjà défini un rôle personnalisé pour Datastore, celui-ci ne dispose peut-être pas de l'autorisation datastore.databases.getMetadata. Assurez un accès continu en mettant à jour vos rôles personnalisés avec datastore.databases.getMetadata ou en utilisant un rôle prédéfini.

Activer l'API via Terraform

Si vous le souhaitez, vous pouvez également activer l'API Firestore via Terraform:

resource "google_project_service" "firestore" {
  project = "project"
  service = "firestore.googleapis.com"
}

Si vous disposez d'une ressource google_firestore_database, vous pouvez ajouter une dépendance à la ressource google_project_service pour vous assurer que l'API est activée avant que Terraform ne tente de créer la base de données:

resource "google_firestore_database" "database" {
  // ...
  depends_on = [google_project_service.firestore]
}