Ressourcenverwaltung automatisieren
So können Sie das Erstellen von Datenbanken in Firestore automatisieren:
- Erstellen Sie ein neues Google Cloud-Projekt. Jedes Projekt ist auf eine Firestore-Datenbank beschränkt.
- 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.
- 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
- 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:
access-token
ist ein authentifiziertes Zugriffstoken.project-id
ist eine eindeutige Projekt-ID.
Bei Erfolg gibt die Anfrage einen Vorgangsnamen zurück:
200: { "name": "operations/cp.6311184959990822268" }
-
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,
-
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 Mehrfachregionnam5
(USA).europe-west
(Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregioneur3
(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" } }
-
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:
Erstellen Sie mit
gcloud projects create
ein neues Projekt:gcloud projects create project-id
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 Mehrfachregionnam5
(USA).europe-west
(Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregioneur3
(Europa).
Aktivieren Sie die App Engine Admin API mit
gcloud services enable
:gcloud services enable appengine.googleapis.com --project=project-id
Erstellen Sie mit
gcloud alpha firestore databases create
odergcloud 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 Mehrfachregionnam5
(USA).europe-west
(Belgien) erstellt eine Firestore-Datenbank in der Mehrfachregioneur3
(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.