Requisito di App Engine

In precedenza, tutti i database Firestore in modalità Datastore erano collegati a un'app App Engine. Una volta collegato, il database richiede un'app App Engine attiva nello stesso progetto. Senza l'app App Engine attiva, l'accesso in lettura e scrittura al database è disabilitato.

Per impostazione predefinita, i database in modalità Datastore ora vengono sottoposti a provisioning scollegati da App Engine.

Se il database è collegato a un'app App Engine, puoi scollegarlo.

App Engine attivo

Un'app App Engine attiva significa che esiste un'app nello stesso progetto e che questa app non è disabilitata. Non è necessario che l'app venga utilizzata. L'app e il database collegati devono esistere nella stessa regione.

Se disabiliti l'app App Engine, disabiliti anche l'accesso al database in modalità Datastore collegato a quell'app.

Puoi controllare lo stato di scollegamento di App Engine utilizzando 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)"

Nella risposta, esamina il valore di appEngineIntegrationMode. Se il valore è DISABLED, il database non è collegato a un'app App Engine.

Puoi scollegare il database in modalità Datastore dall'app App Engine per rimuovere il requisito di App Engine attivo. Quando scolleghi il database, puoi disattivare App Engine senza influire sull'accesso al database.

Lo scollegamento è un'operazione permanente.

Se scolleghi il database, non puoi utilizzare la funzionalità Disattiva scritture nella pagina Amministrazione Datastore. Se al momento le operazioni di scrittura sono disabilitate, lo scollegamento del database attiverà le operazioni di scrittura.

Prima di scollegare il database da App Engine, assicurati di abilitare l'API Firestore e aggiornare le autorizzazioni IAM.

Per scollegare il database, vai alla pagina Amministrazione Datastore e fai clic su Scollega database dall'app. L'operazione di scollegamento potrebbe richiedere fino a cinque minuti.

Vai ad Amministrazione datastore

Migrazione delle risorse Terraform App Engine

Se in precedenza hai gestito i database in modalità Datastore tramite la risorsa Terraform google_app_engine_application, puoi utilizzare la risorsa Terraform google_firestore_database.

Per istruzioni generali sulla gestione dei database in modalità Datastore tramite Terraform, vedi Automatizzazione della creazione del database.

Crea una risorsa google_firestore_database

Nel file di configurazione Terraform, crea una nuova risorsa google_firestore_database:

datastore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

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

Consulta Località Datastore per l'elenco delle località disponibili. Scegli la posizione corrispondente a quella del tuo database esistente.

Importa il database esistente in modalità Datastore

Innanzitutto, assicurati che l'API Firestore sia abilitata.

Successivamente, importa il database in modalità Datastore esistente nello stato di Terraform:

terraform import google_firestore_database.database "(default)"

Dopodiché, esegui:

terraform plan

Controlla l'output per assicurarti che l'importazione sia stata completata correttamente. Se l'output mostra la modifica di alcuni campi, assicurati che queste modifiche siano intenzionali. Se l'output include una riga simile a:

google_firestore_database.database must be replaced

quindi esamina il file di configurazione Terraform per verificare la presenza di errori, in particolare nei campi project, location o name, quindi esegui di nuovo terraform plan. Tutti i campi che richiedono a Terraform di sostituire il database saranno contrassegnati con # forces replacement nell'output del piano.

Una volta soddisfatto dell'output del piano Terraform, esegui:

terraform apply

Rimozione della risorsa google_app_engine_application

Se hai una risorsa google_app_engine_application esistente nel file di configurazione Terraform, rimuovila ora.

Dopodiché, esegui di nuovo:

terraform plan

Dovresti vedere un output simile al seguente:

Terraform will perform the following actions:

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

Una volta soddisfatto dell'output del piano, esegui

terraform apply

Al momento Terraform non supporta l'eliminazione delle risorse App Engine; sebbene Terraform mostri la risorsa come eliminata, l'applicazione App Engine non verrà effettivamente eliminata. Tuttavia, l'applicazione App Engine non sarà più gestita da Terraform.

Requisito dell'API Firestore

In precedenza, tutti i database Firestore in modalità Datastore erano collegati a un'app App Engine. Ora i database in modalità Datastore vengono provisionati scollegati da App Engine per impostazione predefinita. Inoltre, tutti i database, esistenti e appena creati, ora devono soddisfare i seguenti requisiti:

  • Per gestire il database dalla console Google Cloud e da gcloud CLI, l'API Firestore deve essere abilitata nel progetto. Questo è necessario sia per i database Firestore in modalità Native sia per quelli in modalità Datastore.
  • Se eseguite dalla console Google Cloud o dalla gcloud CLI, le operazioni amministrative riportate di seguito richiedono le seguenti autorizzazioni IAM:

    • Crea database: datastore.databases.create
    • Visualizza i metadati del database: datastore.databases.getMetadata
    • Modifica i metadati del database: datastore.databases.update

Se non hai abilitato l'API Firestore, visualizzerai un errore nelle pagine Datastore della console Google Cloud che include il seguente avviso:

È richiesta l'API Firestore per amministrare il database.

Questo errore include anche un pulsante per abilitare l'API Firestore. Fai clic sul pulsante per abilitare l'API.

Devi anche verificare le autorizzazioni IAM per assicurarti che l'accesso al database non sia interessato.

Verifica che gli account che accedono al database tramite la Google Cloud console dispongano delle autorizzazioni richieste, elencate sopra.

I ruoli predefiniti, come Utente Datastore e Visualizzatore Datastore, includono le autorizzazioni richieste. Se hai creato ruoli IAM personalizzati, potresti doverli aggiornare per includere le autorizzazioni riportate sopra.

Se in precedenza hai definito un ruolo personalizzato per Datastore, potrebbe non disporre dell'autorizzazione datastore.databases.getMetadata. Garantisci l'accesso continuo aggiornando i ruoli personalizzati con datastore.databases.getMetadata o utilizzando un ruolo predefinito.

Attivazione dell'API tramite Terraform

Se vuoi, puoi anche abilitare l'API Firestore tramite Terraform:

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

Se hai una risorsa google_firestore_database, puoi aggiungere una dipendenza dalla risorsa google_project_service per assicurarti che l'API sia abilitata prima che Terraform tenti di creare il database:

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