Ressourcenverwaltung automatisieren

So können Sie das Erstellen von Datenbanken in Firestore automatisieren:

  1. Erstellen Sie ein neues Google Cloud-Projekt. Jedes Projekt ist auf eine Firestore-Datenbank beschränkt.
  2. Erstellen Sie eine App Engine-Anwendung. Firestore ist von App Engine abhängig. Sie müssen deshalb App Engine aktivieren, um Firestore nutzen zu können.
  3. Erstellen Sie eine Firestore-Datenbank.

Auf dieser Seite wird beschrieben, wie Sie diesen Vorgang mit REST APIs, dem gcloud-Befehlszeilentool und Terraform abschließen.

Datenbank mit REST APIs erstellen

Sie können eine Firestore-Datenbank mithilfe der Resource Manager API und der App Engine Admin API bereitstellen.

Authentifizierung und Autorisierung

Für den Zugriff auf die Resource Manager API und die App Engine Admin API müssen Sie Ihre Anfrage mit einem Zugriffstoken authentifizieren. Ihr Zugriffstoken erfordert folgenden OAuth 2.0-Bereich:

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

Informationen zum Einrichten der Authentifizierung für eine Anwendung finden Sie unter Authentifizierung für Server-zu-Server-Produktionsanwendungen einrichten.

Für das Entwickeln und Testen Ihrer Anwendung können Sie mit folgendem Befehl ein Zugriffstoken abrufen:

gcloud auth application-default print-access-token.

Autorisierung

Das authentifizierte Nutzerkonto oder Dienstkonto muss die Berechtigung resourcemanager.projects.create haben, um ein neues Projekt erstellen zu können. Die IAM-Rolle "Projektersteller" gewährt beispielsweise diese Berechtigung.

Informationen zum Zuweisen dieser Rolle finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.

