Automatizar a criação de banco de dados

Automatize a criação de banco de dados do Cloud Firestore com este processo:

  1. Crie um novo projeto do Google Cloud. Cada projeto é limitado a um banco de dados do Cloud Firestore.
  2. Crie um aplicativo do App Engine. O Cloud Firestore depende do App Engine. É necessário ativar o App Engine para usar o Cloud Firestore.
  3. Crie um banco de dados do Cloud Firestore.

Nesta página, descrevemos como concluir esse processo usando as APIs REST, a ferramenta de linha de comando gcloud e a Terraform.

Criar um banco de dados com APIs REST

É possível provisionar um banco de dados do Cloud Firestore usando as APIs Resource Manager e App Engine Admin.

Autenticação e autorização

Para acessar as APIs Resource Manager e App Engine, autentique sua solicitação com um token de acesso. O token de acesso exige um escopo do OAuth 2.0 de:

https://www.googleapis.com/auth/cloud-platform

Para configurar a autenticação de um aplicativo, consulte Como configurar a autenticação em aplicativos de produção de servidor para servidor.

Ao desenvolver e testar o aplicativo, é possível obter um token de acesso usando:

gcloud auth application-default print-access-token.

Autorização

A conta de usuário ou de serviço autenticada precisa da permissão resourcemanager.projects.create para criar um novo projeto. O papel "Criador de projetos" do IAM, por exemplo, concede essa permissão.

Para conceder esse papel, consulte Como conceder, alterar e revogar acesso a recursos.

Criar um novo projeto e banco de dados

  1. Use o método projects.create para iniciar uma operação de criação de projeto. No corpo da solicitação, defina um recurso Project, por exemplo:

    HTTP

    POST https://cloudresourcemanager.googleapis.com/v1/projects HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
    Content-Type: application/json
    
    {
      "projectId": "project-id"
    }
          

    em que:

    Se a solicitação for bem-sucedida, você verá um nome de operação:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. Use o nome da operação da etapa anterior e o método operations.get da Resource Manager para confirmar a criação do projeto:

    HTTP

    GET https://cloudresourcemanager.googleapis.com/v1/operations/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json

    Quando a criação do projeto é bem-sucedida, a resposta inclui o seguinte campo:

    "done": true,
          
  3. Use o método apps.create da API Admin do App Engine para criar um aplicativo do App Engine e um banco de dados do Cloud Firestore. No corpo da solicitação, defina um recurso de aplicativo e inclua o campo databaseType, por exemplo:

    HTTP

    POST https://appengine.googleapis.com/v1/apps HTTP/1.1
    
    Authorization: Bearer access_token
    Accept: application/json
    Content-Type: application/json
    
    {
      "databaseType": "CLOUD_FIRESTORE",
      "id": "project-id",
      "locationId": "location"
    }
          

    em que:

    • project-id é o ID do projeto que você criou.
    • location define o local do aplicativo do App Engine e do banco de dados do Cloud Firestore. Não é possível mudar o local após defini-lo. Para ver uma lista completa de locais, consulte Locais do App Engine.

      O App Engine e o Cloud Firestore são compatíveis com os mesmos locais, mas as regiões do App Engine a seguir são mapeadas para multirregiões do Cloud Firestore:

      • us-central (Iowa) cria um banco de dados do Cloud Firestore na multirregião nam5 (Estados Unidos).
      • europe-west (Bélgica) cria um banco de dados do Cloud Firestore na multirregião eur3 (Europa).

    A solicitação retorna um nome de operação:

    200:
    
    {
      "name": "apps/project-id/operations/8612e502-4aeb-4f12-9e41-bbac0a0b819c",
      "metadata": {
        "@type": "type.googleapis.com/google.appengine.v1.OperationMetadataV1",
        "method": "google.appengine.v1.Applications.CreateApplication",
        "insertTime": "2020-06-05T23:34:32.587Z",
        "user": "username",
        "target": "apps/project-id"
      }
    }
            
  4. Use o nome da operação da etapa anterior e apps.operations.get para confirmar a criação do banco de dados:

    HTTP

    GET https://appengine.googleapis.com/v1/operation-name HTTP/1.1
    
    Authorization: Bearer access-token
    Accept: application/json
        

    Quando a operação for bem-sucedida, a resposta incluirá o campo a seguir:

    "done": true,
          

