Automatiza la creación de bases de datos

Puedes automatizar la creación de bases de datos en Cloud Firestore a través del siguiente proceso:

  1. Crea un proyecto de Google Cloud nuevo. Cada proyecto tiene un límite de una base de datos de Cloud Firestore.
  2. Crea una aplicación de App Engine. Cloud Firestore depende de App Engine. Debes activar App Engine para usar Cloud Firestore.
  3. Crea una base de datos de Cloud Firestore.

En esta página se describe cómo completar este proceso con las API de REST, la herramienta de línea de comandos de gcloud y Terraform.

Crea una base de datos con las API de REST

Puedes aprovisionar una base de datos de Cloud Firestore con la API de Resource Manager y la API de Administrador de App Engine.

Autenticación y autorización

Para acceder a las API de Resource Manager y de App Engine Admin, debes autenticar la solicitud con un token de acceso. El token de acceso requiere el siguiente permiso de OAuth 2.0:

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

Si quieres configurar la autenticación de una app, consulta cómo configurar la autenticación para aplicaciones de producción de servidor a servidor.

Mientras desarrollas y pruebas tu aplicación, puedes obtener un token de acceso mediante el siguiente comando:

gcloud auth application-default print-access-token

Autorización

La cuenta de usuario o de servicio autenticada requiere el permiso resourcemanager.projects.create para crear un proyecto nuevo. Por ejemplo, la función de IAM Creador de proyectos otorga este permiso.

Para otorgar esta función, consulta Cómo otorgar, cambiar y revocar el acceso a los recursos.

Crea un proyecto y una base de datos nuevos

  1. Usa el método projects.create para iniciar una operación de creación de proyecto. En el cuerpo de la solicitud, define un recurso Project, por ejemplo:

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

    En el código anterior, se ilustra lo siguiente:

    Si se realiza correctamente, la solicitud muestra un nombre de operación:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. Usa el nombre de la operación del paso anterior y el método operations.get de Resource Manager para confirmar la creación del proyecto:

    HTTP

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

    Cuando se realiza correctamente la creación del proyecto, la respuesta incluye el siguiente campo:

    "done": true,
          
  3. Usa el método apps.create de la API de App Engine Admin para crear una aplicación de App Engine y una base de datos de Cloud Firestore. En el cuerpo de la solicitud, define un recurso de aplicación y, luego, incluye el campo databaseType, por ejemplo:

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

    En el ejemplo anterior, se ilustra lo siguiente:

    • project-id es el ID del proyecto que creaste.
    • location establece la ubicación de tu aplicación de App Engine y tu base de datos de Cloud Firestore. Una vez que establezcas la ubicación, no podrás cambiarla. Para obtener una lista completa de las ubicaciones admitidas, consulta Ubicaciones de App Engine.

      App Engine y Cloud Firestore admiten las mismas ubicaciones, pero las siguientes regiones de App Engine se mapean a multirregiones de Cloud Firestore:

      • us-central (Iowa) crea una base de datos de Cloud Firestore en la multirregión nam5 (Estados Unidos).
      • europe-west (Bélgica) crea una base de datos de Cloud Firestore en la multirregión eur3 (Europa).

    La solicitud muestra un nombre de operación:

    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. Usa el nombre de la operación del paso anterior y apps.operations.get para confirmar la creación de la base de datos:

    HTTP

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

    Cuando se realiza correctamente la operación, la respuesta incluye el siguiente campo:

    "done": true,
          

Agrega una cuenta de facturación y los servicios de Firebase

Para asociar de manera programática una cuenta de facturación con tu proyecto, usa el método projects.updateBillingInfo.

Para habilitar de manera programática los servicios de Firebase en tu proyecto, consulta cómo configurar y administrar un proyecto de Firebase con la API de REST de administración.

Crea una base de datos con gcloud

Puedes usar la herramienta de línea de comandos de gcloud para automatizar la creación de bases de datos en una secuencia de comandos de Bash o PowerShell. En la secuencia de comandos, completa los siguientes pasos:

  1. Crea un proyecto nuevo con gcloud projects create:

    gcloud projects create project-id
  2. Activa App Engine con gcloud app create:

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

    En este comando, region es la ubicación de tu aplicación de App Engine y tu base de datos de Cloud Firestore. Una vez que establezcas la ubicación, no podrás cambiarla. Para obtener una lista completa de las ubicaciones admitidas, consulta Ubicaciones de App Engine.

    App Engine y Cloud Firestore admiten las mismas ubicaciones, pero las siguientes regiones de App Engine se asignan a multirregiones de Cloud Firestore:

    • us-central (Iowa) crea una base de datos de Cloud Firestore en la multirregión nam5 (Estados Unidos).
    • europe-west (Bélgica) crea una base de datos de Cloud Firestore en la multirregión eur3 (Europa).
  3. Habilita la API de Administrador de App Engine con gcloud services enable:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. Crea una base de datos de Cloud Firestore con gcloud alpha firestore databases create o gcloud alpha datastore databases create:

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

    Para crear una base de datos de Cloud Firestore en modo Datastore, usa el siguiente código:

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

    Para region, debes utilizar el mismo valor que usaste para activar App Engine.

Crea una base de datos con Terraform

Para aprovisionar una base de datos de Cloud Firestore con Terraform, usa el recurso google_firestore_database.

Por ejemplo, con el siguiente archivo de configuración de Terraform se crea un proyecto nuevo y se aprovisiona una base de datos de 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]
}

En el código anterior, se ilustra lo siguiente:

  • credentials-file es la ruta de acceso al archivo de claves de tu cuenta de servicio.
  • project-id es el ID del proyecto. Los IDs de proyecto deben ser únicos.
  • location es la ubicación de tus bases de datos de Cloud Firestore. Una vez que establezcas la ubicación, no podrás cambiarla. Para obtener una lista completa de las ubicaciones admitidas, consulta Ubicaciones de Cloud Firestore.

Si quieres usar App Engine, usa el recurso google_app_engine_application en su lugar. Configura database_type como CLOUD_FIRESTORE o 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) crea una base de datos de Cloud Firestore en la multirregión nam5 (Estados Unidos).
  • europe-west (Bélgica) crea una base de datos de Cloud Firestore en la multirregión eur3 (Europa).

Además, Cloud Firestore está disponible en algunas regiones en las que App Engine no lo está.