Automatizza la gestione delle risorse
Puoi automatizzare la creazione di database Firestore con il seguente processo:
- Crea un nuovo progetto Google Cloud. Ogni progetto è limitato a un database Firestore.
- Creare un'applicazione App Engine. Firestore dipende da App Engine. Devi attivare App Engine per utilizzare Firestore.
- Creare un database Firestore.
Questa pagina descrive come completare questo processo utilizzando le API REST, lo strumento a riga di comando gcloud e Terraform.
Crea un database con API REST
Puoi eseguire il provisioning di un database Firestore utilizzando l'API Resource Manager e l'API App Engine Admin.
autentica e autorizza
Per accedere alle API Resource Manager e App Engine Admin, devi autenticare la richiesta con un token di accesso. Il token di accesso richiede un ambito OAuth 2.0 di:
https://www.googleapis.com/auth/cloud-platform
Per configurare l'autenticazione per un'applicazione, vedi Configurazione dell'autenticazione per le applicazioni di produzione da server a server.
Durante lo sviluppo e il test della tua applicazione, puoi ottenere un token di accesso utilizzando:
gcloud auth application-default print-access-token
.
Autorizzazione
L'account utente o l'account di servizio autenticato richiede l'autorizzazione resourcemanager.projects.create
per creare un nuovo progetto.
Il ruolo IAM Autore progetto, ad esempio, concede questa autorizzazione.
Per concedere questo ruolo, consulta Concedere, modificare e revocare l'accesso alle risorse.
Crea un nuovo progetto e un nuovo database
- Utilizza il metodo projects.create per avviare un'operazione di creazione del progetto. Nel corpo della richiesta, definisci una risorsa
Project
, ad esempio: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" }
Sostituisci quanto segue:
access-token
è un token di accesso autenticato.project-id
è un ID progetto univoco.
Se l'operazione ha esito positivo, la richiesta restituisce il nome di un'operazione:
200: { "name": "operations/cp.6311184959990822268" }
-
Utilizza il nome dell'operazione del passaggio precedente e il metodo operations.get di Resource Manager per confermare la creazione del progetto:
HTTP
GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
Quando la creazione del progetto ha esito positivo, la risposta include il seguente campo:
"done": true,
-
Utilizza il metodo apps.create dell'API App Engine Admin per creare un'applicazione App Engine e un database Firestore. Nel corpo della richiesta, definisci una risorsa Applicazione e includi il campo
databaseType
, ad esempio: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" }
Sostituisci quanto segue:
- project-id è l'ID del progetto che hai creato.
- location imposta la località sia dell'applicazione App Engine sia del database Firestore.
Una volta impostata, non puoi modificare la località. Per un elenco completo delle località supportate, consulta le
località di App Engine.
App Engine e Firestore supportano le stesse località, ma le seguenti regioni di App Engine corrispondono a più regioni di Firestore:
us-central
(Iowa) crea un database Firestore nella località multiregionalenam5
(Stati Uniti).europe-west
(Belgio) crea un database Firestore nella località multiregionaleeur3
(Europa).
La richiesta restituisce il nome di un'operazione:
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" } }
-
Utilizza il nome dell'operazione del passaggio precedente e apps.operations.get per confermare la creazione del database:
HTTP
GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1 Authorization: Bearer access-token Accept: application/json
Quando l'operazione ha esito positivo, la risposta include il seguente campo:
"done": true,
Aggiungi un account di fatturazione e servizi Firebase
Per associare in modo programmatico un account di fatturazione al progetto, utilizza il metodo projects.updateBillingInfo.
Per attivare in modo programmatico i servizi Firebase per il tuo progetto, consulta Configurare e gestire un progetto Firebase utilizzando l'API REST di gestione.
Crea un database con gcloud
Puoi utilizzare lo strumento a riga di comando gcloud per automatizzare la creazione del database in uno script Bash o PowerShell. Nello script, completa i seguenti passaggi:
Crea un nuovo progetto con
gcloud projects create
:gcloud projects create project-id
Attiva App Engine con
gcloud app create
:gcloud app create --region=region --project=project-id
dove region è la posizione sia dell'applicazione App Engine sia del database Firestore. Una volta impostata, non puoi modificare la località. Per un elenco completo delle località supportate, vedi Località di App Engine.
App Engine e Firestore supportano le stesse località, ma le seguenti regioni di App Engine corrispondono a più regioni di Firestore:
us-central
(Iowa) crea un database Firestore nella località multiregionalenam5
(Stati Uniti).europe-west
(Belgio) crea un database Firestore nella località multiregionaleeur3
(Europa).
Abilita l'API App Engine Admin con
gcloud services enable
:gcloud services enable appengine.googleapis.com --project=project-id
Crea un database Firestore con
gcloud alpha firestore databases create
ogcloud alpha datastore databases create
:gcloud alpha firestore databases create --project=project-id --region=region
Per creare un database Firestore in modalità Datastore, utilizza:
gcloud alpha datastore databases create --project=project-id --region=region
Per region, devi utilizzare lo stesso valore utilizzato per attivare App Engine.
Crea un database con Terraform
Per eseguire il provisioning di un database Firestore con Terraform, utilizza la risorsa google_firestore_database
.
Ad esempio, il seguente file di configurazione Terraform crea un nuovo progetto ed esegue il provisioning di un database 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] }
Sostituisci quanto segue:
- credentials-file è il percorso del file della chiave dell'account di servizio.
- project-id è l'ID progetto. Gli ID progetto devono essere univoci.
- location è la località di entrambi il database Firestore. Una volta impostata, non puoi modificare la località. Per un elenco completo delle località supportate, consulta Sedi di Firestore.
Se vuoi utilizzare App Engine, usa invece la risorsa google_app_engine_application
. Imposta database_type
su CLOUD_FIRESTORE
o 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) crea un database Firestore nella località multiregionalenam5
(Stati Uniti).europe-west
(Belgio) crea un database Firestore nella località multiregionaleeur3
(Europa).
Inoltre, Firestore è disponibile in alcune regioni diverse da App Engine.
Creazione di indici nel database
Il database Firestore può includere un indice a campo singolo o un indice composto. Puoi modificare il file di configurazione Terraform per creare un indice per il tuo database.
Indice a campo singolo
Il seguente file di configurazione Terraform di esempio crea un indice a campo singolo sul campo name
nella raccolta 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 {} }
- Sostituisci project-id con l'ID progetto. Gli ID progetto devono essere univoci.
Indice composto
Il seguente esempio di file di configurazione Terraform crea un indice composto per una combinazione dei campi name
e del campo description
nella raccolta 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" } }
- Sostituisci project-id con l'ID progetto. Gli ID progetto devono essere univoci.