Adicionar uma conta de faturamento e serviços do Firebase

Para associar programaticamente uma conta de faturamento ao projeto, use o método projects.updateBillingInfo.

Para ativar programaticamente os serviços do Firebase no projeto, consulte Configuração e gerenciamento de um projeto do Firebase usando a API REST Management.

Criar um banco de dados com a gcloud

É possível usar a ferramenta de linha de comando gcloud para automatizar a criação do banco de dados em um script do Bash ou do PowerShell. No script, conclua estas etapas:

  1. Crie um novo projeto com gcloud projects create:

    gcloud projects create project-id
  2. Ative o App Engine com gcloud app create:

    gcloud app create --region=region --project=project-id

    em que region é o local do seu aplicativo do App Engine e do banco de dados do Cloud Firestore. Não é possível mudar o local após defini-lo. Para ver uma lista completa de locais compatíveis, consulte Locais do App Engine.

    O App Engine e o Cloud Firestore são compatíveis com os mesmos locais, mas as regiões do App Engine a seguir são mapeadas para multirregiões do Cloud Firestore:

    • us-central (Iowa) cria um banco de dados do Cloud Firestore na multirregião nam5 (Estados Unidos).
    • europe-west (Bélgica) cria um banco de dados do Cloud Firestore na multirregião eur3 (Europa).
  3. Ative a API Admin do App Engine com gcloud services enable:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. Crie um banco de dados do Cloud Firestore com gcloud alpha firestore databases create ou gcloud alpha datastore databases create:

    gcloud alpha firestore databases create --project=project-id --region=region

    Para criar um banco de dados do Cloud Firestore no modo Datastore, use:

    gcloud alpha datastore databases create --project=project-id --region=region

    Para region, use o mesmo valor utilizado para ativar o App Engine.

Criar um banco de dados com o Terraform

Use o recurso google_firestore_database para provisionar um banco de dados do Cloud Firestore com o Terraform.

Por exemplo, o seguinte arquivo de configuração do Terraform cria um novo projeto e provisiona um banco de dados do Cloud Firestore:

firestore.tf

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name       = "My Project"
  project_id = "project-id"
}

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

resource "google_firestore_database" "database" {
  project     = google_project.my_project.project_id
  name        = "(default)"
  location_id = "location"
  type        = "FIRESTORE_NATIVE"

  depends_on = [google_project_service.firestore]
}

em que:

  • credentials-file é o caminho para o arquivo de chave da sua conta de serviço;
  • project-id é o ID do projeto. Os ID do projeto precisam ser exclusivos.
  • location é o local dos seus dois bancos de dados do Cloud Firestore. Não é possível mudar o local depois de configurar. Para ter acesso a uma lista completa de locais aceitos, consulte Locais do Cloud Firestore.

Para usar o App Engine, utilize o recurso google_app_engine_application. Defina database_type como CLOUD_FIRESTORE ou CLOUD_DATASTORE_COMPATIBILITY.

provider "google" {
  credentials = file("credentials-file")
}

resource "google_project" "my_project" {
  name = "My Project"
  project_id = "project-id"
}

resource "google_app_engine_application" "app" {
  project     = google_project.my_project.project_id
  location_id = "location"
  database_type = "CLOUD_FIRESTORE"
}
  • us-central (Iowa) cria um banco de dados do Cloud Firestore na multirregião nam5 (Estados Unidos).
  • europe-west (Bélgica) cria um banco de dados do Cloud Firestore na multirregião eur3 (Europa).

Além disso, o Cloud Firestore está disponível em algumas regiões onde o App Engine não está.