1. Übersicht
In diesem Lab lernen Sie, wie Sie serverlose Datenbanken(Spanner und Firestore) in Anwendungen(Go und Node.js) einbinden, die in Cloud Run ausgeführt werden. Die Anwendung „Cymbal Eats“ umfasst mehrere Dienste, die in Cloud Run ausgeführt werden. In den folgenden Schritten konfigurieren Sie Dienste für die Verwendung der relationalen Datenbank Cloud Spanner und der NoSQL-Dokumentdatenbank Cloud Firestore. Durch die Verwendung serverloser Produkte für die Datenschicht und die Anwendungs-Laufzeit können Sie die gesamte Infrastrukturverwaltung auslagern und sich auf die Entwicklung Ihrer Anwendung konzentrieren, anstatt sich um den Overhead zu kümmern.
2. Lerninhalte
In diesem Lab lernen Sie Folgendes:
- Cloud Spanner einbinden
- Verwaltete Spanner-Dienste aktivieren
- In Code einbinden
- Code bereitstellen, der eine Verbindung zu Spanner herstellt
- Firestore einbinden
- Verwaltete Firestore-Dienste aktivieren
- In Code einbinden
- Code bereitstellen, der eine Verbindung zu Firestore herstellt
3. Einrichtung und Anforderungen
Umgebung zum selbstbestimmten Lernen einrichten
- Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.



