Requisito App Engine

In precedenza, tutti i database Firestore 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.

Ora il provisioning dei database Firestore è scollegato da App Engine per impostazione predefinita.

Se il tuo database è collegato ad App Engine, puoi scollegarlo.

App Engine attivo

Un'app App Engine attiva indica 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 Firestore collegato all'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, controlla il valore di appEngineIntegrationMode. Se il valore è DISABLED, il database non è collegato a un'app App Engine.

Se disabiliti un'app App Engine collegata, disabiliti anche l'accesso in lettura e scrittura al database. In questo caso, nella pagina Dati Firestore nella console Google Cloud viene visualizzata l'opzione per scollegare il database dall'app App Engine. Fai clic su Scollega database per iniziare la procedura.

Vai ai dati Firestore

Puoi anche scollegare il database utilizzando 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"

Quando scolleghi il database, puoi disabilitare App Engine senza influire sull'accesso al database. Lo scollegamento è un'operazione permanente. Potrebbero essere necessari fino a cinque minuti prima che l'operazione di scollegamento abbia effetto.

Migrazione delle risorse di Terraform App Engine

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

Per istruzioni generali sulla gestione dei database Firestore tramite Terraform, consulta Automazione della creazione di database.

Crea una risorsa google_firestore_database

Nel file di configurazione Terraform, crea una nuova risorsa 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"
}

Consulta Sedi di Firestore per l'elenco delle località disponibili. Scegli la località corrispondente a quella del database esistente.

Importa il database Firestore esistente

Innanzitutto, assicurati che l'API Firestore sia abilitata.

Quindi, importa il database Firestore esistente nel tuo stato Terraform:

terraform import google_firestore_database.database "(default)"

Quindi, esegui:

terraform plan

Controlla l'output per assicurarti che l'importazione sia stata completata correttamente. Se l'output mostra campi che vengono modificati, assicurati che siano previsti. Se l'output include una riga simile alla seguente:

google_firestore_database.database must be replaced

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

Quando l'output del piano Terraform ti soddisfa, esegui:

terraform apply

Rimozione della risorsa google_app_engine_application

Se nel file di configurazione Terraform esiste già una risorsa google_app_engine_application, rimuovila da quel file.

In seguito, 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)

Quando l'output del piano ti soddisfa, esegui

terraform apply

Al momento Terraform non supporta l'eliminazione di risorse App Engine; anche se Terraform mostrerà la risorsa come eliminata, in realtà non eliminerà l'applicazione App Engine. Tuttavia, l'applicazione App Engine non sarà più gestita da Terraform.

Requisito dell'API Firestore

In precedenza, tutti i database Firestore erano collegati a un'app App Engine. Il provisioning dei database Firestore viene scollegato da App Engine per impostazione predefinita. Inoltre, tutti i database, esistenti e appena creati, hanno ora i seguenti requisiti:

  • Per gestire il tuo database dalla console Google Cloud e da gcloud CLI, l'API Firestore deve essere abilitata nel progetto. Questo passaggio è obbligatorio sia per Firestore in modalità nativa sia per i database in modalità Datastore.
  • Se eseguite dalla console Google Cloud o da gcloud CLI, le operazioni amministrative seguenti richiederanno le seguenti autorizzazioni IAM:

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

I ruoli predefiniti come Utente Datastore e Visualizzatore Datastore includono le autorizzazioni richieste. Se hai creato ruoli IAM personalizzati, potresti dover aggiornarli per includere le autorizzazioni precedenti.

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

Abilitazione 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 alla 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]
}