Requisito do App Engine

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

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

Se o banco de dados estiver vinculado a um app do App Engine, você poderá desvincular.

App Engine ativo

Um aplicativo ativo do App Engine significa que existe um aplicativo no mesmo projeto e que este app não está desativado. O app não precisa ter nenhum uso. O app e o banco de dados vinculados precisam estar na mesma região.

Se você desativar seu app do App Engine, também vai desativar o acesso ao banco de dados do modo Datastore vinculado a ele.

É possível verificar o estado de desvinculação do App Engine usando a 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, observe o valor de appEngineIntegrationMode. Se o valor for DISABLED, seu banco de dados não está vinculado a um aplicativo do App Engine.

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

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

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

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

Para desvincular seu banco de dados, acesse a página Administrador do Datastore e clique em Desvincule o banco de dados do app. A desvinculação pode levar até cinco minutos que a operação tenha efeito.

Acessar o Datastore Admin

Como migrar recursos do Terraform no App Engine

Se você já gerenciou bancos de dados do modo Datastore usando o google_app_engine_application recurso do Terraform, será possível usar google_firestore_database recurso do Terraform.

Para instruções gerais sobre como gerenciar bancos de dados do modo Datastore pelo Terraform, consulte Como automatizar a criação de bancos 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 conferir a lista de locais disponíveis. Escolha o local correspondente ao do seu banco de dados atual.

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 arquivo estado:

terraform import google_firestore_database.database "(default)"

Depois execute:

terraform plan

Inspecione a saída para garantir que a importação foi concluída. Se a saída mostrar quaisquer campos alterados, verifique se essas alterações são intencionais. Se a saída incluir uma linha semelhante a:

google_firestore_database.database must be replaced

depois inspecionar o arquivo de configuração do Terraform para ver se há algum em especial no project, location ou name e execute terraform plan novamente. 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 satisfeito com a saída do plano do Terraform, execute:

terraform apply

Remoção do recurso google_app_engine_application

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

Em seguida, execute novamente:

terraform plan

A resposta 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 você estiver satisfeito com a saída do plano, execute

terraform apply

No momento, o Terraform não oferece suporte à exclusão de recursos do App Engine. Embora o Terraform mostre que o recurso está sendo destruído, ele não exclui o aplicativo do App Engine. No entanto, o App Engine esse aplicativo não será mais gerenciado pelo Terraform.

Requisito da API Firestore

Antes, 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 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 usando o console do Google Cloud e o CLI gcloud, a API Firestore precisa estar ativada no projeto. Isso é necessário para o Firestore no Modo nativo e Firestore em bancos de dados no modo Datastore.
  • Quando executadas no console do Google Cloud ou na CLI gcloud, as operações administrativas abaixo exigem as seguintes permissões de IAM:

    • Criar banco de dados: datastore.databases.create
    • Conferir 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 Datastore do console do Google Cloud que inclui o seguinte aviso:

A API Firestore é necessária para administrar seu 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.

Verificar 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.

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 acima.

Se você definiu um papel personalizado para o Datastore, ele pode não ter a permissão datastore.databases.getMetadata. Para garantir o acesso contínuo, atualize suas funções personalizadas com datastore.databases.getMetadata ou use uma função predefinida.

Ativar a API com o Terraform

Se quiser, você também pode ativar a API Firestore pelo Terraform:

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

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

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