Neues Projekt und neue Datenbank erstellen

  1. Starten Sie das Erstellen eines Projekts mit der Methode projects.create. Definieren Sie im Anfragetext eine Ressource vom Typ Project. Beispiel:

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

    Ersetzen Sie Folgendes:

    Bei Erfolg gibt die Anfrage einen Vorgangsnamen zurück:

    200:
    
    {
      "name": "operations/cp.6311184959990822268"
    }
        
  2. Verwenden Sie den Vorgangsnamen aus dem vorherigen Schritt und die Resource Manager-Methode operations.get, um die Projekterstellung zu bestätigen:

    HTTP

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

    Wenn das Projekt erfolgreich erstellt wurde, enthält die Antwort das folgende Feld:

    "done": true,
          
  3. Zum Erstellen einer App Engine-Anwendung und einer Firestore-Datenbank verwenden Sie die Methode apps.create der App Engine Admin API. Definieren Sie im Anfragetext eine Ressource vom Typ Anwendung und fügen Sie das Feld databaseType ein. Beispiel:

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

    Ersetzen Sie Folgendes:

    • project-id ist die ID des von Ihnen erstellten Projekts.
    • location ist der Standort Ihrer App Engine-Anwendung und Ihrer Firestore-Datenbank. Einen einmal festgelegten Standort können Sie nicht mehr ändern. Eine vollständige Liste der unterstützten Standorte finden Sie unter App Engine-Standorte.

      App Engine und Firestore unterstützen dieselben Standorte. Die folgenden App Engine-Regionen sind jedoch Mehrfachregionen von Firestore zugeordnet:

      • us-central (Iowa) erstellt eine Firestore-Datenbank in der Mehrfachregion nam5 (USA).
      • europe-west (Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregion eur3 (Europa).

    Die Anfrage gibt einen Vorgangsnamen zurück:

    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. Verwenden Sie den Vorgangsnamen aus dem vorherigen Schritt und apps.operations.get, um das Erstellen der Datenbank zu bestätigen:

    HTTP

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

    Wenn der Vorgang erfolgreich ist, enthält die Antwort das folgende Feld:

    "done": true,
          

Rechnungskonto und Firebase-Dienste hinzufügen

Um ein Rechnungskonto programmatisch mit Ihrem Projekt zu verknüpfen, verwenden Sie die Methode projects.updateBillingInfo, .

Informationen zum programmatischen Aktivieren von Firebase-Diensten für Ihr Projekt finden Sie unter Firebase-Projekt mit der Management REST API einrichten und verwalten.

Datenbank mit gcloud erstellen

Mit dem gcloud-Befehlszeilentool können Sie das Erstellen einer Datenbank in einem Bash- oder PowerShell-Skript automatisieren. Führen Sie dazu in Ihrem Skript die folgenden Schritte aus:

  1. Erstellen Sie mit gcloud projects create ein neues Projekt:

    gcloud projects create project-id
  2. Aktivieren Sie App Engine mit gcloud app create:

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

    Dabei ist region der Standort Ihrer App Engine-Anwendung und Ihrer Firestore-Datenbank. Einen einmal festgelegten Standort können Sie nicht mehr ändern. Eine vollständige Liste der unterstützten Standorte finden Sie unter App Engine-Standorte.

    App Engine und Firestore unterstützen die gleichen Standorte. Die folgenden App Engine-Regionen sind aber Mehrfachregionen von Firestore zugeordnet:

    • us-central (Iowa) erstellt eine Firestore-Datenbank in der Mehrfachregion nam5 (USA).
    • europe-west (Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregion eur3 (Europa).
  3. Aktivieren Sie die App Engine Admin API mit gcloud services enable:

    gcloud services enable appengine.googleapis.com --project=project-id
  4. Erstellen Sie mit gcloud alpha firestore databases create oder gcloud alpha datastore databases create eine Firestore-Datenbank:

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

    So erstellen Sie eine Firestore-Datenbank im Datastore-Modus:

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

    Für region müssen Sie den Wert angeben, mit dem Sie App Engine aktiviert haben.

Datenbank mit Terraform erstellen

Zum Bereitstellen einer Firestore-Datenbank mit Terraform verwenden Sie die Ressource google_firestore_database.

Mit der folgenden Terraform-Konfigurationsdatei wird beispielsweise ein neues Projekt erstellt und eine Firestore-Datenbank bereitgestellt:

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

Ersetzen Sie Folgendes:

  • credentials-file ist der Pfad zu Ihrer Dienstkonto-Schlüsseldatei.
  • project-id ist die Projekt-ID. Projekt-IDs müssen eindeutig sein.
  • location ist der Speicherort beider Firestore-Datenbank. Einen einmal festgelegten Standort können Sie nicht mehr ändern. Eine vollständige Liste der unterstützten Standorte finden Sie unter Firestore-Standorte.

Wenn Sie App Engine verwenden möchten, verwenden Sie stattdessen die Ressource google_app_engine_application. Legen Sie database_type auf CLOUD_FIRESTORE oder CLOUD_DATASTORE_COMPATIBILITY fest.

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) erstellt eine Firestore-Datenbank in der Mehrfachregion nam5 (USA).
  • europe-west (Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregion eur3 (Europa).

Darüber hinaus ist Firestore in einigen Regionen verfügbar, in denen App Engine nicht verfügbar ist.

Indexe in der Datenbank erstellen

Die Firestore-Datenbank kann einen Einzelfeldindex oder einen zusammengesetzten Index enthalten. Sie können die Terraform-Konfigurationsdatei bearbeiten, um einen Index für Ihre Datenbank zu erstellen.

Einzelfeldindex

Mit der folgenden Terraform-Konfigurationsdatei als Beispiel wird ein Einzelfeldindex für das Feld name in der Sammlung chatrooms erstellt:

firestore.tf

resource "random_id" "variable"{
  byte_length = 8
}

resource "google_firestore_field" "single-index" {
  project = "project-id"
  database = "(default)"
  collection = "chatrooms_${random_id.variable.hex}"
  field = "name"

  index_config {
    indexes {
        order = "ASCENDING"
        query_scope = "COLLECTION_GROUP"
    }
    indexes {
        array_config = "CONTAINS"
    }
  }

  ttl_config {}
}
  • Ersetzen Sie project-id durch Ihre Projekt-ID. Projekt-IDs müssen eindeutig sein.

Zusammengesetzter Index

Mit der folgenden Terraform-Konfigurationsdatei wird ein zusammengesetzter Index für eine Kombination aus dem Feld name und dem Feld description in der Sammlung chatrooms erstellt:

firestore.tf

resource "google_firestore_index" "composite-index" {
  project = "project-id"

  collection = "chatrooms"

  fields {
    field_path = "name"
    order      = "ASCENDING"
  }

  fields {
    field_path = "description"
    order      = "DESCENDING"
  }

}
  • Ersetzen Sie project-id durch Ihre Projekt-ID. Projekt-IDs müssen eindeutig sein.