Automatisez la gestion des ressources
Vous pouvez automatiser la création de bases de données Firestore en procédant comme suit :
- Créez un projet Google Cloud. Pour chaque projet, vous ne pouvez définir qu'une base de données Firestore.
- Créez une application App Engine. Firestore dépend d'App Engine. Vous devez donc activer App Engine pour utiliser Firestore.
- Créez une base de données Firestore.
Cette page décrit comment effectuer ce processus à l'aide des API REST, de l'outil de ligne de commande gcloud et de Terraform.
Créer une base de données avec les API REST
Vous pouvez provisionner une base de données Firestore à l'aide de l'API Resource Manager et de l'API App Engine Admin.
Authentification et autorisation
Pour accéder aux API Resource Manager et App Engine Admin, vous devez authentifier votre requête avec un jeton d'accès. Votre jeton d'accès nécessite le champ d'application OAuth 2.0 suivant :
https://www.googleapis.com/auth/cloud-platform
Pour configurer l'authentification pour une application, consultez la section Configurer l'authentification pour les applications de production serveur à serveur.
Lorsque vous développez et testez votre application, vous pouvez obtenir un jeton d'accès en utilisant :
gcloud auth application-default print-access-token
.
Autorisation
Le compte utilisateur ou compte de service authentifié nécessite l'autorisation resourcemanager.projects.create
pour créer un projet.
Le rôle IAM de créateur de projet, par exemple, accorde cette autorisation.
Pour accorder ce rôle, consultez la page Accorder, modifier et révoquer l'accès à des ressources.
Créer un projet et une base de données
- Utilisez la méthode projects.create pour démarrer une opération de création de projet. Dans le corps de la requête, définissez une ressource
Project
, par exemple :HTTP
POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1 Authorization: Bearer access-token Accept: application/json Content-Type: application/json { "projectId": "project-id" }
Remplacez les éléments suivants :
access-token
est un jeton d'accès authentifié.project-id
est un ID de projet unique.
En cas de réussite, la requête renvoie un nom d'opération:
200: { "name": "operations/cp.6311184959990822268" }
-
Utilisez le nom d'opération de l'étape précédente et la méthode operations.get de Resource Manager pour confirmer la création du projet:
HTTP
GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
Lorsque la création du projet aboutit, la réponse inclut le champ suivant:
"done": true,
-
Utilisez la méthode apps.create de l'API App Engine Admin pour créer une application App Engine et une base de données Firestore. Dans le corps de la requête, définissez une ressource Application et incluez le champ
databaseType
. Exemple:HTTP
POST https://appengine.googleapis.com/v1/apps HTTP/1.1 Authorization: Bearer access_token Accept: application/json Content-Type: application/json { "databaseType": "CLOUD_FIRESTORE", "id": "project-id", "locationId": "location" }
Remplacez les éléments suivants :
- project-id correspond à l'ID du projet que vous avez créé.
- location définit l'emplacement de votre application App Engine et de votre base de données Firestore.
Une fois qu'il a été défini, vous ne pouvez plus modifier l'emplacement. Pour obtenir la liste complète des emplacements compatibles, consultez la page Emplacements App Engine.
App Engine et Firestore acceptent les mêmes emplacements, mais les régions App Engine suivantes sont mappées avec les emplacements multirégionaux de Firestore:
us-central
(Iowa) crée une base de données Firestore dans la zone multirégionalenam5
(États-Unis).europe-west
(Belgique) crée une base de données Firestore dans la zone multirégionaleeur3
(Europe).
La requête renvoie un nom d'opération:
200: { "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c", "metadata": { "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1", "method": "google.appengine.v1.Applications.CreateApplication", "insertTime": "2020-06-05T23:34:32.587Z", "user": "username", "target": "apps/project-id" } }
-
Utilisez le nom d'opération de l'étape précédente et le fichier apps.operations.get pour confirmer la création de la base de données:
HTTP
GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
Lorsque l'opération réussit, la réponse inclut le champ suivant:
"done": true,
Ajouter un compte de facturation et des services Firebase
Pour associer de manière automatisée un compte de facturation à votre projet, utilisez la méthode projects.updateBillingInfo.
Pour activer les services Firebase de manière automatisée pour votre projet, consultez la page Configurer et gérer un projet Firebase à l'aide de l'API REST de gestion.
Créer une base de données avec gcloud
Vous pouvez automatiser la création de bases de données dans un script Bash ou PowerShell à l'aide de l'outil de ligne de commande gcloud. Dans votre script, procédez comme suit :
Créez un projet avec
gcloud projects create
:gcloud projects create project-id
Activez App Engine avec
gcloud app create
:gcloud app create --region=region --project=project-id
où region est l'emplacement de votre application App Engine et de votre base de données Firestore. Une fois qu'il a été défini, vous ne pouvez plus modifier l'emplacement. Pour obtenir la liste complète des emplacements acceptés, consultez la page Emplacements App Engine.
App Engine et Firestore acceptent les mêmes emplacements, mais les régions App Engine suivantes sont mappées vers des emplacements Firestore multirégionaux :
us-central
(Iowa) crée une base de données Firestore dans la zone multirégionalenam5
(États-Unis).europe-west
(Belgique) crée une base de données Firestore dans la zone multirégionaleeur3
(Europe).
Activez l'API App Engine Admin avec
gcloud services enable
:gcloud services enable appengine.googleapis.com --project=project-id
Créez une base de données Firestore avec
gcloud alpha firestore databases create
ougcloud alpha datastore databases create
:gcloud alpha firestore databases create --project=project-id --region=region
Pour créer une base de données Firestore en mode Datastore, utilisez :
gcloud alpha datastore databases create --project=project-id --region=region
Pour region, vous devez utiliser la même valeur que celle utilisée pour activer App Engine.
Créer une base de données avec Terraform
Pour provisionner une base de données Firestore avec Terraform, utilisez la ressource google_firestore_database
.
Par exemple, le fichier de configuration Terraform suivant crée un projet et provisionne une base de données Firestore :
firestore.tf
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_project_service" "firestore" { project = google_project.my_project.project_id service = "firestore.googleapis.com" } resource "google_firestore_database" "database" { project = google_project.my_project.project_id name = "(default)" location_id = "location" type = "FIRESTORE_NATIVE" depends_on = [google_project_service.firestore] }
Remplacez les éléments suivants :
- credentials-file est le chemin d'accès au fichier de clé de votre compte de service.
- project-id est l'ID de votre projet. Les ID de projet doivent être uniques.
- location est l'emplacement de votre base de données Firestore. Une fois qu'il a été défini, vous ne pouvez plus modifier l'emplacement. Pour obtenir la liste complète des emplacements compatibles, consultez la section Emplacements Firestore.
Si vous souhaitez utiliser App Engine, utilisez plutôt la ressource google_app_engine_application
. Définissez database_type
sur CLOUD_FIRESTORE
ou CLOUD_DATASTORE_COMPATIBILITY
.
provider "google" { credentials = file("credentials-file") } resource "google_project" "my_project" { name = "My Project" project_id = "project-id" } resource "google_app_engine_application" "app" { project = google_project.my_project.project_id location_id = "location" database_type = "CLOUD_FIRESTORE" }
us-central
(Iowa) crée une base de données Firestore dans la zone multirégionalenam5
(États-Unis).europe-west
(Belgique) crée une base de données Firestore dans la zone multirégionaleeur3
(Europe).
De plus, Firestore est disponible dans certaines régions où App Engine ne l'est pas.
Créer des index dans la base de données
La base de données Firestore peut inclure un index à champ unique ou un index composite. Vous pouvez modifier le fichier de configuration Terraform afin de créer un index pour votre base de données.
Index à champ unique
L'exemple de fichier de configuration Terraform suivant crée un index à champ unique au niveau du champ name
de la collection chatrooms
:
firestore.tf
resource "random_id" "variable"{ byte_length = 8 } resource "google_firestore_field" "single-index" { project = "project-id" database = "(default)" collection = "chatrooms_${random_id.variable.hex}" field = "name" index_config { indexes { order = "ASCENDING" query_scope = "COLLECTION_GROUP" } indexes { array_config = "CONTAINS" } } ttl_config {} }
- Remplacez project-id par l'ID du projet. Les ID de projet doivent être uniques.
Index composite
L'exemple de fichier de configuration Terraform suivant crée un index composite pour une combinaison du champ name
et du champ description
dans la collection chatrooms
:
firestore.tf
resource "google_firestore_index" "composite-index" { project = "project-id" collection = "chatrooms" fields { field_path = "name" order = "ASCENDING" } fields { field_path = "description" order = "DESCENDING" } }
- Remplacez project-id par l'ID du projet. Les ID de projet doivent être uniques.