Automatizza la gestione delle risorse

Puoi automatizzare la creazione di database Firestore con il seguente processo:

  1. Crea un nuovo progetto Google Cloud. Ogni progetto è limitato a un database Firestore.
  2. Creare un'applicazione App Engine. Firestore dipende da App Engine. Devi attivare App Engine per utilizzare Firestore.
  3. 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

  1. 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:

    Se l'operazione ha esito positivo, la richiesta restituisce il nome di un'operazione:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. 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,
          
  3. 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à multiregionale nam5 (Stati Uniti).
      • europe-west (Belgio) crea un database Firestore nella località multiregionale eur3 (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"
      }
    }
            
  4. 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:

  1. Crea un nuovo progetto con gcloud projects create:

    gcloud projects create project-id
  2. 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à multiregionale nam5 (Stati Uniti).
    • europe-west (Belgio) crea un database Firestore nella località multiregionale eur3 (Europa).
  3. Abilita l'API App Engine Admin con gcloud services enable:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. Crea un database Firestore con gcloud alpha firestore databases create o gcloud 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à multiregionale nam5 (Stati Uniti).
  • europe-west (Belgio) crea un database Firestore nella località multiregionale eur3 (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.