Requisito do App Engine

Antes, todos os bancos de dados do Firestore 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 ativo do App Engine, acesso de leitura e gravação ao banco de dados estiver desativado.

Os bancos de dados do Firestore agora são provisionados sem vínculo com o App Engine por padrão.

É possível desvincular seu banco de dados caso ele esteja vinculado ao App Engine.

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 ser usado. O app e o banco de dados vinculados precisam estar na mesma região.

Se você desativar seu aplicativo do App Engine, também desativará o acesso à banco de dados do Firestore vinculado a esse app.

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

Se você desativar um aplicativo vinculado do App Engine, também desativará o acesso de leitura e gravação ao seu banco de dados. Se isso acontecer, a página Dados do Firestore no O console do Google Cloud apresenta a opção para desvincular seu banco de dados da App Engine. Clique em Desvincular banco de dados para iniciar o processo.

Acessar dados do Firestore

Também é possível desvincular o banco de dados usando a 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 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. Pode levar até cinco minutos para que o de desvinculação tenha efeito.

Como migrar recursos do Terraform no App Engine

Se você já gerenciava bancos de dados do Firestore por meio do google_app_engine_application recurso do Terraform, é possível usar google_firestore_database recurso do Terraform.

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

Criar um recurso google_firestore_database

No arquivo 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 Locais do Firestore para conferir a lista de locais disponíveis. Escolha o local correspondente do seu banco de dados atual.

Importar o banco de dados do Firestore

Primeiro, verifique se API Firestore está ativado.

Em seguida, importe o banco de dados do Firestore 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 inclui 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, em seguida, execute terraform plan novamente. Todos os campos que são exigir que o Terraform substitua seu banco de dados será marcado com # forces replacement na saída do plano.

Quando a resposta ao plano do Terraform estiver satisfatória, 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 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 estiver tudo certo 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 o recurso como sendo destruído, isso não excluir 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 eram vinculados a um aplicativo do App Engine. Os bancos de dados do Firestore provisionados desvinculados do App Engine por padrão. Além disso, todos os bancos de dados, existentes 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 a execução é feita pelo console do Google Cloud ou pela CLI gcloud, as operações administrativas abaixo exigem as seguintes permissões do IAM:

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

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. Garantir a continuidade o acesso atualizando seus papéis personalizados com datastore.databases.getMetadata ou usando um papel predefinido.

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