- Der Projektname ist der Anzeigename für die Teilnehmer dieses Projekts. Es handelt sich um einen String, der nicht von Google APIs verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich (kann nach dem Festlegen nicht mehr geändert werden). In der Cloud Console wird automatisch ein eindeutiger String generiert. Normalerweise ist es nicht wichtig, wie dieser String aussieht. In den meisten Codelabs müssen Sie auf Ihre Projekt-ID verweisen (in der Regel als
PROJECT_IDangegeben). Wenn Ihnen die generierte ID nicht gefällt, können Sie eine andere zufällige ID generieren. Alternativ können Sie es mit einem eigenen Namen versuchen und sehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts bestehen. - Zur Information: Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu diesen drei Werten
- Als Nächstes müssen Sie die Abrechnung in der Cloud Console aktivieren, um Cloud-Ressourcen/-APIs zu verwenden. Die Durchführung dieses Codelabs kostet wenig oder gar nichts. Wenn Sie Ressourcen herunterfahren möchten, um Kosten zu vermeiden, die über diese Anleitung hinausgehen, können Sie die erstellten Ressourcen oder das Projekt löschen. Neue Google Cloud-Nutzer können am kostenlosen Testzeitraum mit einem Guthaben von 300$ teilnehmen.
Umgebung einrichten
- Variable für die Projekt-ID erstellen
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export SPANNER_INSTANCE=inventory-instance
export SPANNER_DB=inventory-db
export REGION=us-east1
export SPANNER_CONNECTION_STRING=projects/$PROJECT_ID/instances/$SPANNER_INSTANCE/databases/$SPANNER_DB
- Spanner-, Cloud Run-, Cloud Build- und Artifact Registry-APIs aktivieren
gcloud services enable \
compute.googleapis.com \
spanner.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
firestore.googleapis.com \
appengine.googleapis.com \
artifactregistry.googleapis.com
- Repository klonen
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Wechseln Sie zum Verzeichnis:
cd cymbal-eats/inventory-service/spanner
4. Spanner-Instanz erstellen und konfigurieren
Spanner ist die relationale Backend-Datenbank für Inventardienste. In den folgenden Schritten erstellen Sie eine Spanner-Instanz, eine Datenbank und ein Schema.
Instanz erstellen
- Cloud Spanner-Instanz erstellen
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Beispielausgabe
Creating instance...done.
- Prüfen, ob die Spanner-Instanz richtig konfiguriert ist
gcloud spanner instances list
Beispielausgabe
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Datenbank und Schema erstellen
Erstellen Sie eine neue Datenbank und verwenden Sie die Datendefinitionssprache (DDL) von Google Standard-SQL, um das Datenbankschema zu erstellen.
- DDL-Datei erstellen
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Spanner-Datenbank erstellen
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Beispielausgabe
Creating database...done.
Datenbankstatus und ‑schema prüfen
- Status der Datenbank ansehen
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Beispielausgabe
createTime: '2022-04-22T15:11:33.559300Z' databaseDialect: GOOGLE_STANDARD_SQL earliestVersionTime: '2022-04-22T15:11:33.559300Z' encryptionInfo: - encryptionType: GOOGLE_DEFAULT_ENCRYPTION name: projects/cymbal-eats-7-348013/instances/menu-inventory/databases/menu-inventory state: READY versionRetentionPeriod: 1h
- Schema der Datenbank ansehen
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Beispielausgabe
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Cloud Spanner einbinden
In diesem Abschnitt erfahren Sie, wie Sie Spanner in Ihre Anwendung einbinden. Außerdem bietet SQL Spanner Clientbibliotheken, JDBC-Treiber, R2DBC-Treiber, REST APIs und RPC APIs, mit denen Sie Spanner in jede Anwendung einbinden können.
Im nächsten Abschnitt verwenden Sie die Go-Clientbibliothek, um Daten in Spanner zu installieren, zu authentifizieren und zu ändern.
Clientbibliothek installieren
Die Cloud Spanner-Clientbibliothek erleichtert die Integration in Cloud Spanner, da sie automatisch Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) verwendet, um die Anmeldedaten Ihres Dienstkontos zu finden.
Authentifizierung einrichten
Die Google Cloud CLI und Google Cloud-Clientbibliotheken erkennen automatisch, wenn sie auf Google Cloud ausgeführt werden, und verwenden das Laufzeitdienstkonto der aktuellen Cloud Run-Version. Diese Strategie wird „Standardanmeldedaten für Anwendungen“ genannt und ermöglicht die Portabilität von Code in mehreren Umgebungen.
Es ist jedoch besser, eine dedizierte Identität zu erstellen, indem Sie ihr ein nutzerverwaltetes Dienstkonto anstelle des Standarddienstkontos zuweisen.
- Dem Dienstkonto die Rolle „Spanner-Datenbankadministrator“ zuweisen
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Beispielausgabe
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
Clientbibliotheken verwenden
Die Spanner-Clientbibliotheken abstrahieren die Komplexität der Integration in Spanner und sind in vielen gängigen Programmiersprachen verfügbar.
Spanner-Client erstellen
Der Spanner-Client ist ein Client zum Lesen und Schreiben von Daten in eine Cloud Spanner-Datenbank. Ein Client kann gleichzeitig verwendet werden, mit Ausnahme seiner Close-Methode.
Im folgenden Snippet wird ein Spanner-Client erstellt.
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Sie können sich einen Client wie eine Datenbankverbindung vorstellen: Alle Interaktionen mit Cloud Spanner müssen einen Client durchlaufen. In der Regel erstellen Sie einen Client beim Start Ihrer Anwendung. Anschließend verwenden Sie diesen Client zum Lesen, Schreiben und Ausführen von Transaktionen. Jeder Client verwendet Ressourcen in Cloud Spanner.
Daten ändern
Es gibt mehrere Möglichkeiten, Daten in eine Spanner-Datenbank einzufügen, zu aktualisieren und zu löschen. Unten sind die verfügbaren Methoden aufgeführt.
In diesem Lab verwenden Sie Mutationen, um Daten in Spanner zu ändern.
Mutationen in Cloud Spanner
Eine Mutation ist ein Container für Mutationsvorgänge. Eine Mutation stellt eine Folge von Einfügungs-, Aktualisierungs- und Löschvorgängen dar, die Cloud Spanner in kleinstmöglichen Schritten auf verschiedene Zeilen und Tabellen in einer Cloud Spanner-Datenbank anwendet.
main.go
m := []*spanner.Mutation{}
m = append(m, spanner.Insert(
"inventoryHistory",
inventoryHistoryColumns,
[]interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
Mit dem Code-Snippet wird eine neue Zeile in die Tabelle „Inventarverlauf“ eingefügt.
Bereitstellen und testen
Nachdem Spanner konfiguriert ist und Sie die wichtigsten Codeelemente überprüft haben, stellen Sie die Anwendung in Cloud Run bereit.
Anwendung in Cloud Run bereitstellen
Cloud Run kann Ihren Code mit einem einzigen Befehl automatisch erstellen, per Push übertragen und bereitstellen. Im folgenden Befehl rufen Sie den Befehl deploy für den Dienst run auf und übergeben Variablen, die von der ausgeführten Anwendung verwendet werden, z. B. SPANNER_CONNECTION_STRING, die Sie zuvor erstellt haben.
- Klicken Sie auf „Terminal öffnen“.
- Inventardienst in Cloud Run bereitstellen
gcloud run deploy inventory-service \
--source . \
--region $REGION \
--update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
--allow-unauthenticated \
--project=$PROJECT_ID \
--quiet
Beispielausgabe
Service [inventory-service] revision [inventory-service-00001-sug] has been deployed and is serving 100 percent of traffic. Service URL: https://inventory-service-ilwytgcbca-uk.a.run.app
- Dienst-URL speichern
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Cloud Run-Anwendung testen
Element einfügen
- Geben Sie in Cloud Shell den folgenden Befehl ein.
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Beispielausgabe
HTTP/2 200 access-control-allow-origin: * content-type: application/json x-cloud-trace-context: 10c32f0863d26521497dc26e86419f13;o=1 date: Fri, 22 Apr 2022 21:41:38 GMT server: Google Frontend content-length: 2 OK
Element abfragen
- Inventory Service abfragen
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Beispielantwort
HTTP/2 200
access-control-allow-origin: *
content-type: text/plain; charset=utf-8
x-cloud-trace-context: b94f921e4c2ae90210472c88eb05ace8;o=1
date: Fri, 22 Apr 2022 21:45:50 GMT
server: Google Frontend
content-length: 166
[{"ItemID":1,"Inventory":5}]
6. Cloud Spanner-Konzepte
Cloud Spanner verwendet deklarative SQL-Anweisungen, um Datenbankabfragen durchzuführen. SQL-Anweisungen geben an, was der Nutzer möchte, ohne zu beschreiben, wie die Ergebnisse abgerufen werden.
- Geben Sie im Terminal diesen Befehl ein, um die Tabelle nach dem zuvor erstellten Datensatz abzufragen.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Beispielausgabe
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Abfrageausführungspläne
Ein Abfrageausführungsplan ist eine Reihe von Schritten, die Spanner verwendet, um Ergebnisse zu erhalten. Es kann mehrere Möglichkeiten geben, die Ergebnisse einer bestimmten SQL-Anweisung abzurufen. Abfrageausführungspläne sind in der Konsole und in den Clientbibliotheken verfügbar. So sehen Sie, wie Spanner SQL-Abfragen verarbeitet:
- Öffnen Sie in der Console die Seite „Cloud Spanner-Instanzen“.
- Cloud Spanner-Instanzen aufrufen
- Klicken Sie auf den Namen der Cloud Spanner-Instanz. Wählen Sie im Bereich „Datenbanken“ die Datenbank aus, die Sie abfragen möchten.
- Klicken Sie auf „Abfrage“.
- Geben Sie die folgende Abfrage in den Abfrageeditor ein:
SELECT * FROM InventoryHistory WHERE ItemID=1
- Klicken Sie auf „AUSFÜHREN“.
- Klicken Sie auf „ERLÄUTERUNG“.
In der Cloud Console wird ein visueller Ausführungsplan für die Abfrage angezeigt.

Abfrageoptimierung
Das Cloud Spanner-Abfrageoptimierungstool vergleicht alternative Ausführungspläne und wählt den effizientesten aus. Im Laufe der Zeit wird sich das Abfrageoptimierungstool weiterentwickeln, wodurch die Auswahlmöglichkeiten im Abfrageausführungsplan erweitert werden und die Genauigkeit der Schätzungen, auf denen diese Entscheidungen basieren, verbessert wird. Dies führt zu effizienteren Abfrageausführungsplänen.
Cloud Spanner führt Optimierungsaktualisierungen als neue Versionen des Abfrageoptimierungstools aus. Standardmäßig verwendet jede Datenbank spätestens 30 Tage nach Veröffentlichung dieser Version die neueste Version des Optimierungstools.
Wenn Sie die Version aufrufen möchten, die beim Ausführen einer Abfrage in gcloud spanner verwendet wird, setzen Sie das Flag „–query-mode“ auf PROFILE.
- Geben Sie den folgenden Befehl ein, um die Optimizer-Version aufzurufen:
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Beispielausgabe
TOTAL_ELAPSED_TIME: 6.18 msecs
CPU_TIME: 5.17 msecs
ROWS_RETURNED: 1
ROWS_SCANNED: 1
OPTIMIZER_VERSION: 3
RELATIONAL Distributed Union
(1 execution, 0.11 msecs total latency)
subquery_cluster_node: 1
|
+- RELATIONAL Distributed Union
| (1 execution, 0.09 msecs total latency)
| call_type: Local, subquery_cluster_node: 2
| |
| \- RELATIONAL Serialize Result
| (1 execution, 0.08 msecs total latency)
| |
| +- RELATIONAL Scan
| | (1 execution, 0.08 msecs total latency)
| | Full scan: true, scan_target: InventoryHistory, scan_type: TableScan
| | |
| | +- SCALAR Reference
| | | ItemRowID
| | |
| | +- SCALAR Reference
| | | ItemID
| | |
| | +- SCALAR Reference
| | | InventoryChange
| | |
| | \- SCALAR Reference
| | Timestamp
| |
| +- SCALAR Reference
| | $ItemRowID
| |
| +- SCALAR Reference
| | $ItemID
| |
| +- SCALAR Reference
| | $InventoryChange
| |
| \- SCALAR Reference
| $Timestamp
|
\- SCALAR Constant
true
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Version des Optimierungstools aktualisieren
Die neueste Version zum Zeitpunkt dieses Labs ist Version 4. Als Nächstes aktualisieren Sie die Spanner-Tabelle, damit Version 4 des Abfrageoptimierungstools verwendet wird.
- Optimizer aktualisieren
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Beispielausgabe
Schema updating...done.
- Geben Sie den folgenden Befehl ein, um das Update der Optimizer-Version aufzurufen.
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Beispielausgabe
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Version der Abfrageoptimierung im Metrics Explorer visualisieren
Mit dem Metrics Explorer in der Cloud Console können Sie die Anzahl der Abfragen für Ihre Datenbankinstanz visualisieren. Sie sehen, welche Version des Optimierungstools in den einzelnen Datenbanken verwendet wird.
- Rufen Sie in der Cloud Console „Monitoring“ auf und wählen Sie im linken Menü Metrics Explorer aus.
- Wählen Sie im Feld Ressourcentyp die Option „Cloud Spanner-Instanz“ aus.
- Wählen Sie im Feld Messwert die Option „Anzahl der Anfragen“ aus und klicken Sie auf „Übernehmen“.
- Wählen Sie im Feld Gruppieren nach die Optionen „Datenbank“, „optimizer_version“ und „Status“ aus.

7. Firestore-Datenbank erstellen und konfigurieren
Firestore ist eine NoSQL-Dokumentdatenbank, die auf Autoscaling, hohe Leistung und einfache Anwendungsentwicklung ausgelegt ist. Firestore hat zwar hinsichtlich der Benutzeroberfläche viele Features mit traditionellen Datenbanken gemeinsam, beschreibt jedoch als NoSQL-Datenbank die Beziehungen zwischen Datenobjekten auf andere Weise.
In der folgenden Aufgabe wird beschrieben, wie Sie eine Cloud Run-Anwendung für einen Bestellservice erstellen, die von Firestore unterstützt wird. Der Bestellservice ruft den im vorherigen Abschnitt erstellten Inventarservice auf, um die Spanner-Datenbank abzufragen, bevor die Bestellung gestartet wird. Dieser Dienst sorgt dafür, dass genügend Inventar vorhanden ist und die Bestellung ausgeführt werden kann.

8. Firestore-Konzepte
Datenmodell
Eine Firestore-Datenbank besteht aus Sammlungen und Dokumenten.

Dokumente
Jedes Dokument enthält eine Reihe von Schlüssel/Wert-Paaren. Firestore ist für das Speichern großer Sammlungen kleiner Dokumente optimiert.

Sammlungen
Alle Dokumente müssen in Sammlungen gespeichert werden. Dokumente können Untersammlungen und verschachtelte Objekte enthalten, die wiederum aus einfachen Feldern wie Strings oder aus komplexen Objekten wie Listen bestehen können.

Firestore-Datenbank erstellen
- Firestore-Datenbank erstellen
gcloud firestore databases create --location=$REGION
Beispielausgabe
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Firestore in Ihre Anwendung einbinden
In diesem Abschnitt aktualisieren Sie das Dienstkonto, fügen Dienstkonten für den Firestore-Zugriff hinzu, prüfen und stellen die Firestore-Sicherheitsregeln bereit und sehen sich an, wie Daten in Firestore geändert werden.
Authentifizierung einrichten
- Dienstkonto die Rolle „Datastore-Nutzer“ zuweisen
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Beispielausgabe
Updated IAM policy for project [cymbal-eats-6422-3462].
Firestore-Sicherheitsregeln
Sicherheitsregeln bieten Zugriffssteuerung und Datenvalidierung in einem leistungsstarken, aber unkomplizierten Format.
- Wechseln Sie zum Verzeichnis „order-service/starter-code“.
cd ~/cymbal-eats/order-service
- Öffnen Sie die Datei „firestore.rules“ im Cloud-Editor.
cat firestore.rules
firestore.rules
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents { ⇐ All database
match /{document=**} { ⇐ All documents
allow read: if true; ⇐ Allow reads
}
match /{document=**} {
allow write: if false; ⇐ Deny writes
}
}
}
Warnung:Es empfiehlt sich, den Zugriff auf den Firestore-Speicher einzuschränken. Für dieses Lab sind alle Lesevorgänge zulässig. Dies ist keine empfohlene Produktionskonfiguration.
Verwaltete Firestore-Dienste aktivieren
- Klicken Sie auf „Terminal öffnen“.
- Erstellen Sie die Datei „.firebaserc“ mit der aktuellen Projekt-ID. Die Einstellungen für Bereitstellungsziele werden in der Datei „.firebaserc“ in Ihrem Projektverzeichnis gespeichert.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Firebase-Binärdatei herunterladen
curl -sL https://firebase.tools | upgrade=true bash
Beispielausgabe
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Firestore-Regeln bereitstellen
firebase deploy
Beispielausgabe
=== Deploying to 'cymbal-eats-6422-3462'... i deploying firestore i cloud.firestore: checking firestore.rules for compilation errors... ✔ cloud.firestore: rules file firestore.rules compiled successfully i firestore: uploading rules firestore.rules... ✔ firestore: released rules firestore.rules to cloud.firestore ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/cymbal-eats-6422-3462/overview
Daten ändern
Sammlungen und Dokumente werden implizit in Firestore erstellt. Sie müssen einem Dokument innerhalb einer Sammlung einfach Daten zuordnen. Wenn die Sammlung oder das Dokument nicht vorhanden ist, wird sie/es von Firestore erstellt.
Daten zu Firestore hinzufügen
Es gibt mehrere Möglichkeiten, Daten in Cloud Firestore zu schreiben:
- Sie legen die Daten eines Dokuments innerhalb einer Sammlung durch explizite Angabe einer Dokument-ID fest.
- Sie fügen einer Sammlung ein neues Dokument hinzu. In diesem Fall generiert Cloud Firestore die Dokument-ID automatisch.
- Sie erstellen ein leeres Dokument mit einer automatisch generierten ID und weisen ihm später Daten zu.
Im nächsten Abschnitt wird beschrieben, wie Sie mit der Methode „set“ ein Dokument erstellen.
Dokument festlegen
Verwenden Sie die Methode set(), um ein Dokument zu erstellen. Bei der set()-Methode müssen Sie eine ID für das zu erstellende Dokument angeben.
Sehen Sie sich das Code-Snippet unten an.
index.js
const orderDoc = db.doc(`orders/123`);
await orderDoc.set({
orderNumber: 123,
name: Anne,
address: 555 Bright Street,
city: Mountain View,
state: CA,
zip: 94043,
orderItems: [id: 1],
status: 'New'
});
Mit diesem Code wird ein Dokument mit der ID 123 für ein vom Nutzer erstelltes Dokument erstellt. Wenn Firestore eine ID für Sie generieren soll, verwenden Sie die Methode add() oder create().
Dokumente aktualisieren
Mit der Aktualisierungsmethode update()können Sie einige Dokumentfelder aktualisieren, ohne das gesamte Dokument zu überschreiben.
Im folgenden Snippet wird die Bestellung 123 aktualisiert.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Dokumente löschen
In Firestore können Sie Sammlungen, Dokumente oder bestimmte Felder aus einem Dokument löschen. Wenn Sie ein Dokument löschen möchten, verwenden Sie die Methode delete().
Mit dem folgenden Snippet wird die Bestellung 123 gelöscht.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Bereitstellen und testen
In diesem Abschnitt stellen Sie die Anwendung in Cloud Run bereit und testen die Methoden zum Erstellen, Aktualisieren und Löschen.
Anwendung in Cloud Run bereitstellen
- Speichern Sie die URL in der Variablen INVENTORY_SERVICE_URL, um sie in den Inventardienst einzubinden.
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Order-Dienst bereitstellen
gcloud run deploy order-service \
--source . \
--platform managed \
--region $REGION \
--allow-unauthenticated \
--project=$PROJECT_ID \
--set-env-vars=INVENTORY_SERVICE_URL=$INVENTORY_SERVICE_URL \
--quiet
Beispielausgabe
[...] Done. Service [order-service] revision [order-service-00001-qot] has been deployed and is serving 100 percent of traffic. Service URL: https://order-service-3jbm3exegq-uk.a.run.app
Cloud Run-Anwendung testen
Dokument erstellen
- Speichern Sie die URL der Bestellserviceanwendung in einer Variablen für Tests.
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Bestellanfrage erstellen und neue Bestellung in der Firestore-Datenbank posten
curl --request POST $ORDER_SERVICE_URL/order \
--header 'Content-Type: application/json' \
--data-raw '{
"name": "Jane Doe",
"email": "Jane.Doe-cymbaleats@gmail.com",
"address": "123 Maple",
"city": "Buffalo",
"state": "NY",
"zip": "12346",
"orderItems": [
{
"id": 1
}
]
}'
Beispielausgabe
{"orderNumber":46429}
Bestellnummer für die spätere Verwendung speichern
export ORDER_NUMBER=<value_from_output>
Ergebnisse ansehen
Ergebnisse in Firestore ansehen
- Rufen Sie die Firestore-Konsole auf.
- Klicken Sie auf „Daten“.

