Requisito do App Engine

Anteriormente, todas as bases de dados do Firestore estavam associadas a uma app do App Engine. Quando associada, a sua base de dados requer uma app do App Engine ativa no mesmo projeto. Sem a app do App Engine ativa, o acesso de leitura e escrita à base de dados é desativado.

As bases de dados do Firestore são agora aprovisionadas desassociadas do App Engine por predefinição.

Se a sua base de dados estiver associada a um App Engine, pode desassociá-la.

App Engine ativo

Uma app do App Engine ativa significa que existe uma app no mesmo projeto e que esta app não está desativada. Não requer que a app tenha qualquer utilização. A app e a base de dados associadas têm de existir na mesma região.

Se desativar a sua app do App Engine, também desativa o acesso à base de dados do Firestore associada a essa app.

Pode verificar o estado da desassociação do App Engine através da 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)"

Na resposta, examine o valor de appEngineIntegrationMode. Se o valor for DISABLED, a sua base de dados não está associada a uma app do App Engine.

Se desativar uma app do App Engine associada, também desativa o acesso de leitura e escrita à sua base de dados. Se isto acontecer, a página Dados do Firestore na Google Cloud consola apresenta a opção para desassociar a base de dados da app do App Engine. Clique em Desassociar base de dados para iniciar o processo.

Aceder aos dados do Firestore

Também pode desassociar a base de dados através da 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 desassocia a base de dados, pode desativar o App Engine sem afetar o acesso à base de dados. A desassociação é uma operação permanente. A operação de desassociação pode demorar até cinco minutos a entrar em vigor.

Migrar recursos do App Engine do Terraform

Se geriu anteriormente bases de dados do Firestore através do recurso do Terraform, pode usar o recurso do Terraform em alternativa.google_app_engine_applicationgoogle_firestore_database

Para obter instruções gerais sobre a gestão de bases de dados do Firestore através do Terraform, consulte o artigo Automatizar a criação de bases de dados.

Crie um recurso google_firestore_database

No ficheiro de configuração do Terraform, crie um novo recurso 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"
}

Consulte as localizações do Firestore para ver a lista de localizações disponíveis. Escolha a localização correspondente à da sua base de dados existente.

Importe a base de dados do Firestore existente

Primeiro, certifique-se de que a API Firestore está ativada.

Em seguida, importe a base de dados do Firestore existente para o estado do Terraform:

terraform import google_firestore_database.database "(default)"

Em seguida, execute:

terraform plan

Inspeccione o resultado para garantir que a importação foi concluída com êxito. Se o resultado mostrar alterações a campos, certifique-se de que estas alterações são intencionais. Se o resultado incluir uma linha semelhante a:

google_firestore_database.database must be replaced

Em seguida, inspecione o ficheiro de configuração do Terraform para ver se existem erros, particularmente nos campos project, location ou name e, de seguida, execute terraform plan novamente. Todos os campos que exigem que o Terraform substitua a base de dados são marcados com # forces replacement na saída do plano.

Quando estiver satisfeito com o resultado do plano do Terraform, execute o seguinte comando:

terraform apply

Remover o recurso google_app_engine_application

Se tiver um recurso google_app_engine_application no ficheiro de configuração do Terraform, remova-o desse ficheiro agora.

Depois, execute novamente:

terraform plan

Deverá ver uma saída semelhante à seguinte:

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 estiver satisfeito com o resultado do plano, execute o comando

terraform apply

Atualmente, o Terraform não suporta a eliminação de recursos do App Engine. Embora o Terraform apresente o recurso como destruído, na verdade, não elimina a aplicação do App Engine. No entanto, a aplicação do App Engine vai deixar de ser gerida pelo Terraform.

Requisito da API Firestore

Anteriormente, todas as bases de dados do Firestore estavam associadas a uma app do App Engine. As bases de dados do Firestore são agora aprovisionadas desassociadas do App Engine por predefinição. Além disso, todas as bases de dados, tanto as existentes como as recém-criadas, têm agora os seguintes requisitos:

  • Para gerir a sua base de dados a partir da Google Cloud consola e da CLI gcloud, a API Firestore tem de estar ativada no projeto. Isto é necessário para bases de dados do Firestore no modo nativo e do Firestore no modo Datastore.
  • Quando executadas a partir da Google Cloud consola ou da CLI gcloud, as operações administrativas abaixo requerem as seguintes autorizações do IAM:

    • Crie uma base de dados: datastore.databases.create
    • Ver metadados da base de dados: datastore.databases.getMetadata
    • Edite os metadados da base de dados: datastore.databases.update

As funções predefinidas, como Utilizador do Datastore e Leitor do Datastore, incluem as autorizações necessárias. Se tiver criado funções de IAM personalizadas, pode ter de as atualizar para incluir as autorizações acima.

Se definiu anteriormente uma função personalizada para o Datastore, esta pode não ter a autorização datastore.databases.getMetadata. Garanta o acesso contínuo atualizando as suas funções personalizadas com datastore.databases.getMetadata ou usando uma função predefinida.

Ativar a API através do Terraform

Se quiser, também pode ativar a API Firestore através do Terraform:

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

Se tiver um recurso google_firestore_database, pode adicionar uma dependência no recurso google_project_service para garantir que a API está ativada antes de o Terraform tentar criar a base de dados:

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