App Engine-Anforderung

Bisher waren alle Firestore-Datenbanken mit einer App Engine-Anwendung verknüpft. Wenn die Datenbank verknüpft ist, benötigt die Datenbank eine aktive App Engine-Anwendung im selben Projekt. Ohne die aktive App Engine-Anwendung ist der Lese- und Schreibzugriff auf die Datenbank deaktiviert.

Firestore-Datenbanken werden jetzt standardmäßig ohne Verknüpfung mit App Engine bereitgestellt.

Wenn Ihre Datenbank mit einer App Engine verknüpft ist, können Sie die Verknüpfung Ihrer Datenbank aufheben.

Aktive App Engine

Eine aktive App Engine-Anwendung bedeutet, dass eine Anwendung im selben Projekt vorhanden und diese Anwendung nicht deaktiviert ist. Die Anwendung muss nicht genutzt werden. Die verknüpfte App und Datenbank müssen sich in derselben Region befinden.

Wenn Sie Ihre App Engine-Anwendung deaktivieren, deaktivieren Sie auch den Zugriff auf die Firestore-Datenbank, die mit dieser Anwendung verknüpft ist.

Sie können den Verknüpfungsstatus von App Engine mithilfe der REST API überprüfen:

curl  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
--header "Content-type: application/json" \
"https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)"

Sehen Sie sich in der Antwort den Wert von appEngineIntegrationMode an. Wenn der Wert DISABLED ist, ist Ihre Datenbank nicht mit einer App Engine-Anwendung verknüpft.

Wenn Sie eine verknüpfte App Engine-Anwendung deaktivieren, wird damit auch der Lese- und Schreibzugriff auf Ihre Datenbank deaktiviert. In diesem Fall wird in der Google Cloud Console auf der Seite Firestore-Daten die Option zum Aufheben der Verknüpfung Ihrer Datenbank mit der App Engine-Anwendung angezeigt. Klicken Sie auf Verknüpfung mit Datenbank aufheben, um den Vorgang zu starten.

Firestore-Daten aufrufen

Sie können die Verknüpfung Ihrer Datenbank auch über die REST API aufheben:

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"

Wenn Sie die Verknüpfung Ihrer Datenbank aufheben, können Sie die App Engine deaktivieren, ohne den Zugriff auf die Datenbank zu beeinträchtigen. Das Aufheben der Verknüpfung kann nicht rückgängig gemacht werden. Es kann bis zu fünf Minuten dauern, bis die Verknüpfung wirksam wird.

Terraform-App Engine-Ressourcen migrieren

Wenn Sie zuvor Firestore-Datenbanken über die Terraform-Ressource google_app_engine_application verwaltet haben, können Sie stattdessen die Terraform-Ressource google_firestore_database verwenden.

Allgemeine Anleitungen zum Verwalten von Firestore-Datenbanken über Terraform finden Sie unter Datenbankerstellung automatisieren.

Ressource google_firestore_database erstellen

Erstellen Sie in der Terraform-Konfigurationsdatei eine neue google_firestore_database-Ressource:

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

Eine Liste der verfügbaren Standorte finden Sie unter Firestore-Standorte. Wählen Sie den Speicherort Ihrer vorhandenen Datenbank aus.

Vorhandene Firestore-Datenbank importieren

Prüfen Sie zuerst, ob die Firestore API aktiviert ist.

Importieren Sie als Nächstes die vorhandene Firestore-Datenbank in Ihren Terraform-Status:

terraform import google_firestore_database.database "(default)"

Führen Sie als Nächstes diesen Befehl aus:

terraform plan

Prüfen Sie die Ausgabe, um sicherzustellen, dass der Import erfolgreich abgeschlossen wurde. Wenn in der Ausgabe Felder angezeigt werden, die sich ändern, prüfen Sie, ob diese Änderungen beabsichtigt sind. Wenn die Ausgabe eine Zeile wie diese enthält:

google_firestore_database.database must be replaced

Prüfen Sie dann Ihre Terraform-Konfigurationsdatei auf Fehler, insbesondere in den Feldern project, location oder name. Führen Sie terraform plan dann noch einmal aus. Alle Felder, deren Datenbank durch Terraform ersetzt werden muss, werden in der Planausgabe mit # forces replacement gekennzeichnet.

Wenn Sie mit der Ausgabe des Terraform-Plans zufrieden sind, führen Sie folgenden Befehl aus:

terraform apply

Ressource „google_app_engine_application“ entfernen

Wenn Ihre Terraform-Konfigurationsdatei eine google_app_engine_application-Ressource enthält, entfernen Sie sie jetzt aus dieser Datei.

Führen Sie anschließend noch einmal folgenden Befehl aus:

terraform plan

Die Ausgabe sollte in etwa so aussehen:

Terraform will perform the following actions:

  # google_app_engine_application.app will be destroyed
  # (because google_app_engine_application.app is not in configuration)

Wenn Sie mit der Ausgabe des Plans zufrieden sind, führen Sie folgenden Befehl aus:

terraform apply

Terraform unterstützt derzeit nicht das Löschen von App Engine-Ressourcen. Obwohl Terraform die Ressource als gelöscht anzeigt, wird die App Engine-Anwendung nicht gelöscht. Die App Engine-Anwendung wird jedoch nicht mehr von Terraform verwaltet.

Firestore – Anforderungen an die Firestore API

Bisher waren alle Firestore-Datenbanken mit einer App Engine-Anwendung verknüpft. Firestore-Datenbanken werden jetzt standardmäßig unabhängig von App Engine bereitgestellt. Außerdem gelten jetzt für alle vorhandenen und neu erstellten Datenbanken die folgenden Anforderungen:

  • Zum Verwalten Ihrer Datenbank über die Google Cloud Console und die gcloud CLI muss die Firestore API im Projekt aktiviert sein. Dies ist sowohl für Firestore-Datenbanken im nativen Modus als auch für Datenbanken im Datastore-Modus erforderlich.
  • Bei Ausführung über die Google Cloud Console oder die gcloud CLI sind für die folgenden Verwaltungsvorgänge die folgenden IAM-Berechtigungen erforderlich:

    • Datenbank erstellen: datastore.databases.create
    • Datenbankmetadaten ansehen: datastore.databases.getMetadata
    • Datenbankmetadaten bearbeiten: datastore.databases.update

Vordefinierte Rollen wie Datastore-Nutzer und Datastore-Betrachter enthalten die erforderlichen Berechtigungen. Wenn Sie benutzerdefinierte IAM-Rollen erstellt haben, müssen Sie diese möglicherweise aktualisieren, damit sie die oben genannten Berechtigungen enthalten.

Wenn Sie bereits eine benutzerdefinierte Rolle für Datastore definiert haben, fehlt möglicherweise die Berechtigung datastore.databases.getMetadata. Sorgen Sie dafür, dass Sie weiterhin Zugriff haben. Aktualisieren Sie dazu Ihre benutzerdefinierten Rollen mit datastore.databases.getMetadata oder verwenden Sie eine vordefinierte Rolle.

API über Terraform aktivieren

Bei Bedarf können Sie die Firestore API auch über Terraform aktivieren:

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

Wenn Sie eine google_firestore_database-Ressource haben, können Sie eine Abhängigkeit von der google_project_service-Ressource hinzufügen, um sicherzustellen, dass die API aktiviert ist, bevor Terraform versucht, die Datenbank zu erstellen:

resource "google_firestore_database" "database" {
  // ...
  depends_on = [google_project_service.firestore]
}