App Engine-Anforderung

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

Datenbanken im Datastore-Modus werden jetzt standardmäßig ohne Verknüpfung mit der App Engine bereitgestellt.

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

Aktive App Engine

Eine aktive App Engine-Anwendung bedeutet, dass im selben Projekt eine App vorhanden ist und diese App nicht deaktiviert ist. Die App muss nicht verwendet 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 Datenbank im Datastore-Modus, die mit dieser Anwendung verknüpft ist.

Sie können den App Engine-Status der Verknüpfung mithilfe der REST API prü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.

Sie können die Verknüpfung Ihrer Datenbank im Datastore-Modus mit der App Engine-Anwendung aufheben, um die Anforderung einer aktiven App Engine zu entfernen. Wenn Sie die Verknüpfung Ihrer Datenbank aufheben, können Sie die App Engine deaktivieren, ohne dass sich dies auf den Zugriff auf Ihre Datenbank auswirkt.

Das Entfernen der Verknüpfung kann nicht rückgängig gemacht werden.

Wenn Sie die Verknüpfung Ihrer Datenbank aufheben, können Sie die Funktion Schreibvorgänge deaktivieren nicht verwenden. auf der Seite Datenspeicherverwaltung. Wenn Schreibvorgänge derzeit deaktiviert sind, werden sie durch das Aufheben der Verknüpfung aktiviert.

Bevor Sie die Verknüpfung Ihrer Datenbank mit der App Engine aufheben, müssen Sie die Firestore API aktivieren und Ihre IAM-Berechtigungen aktualisieren.

Wenn Sie die Verknüpfung Ihrer Datenbank aufheben möchten, rufen Sie die Seite Datenspeicherverwaltung auf und klicken Sie auf Verknüpfung der Datenbank mit der App aufheben Es kann bis zu fünf Minuten dauern, bis die Verknüpfung aufgehoben wird damit die Änderungen wirksam werden.

Zu Datastore Admin

Terraform-Ressourcen von App Engine migrieren

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

Allgemeine Anweisungen zum Verwalten von Datenbanken im Datastore-Modus über Terraform, siehe Datenbankerstellung automatisieren

google_firestore_database-Ressource erstellen

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

datastore.tf

resource "google_firestore_database" "database" {
  project     = "project"
  name        = "(default)"
  location_id = "location"
  
  type = "DATASTORE_MODE"
  
  app_engine_integration_mode = "DISABLED"

  // Optional, but recommended for safety
  delete_protection_state = "DELETE_PROTECTION_ENABLED"
}

Weitere Informationen finden Sie unter Datenspeicherstandorte finden Sie eine Liste der verfügbaren Standorte. Wählen Sie den Speicherort aus, der dem Ihrer vorhandenen Datenbank entspricht.

Vorhandene Datenbank im Datastore-Modus importieren

Stellen Sie zunächst sicher, Firestore API aktiviert ist.

Importieren Sie als Nächstes die vorhandene Datenbank im Datastore-Modus in Ihren Terraform-Zustand:

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 geändert werden, prüfen Sie, ob diese Änderungen beabsichtigt sind. Wenn die Ausgabe enthält eine Zeile wie diese:

google_firestore_database.database must be replaced

Prüfen Sie dann Ihre Terraform-Konfigurationsdatei, um festzustellen, ob Fehler aufgetreten sind, insbesondere in den Feldern project, location oder name. Führen Sie dann terraform plan noch einmal aus. Alle Felder, bei denen Terraform Ihre Datenbank ersetzen muss, sind in der Planausgabe mit # forces replacement gekennzeichnet.

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

terraform apply

Entfernen der Ressource „google_app_engine_application“

Wenn Sie bereits eine google_app_engine_application-Ressource in Ihrer Terraform-Konfigurationsdatei haben, entfernen Sie sie jetzt aus dieser Datei.

Führen Sie danach noch einmal Folgendes 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

terraform apply

Terraform unterstützt derzeit nicht das Löschen von App Engine-Ressourcen. Terraform zeigt die Ressource zwar als gelöscht an, wird aber nicht die App Engine-Anwendung zu löschen. Die App Engine-Anwendung wird jedoch nicht mehr von Terraform verwaltet.

Firestore API-Anforderung

Bisher waren alle Datenbanken in Firestore im Datastore-Modus mit einer App Engine-Anwendung verknüpft. Datenbanken im Datastore-Modus sind jetzt die standardmäßig ohne Verknüpfung mit App Engine bereitgestellt werden. Außerdem werden alle Datenbanken, sowohl für vorhandene als auch für neu erstellte Websites gelten die folgenden Anforderungen:

  • Damit Sie Ihre Datenbank über die Google Cloud Console und die gcloud CLI verwalten können, muss die Firestore API im Projekt aktiviert sein. Dies ist sowohl für Firestore-Datenbanken im nativen Modus als auch für Firestore-Datenbanken im Datastore-Modus erforderlich.
  • Wenn Sie die folgenden Verwaltungsvorgänge über die Google Cloud Console oder die gcloud CLI ausführen, sind die folgenden IAM-Berechtigungen erforderlich:

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

Wenn Sie die Firestore API nicht aktiviert haben, wird Folgendes angezeigt: Auf den Datenspeicherseiten der Google Cloud Console wird ein Fehler angezeigt, der die folgenden Hinweis:

Die Firestore API ist für die Verwaltung Ihrer Datenbank erforderlich.

Dieser Fehler enthält auch eine Schaltfläche zum Aktivieren der Firestore API. Klicken Sie auf die Schaltfläche, um die API zu aktivieren.

Sie sollten auch Ihre IAM-Berechtigungen überprüfen, um sicherzustellen, dass Sie Zugriff auf die Datenbank nicht betroffen ist.

Prüfen Sie, ob die Konten, die über die Google Cloud Console auf die Datenbank zugreifen, die oben aufgeführten erforderlichen Berechtigungen haben.

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

Wenn Sie zuvor eine benutzerdefinierte Rolle für den Datenspeicher definiert haben, fehlt ihr möglicherweise die Berechtigung datastore.databases.getMetadata. Sorgen Sie für dauerhaften Zugriff, indem Sie Ihre benutzerdefinierten Rollen mit datastore.databases.getMetadata aktualisieren oder eine vordefinierte Rolle verwenden.

API über Terraform aktivieren

Sie können 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, damit die API aktiviert ist, bevor Terraform versucht, die Datenbank zu erstellen:

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