Requisito do App Engine

Anteriormente, todos os bancos de dados do Firestore no modo Datastore eram vinculados a um aplicativo do App Engine. Quando vinculado, seu banco de dados exige um aplicativo ativo do App Engine no mesmo projeto. Sem o aplicativo do App Engine ativo, o acesso de leitura e gravação ao banco de dados é desativado.

Os bancos de dados do modo Datastore agora são provisionados desvinculados do App Engine por padrão.

É possível desvincular seu banco de dados se ele estiver vinculado a um App Engine.

App Engine ativo

Um aplicativo ativo do App Engine significa que ele existe no mesmo projeto e que esse aplicativo não está desativado. Não é necessário que esse app seja usado. O app e o banco de dados vinculados precisam estar na mesma região.

Se você desativar seu aplicativo do App Engine, o acesso ao banco de dados do modo Datastore vinculado a esse aplicativo também será desativado.

Use a API REST para verificar o estado de desvinculação do App Engine:

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, observe o valor de appEngineIntegrationMode. Se o valor for DISABLED, isso significa que o banco de dados não está vinculado a um aplicativo do App Engine.

É possível desvincular o banco de dados do modo Datastore do aplicativo do App Engine para remover o requisito ativo do App Engine. Quando você desvincula seu banco de dados, pode desativar o App Engine sem afetar o acesso a ele.

A desvinculação é uma operação permanente.

Se você desvincular seu banco de dados, não será possível usar o recurso Desativar gravações na página Administrador do Datastore. Se as gravações estiverem desativadas no momento, desvincular seu banco de dados vai ativar as gravações.

Antes de desvincular seu banco de dados do App Engine, ative a API Firestore e atualize suas permissões do IAM.

Para desvincular seu banco de dados, acesse a página Administrador do Datastore e clique em Desvincular o banco de dados do aplicativo. Pode levar até cinco minutos para que a operação de desvinculação entre em vigor.

Acessar o Datastore Admin

Como migrar recursos do Terraform App Engine

Se você já gerenciou os bancos de dados do modo Datastore por meio do recurso Terraform google_app_engine_application, use o recurso google_firestore_database do Terraform.

Para instruções gerais sobre como gerenciar bancos de dados do modo Datastore pelo Terraform, consulte Como automatizar a criação de banco de dados.

Criar um recurso google_firestore_database

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

Consulte Locais do Datastore para uma lista de locais disponíveis. Escolha o local correspondente ao do seu banco de dados existente.

Importar o banco de dados atual do modo Datastore

Primeiro, verifique se a API Firestore está ativada.

Em seguida, importe o banco de dados atual do modo Datastore para o estado do Terraform:

terraform import google_firestore_database.database "(default)"

Depois execute:

terraform plan

Inspecione a saída para garantir que a importação seja concluída com êxito. Se a saída mostrar algum campo sendo alterado, verifique se essas alterações são intencionais. Se a saída incluir uma linha semelhante a:

google_firestore_database.database must be replaced

Em seguida, inspecione o arquivo de configuração do Terraform para ver se há algum erro, especialmente nos campos project, location ou name, e execute terraform plan de novo. Todos os campos que exigem que o Terraform substitua seu banco de dados serão marcados com # forces replacement na saída do plano.

Quando estiver tudo certo com a saída do Terraform plan, execute:

terraform apply

Como remover o recurso google_app_engine_application

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

Em seguida, execute novamente:

terraform plan

A saída será semelhante a esta:

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 tudo certo com o resultado do plano, execute

terraform apply

Atualmente, o Terraform não permite a exclusão de recursos do App Engine. Embora o Terraform mostre o recurso como sendo destruído, ele não exclui o aplicativo do App Engine. No entanto, o aplicativo do App Engine não será mais gerenciado pelo Terraform.

Requisito da API Firestore

Anteriormente, todos os bancos de dados do Firestore no modo Datastore eram vinculados a um aplicativo do App Engine. Os bancos de dados do modo Datastore agora são provisionados desvinculados do App Engine por padrão. Além disso, todos os bancos de dados, atuais e recém-criados, agora têm os seguintes requisitos:

  • Para gerenciar o banco de dados no console do Google Cloud e na CLI gcloud, a API Firestore precisa estar ativada no projeto. Isso é necessário para o Firestore no modo nativo e para os bancos de dados no modo Datastore.
  • Quando executadas no console do Google Cloud ou na CLI gcloud, as operações administrativas abaixo exigirão as seguintes permissões do IAM:

    • Criar banco de dados: datastore.databases.create
    • Ver metadados do banco de dados: datastore.databases.getMetadata
    • Editar metadados do banco de dados: datastore.databases.update

Se você não tiver ativado a API Firestore, verá um erro nas páginas do Datastore do console do Google Cloud que inclui o seguinte aviso:

A API Firestore é necessária para administrar o banco de dados.

Esse erro também inclui um botão para ativar a API Firestore. Clique no botão para ativar a API.

Verifique também suas permissões do IAM para garantir que seu acesso ao banco de dados não seja afetado.

Verifique se as contas que acessam o banco de dados por meio do console do Google Cloud têm as permissões necessárias listadas acima.

Os papéis predefinidos, como Usuário do Datastore e Leitor do Datastore, incluem as permissões necessárias. Se você criou papéis personalizados do IAM, talvez seja necessário atualizá-los para incluir as permissões acima.

Se você definiu anteriormente um papel personalizado para o Datastore, ele pode não ter a permissão datastore.databases.getMetadata. Para garantir o acesso contínuo, atualize os papéis personalizados com datastore.databases.getMetadata ou use um papel predefinido.

Ativar a API pelo Terraform

Se quiser, também é possível ativar a API Firestore via Terraform:

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

Se você tiver um recurso google_firestore_database, poderá adicionar uma dependência no recurso google_project_service para garantir que a API seja ativada antes que o Terraform tente criar o banco de dados:

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