Dokument aktualisieren
Die eingereichte Bestellung enthielt keine Mengenangabe.
- Datensatz aktualisieren und ein Schlüssel/Wert-Paar für die Menge hinzufügen
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Beispielausgabe
{"status":"success"}
Ergebnisse ansehen
Ergebnisse in Firestore ansehen
- Rufen Sie die Firestore-Konsole auf.
- Klicken Sie auf „Daten“.

Dokument löschen
- Lösche das Element 46429 aus der Firestore-Sammlung „orders“
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Ergebnisse ansehen
- Rufen Sie die Firestore-Konsole auf.
- Klicken Sie auf „Daten“.

11. Glückwunsch!
Sie haben das Lab abgeschlossen.
Nächste Schritte:
Weitere Codelabs zu Cymbal Eats:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung über Cloud Storage auslösen
- Verbindung von Cloud Run zu privatem Cloud SQL herstellen
- Serverlose Anwendung mit Identity-Aware Proxy (IAP) sichern
- Cloud Run-Jobs mit Cloud Scheduler auslösen
- Sichere Bereitstellung in Cloud Run
- Cloud Run-Ingress-Traffic sichern
- Verbindung zu privaten AlloyDB-Instanzen von GKE Autopilot herstellen
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, können Sie entweder das Projekt löschen, das die Ressourcen enthält, oder das Projekt beibehalten und die einzelnen Ressourcen löschen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.