1. Übersicht
In diesem Lab binden Sie serverlose Datenbanken(Spanner und Firestore) in Anwendungen(Go und Node.js) ein, die in Cloud Run ausgeführt werden. Die Cymbal Eats-Anwendung umfasst mehrere Dienste, die in Cloud Run ausgeführt werden. In den folgenden Schritten konfigurieren Sie Dienste für die Verwendung der relationalen Cloud Spanner-Datenbank und Cloud Firestore, einer NoSQL-Dokumentdatenbank. Wenn Sie serverlose Produkte für die Datenstufe und die Anwendungslaufzeit verwenden, können Sie die Infrastrukturverwaltung abstrahieren und sich auf das Erstellen Ihrer Anwendung konzentrieren, anstatt sich über den Aufwand Gedanken zu machen.
2. Lerninhalte
In diesem Lab lernen Sie Folgendes:
- 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 Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird. Sie können sie jederzeit aktualisieren.
- Die Projekt-ID ist für alle Google Cloud-Projekte eindeutig und unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf deine Projekt-ID verweisen, die üblicherweise als
PROJECT_ID
bezeichnet wird. Wenn Ihnen die generierte ID nicht gefällt, können Sie eine weitere zufällige ID generieren. Alternativ können Sie einen eigenen verwenden und nachsehen, ob er verfügbar ist. Sie kann nach diesem Schritt nicht mehr geändert werden und bleibt für die Dauer des Projekts erhalten. - Zur Information gibt es noch einen dritten Wert, die Projektnummer, die von manchen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
- Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab ist kostengünstig. Sie können die von Ihnen erstellten Ressourcen oder das Projekt löschen, um Ressourcen herunterzufahren, um zu vermeiden, dass über diese Anleitung hinaus Kosten anfallen. Neue Google Cloud-Nutzer haben Anspruch auf das kostenlose Testprogramm mit 300$Guthaben.
Umgebung einrichten
- Variable für 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
- Verzeichnis aufrufen
cd cymbal-eats/inventory-service/spanner
4. Spanner-Instanz erstellen und konfigurieren
Spanner ist die relationale Back-End-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 überprü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. Spanner einbinden
In diesem Abschnitt erfahren Sie, wie Sie Spanner in Ihre Anwendung einbinden. Darüber hinaus 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 Einbindung in Cloud Spanner, da die Anmeldedaten für Ihr Dienstkonto automatisch mithilfe der Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) ermittelt werden
Authentifizierung einrichten
Die Google Cloud CLI und Google Cloud-Clientbibliotheken erkennen automatisch, wenn sie in Google Cloud ausgeführt werden, und verwenden das Laufzeitdienstkonto der aktuellen Cloud Run-Version. Diese Strategie wird als Standardanmeldedaten für Anwendungen bezeichnet und ermöglicht die Portabilität von Code über mehrere Umgebungen hinweg.
Es empfiehlt sich jedoch, eine dedizierte Identität zu erstellen, indem Sie ihr ein vom Nutzer verwaltetes Dienstkonto anstelle des Standarddienstkontos zuweisen.
- Dem Dienstkonto die Rolle „Spanner-Datenbankadministrator“ gewähren
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 Einbindung 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 einer Cloud Spanner-Datenbank. Ein Client kann sicher gleichzeitig verwendet werden, mit Ausnahme seiner Close-Methode.
Mit dem Snippet unten 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 über einen Client verlaufen. In der Regel erstellen Sie einen Client, wenn Ihre Anwendung gestartet wird. 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. Nachfolgend sind die verfügbaren Methoden aufgeführt.
In diesem Lab verwenden Sie Mutationen, um Daten in Spanner zu ändern.
Mutationen in 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 mit dem Inventarverlauf eingefügt.
Bereitstellen und testen
Nachdem Sie Spanner konfiguriert und die wichtigsten Codeelemente überprüft haben, können Sie die Anwendung in Cloud Run bereitstellen.
Anwendung in Cloud Run bereitstellen
Mit Cloud Run können Sie 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 die Variablen, die von der laufenden 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
- Inventardienst 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. Spanner-Konzepte
Cloud Spanner fragt seine Datenbanken mit deklarativen SQL-Anweisungen ab. SQL-Anweisungen geben an, was die Nutzenden wollen, ohne zu beschreiben, wie die Ergebnisse erzielt werden.
- Geben Sie im Terminal diesen Befehl ein, um den zuvor erstellten Eintrag in der Tabelle 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 besteht aus einer Reihe von Schritten, die Spanner verwendet, um Ergebnisse zu erhalten. Es gibt mehrere Möglichkeiten, die Ergebnisse einer bestimmten SQL-Anweisung zu erhalten. Abfrageausführungspläne sind in der Console und den Clientbibliotheken verfügbar. So erfahren Sie, wie Spanner SQL-Abfragen verarbeitet:
- Öffnen Sie in der Console die Seite mit den Cloud Spanner-Instanzen.
- Cloud Spanner-Instanzen aufrufen
- Klicken Sie auf den Namen der Cloud Spanner-Instanz. Wählen Sie im Abschnitt „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
Die Cloud Console zeigt einen visuellen Ausführungsplan für Ihre Abfrage an.
Abfrageoptimierung
Die Cloud Spanner-Abfrageoptimierung vergleicht alternative Ausführungspläne und wählt den effizientesten aus. Im Laufe der Zeit wird sich die Abfrageoptimierung weiterentwickeln, indem sie die Auswahlmöglichkeiten im Plan für die Abfrageausführung erweitert und die Genauigkeit der Schätzungen verbessert, die auf diesen Entscheidungen beruhen. Dies führt zu effizienteren Plänen zur Abfrageausführung.
Cloud Spanner führt Aktualisierungen der Optimierung als neue Version der Abfrageoptimierung ein. Standardmäßig verwendet jede Datenbank frühestens 30 Tage nach der Veröffentlichung dieser Version die neueste Version des Optimierungstools.
Um die Version zu sehen, 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 Optimierungsversion 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:
Optimierungsversion aktualisieren
Die neueste Version zum Zeitpunkt dieses Labs ist Version 4. Als Nächstes aktualisieren Sie die Spanner-Tabelle, um Version 4 für die Abfrageoptimierung zu verwenden.
- Optimierungstool 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 die Aktualisierung der Optimierungsversion 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
Sie können den Metrics Explorer in der Cloud Console verwenden, um die Anzahl der Abfragen für Ihre Datenbankinstanz zu visualisieren. Sie können sehen, welche Optimierungsversion in jeder Datenbank 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 Resource type (Ressourcentyp) die Cloud Spanner-Instanz aus.
- Wählen Sie im Feld Messwert die Option „Anzahl der Abfragen“ und dann „Übernehmen“ aus.
- Wählen Sie im Feld Gruppieren nach die Option „database“, „optimize_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. Obwohl die Firestore-Oberfläche viele Merkmale aufweist, die herkömmliche Datenbanken mit sich bringen, beschreibt eine NoSQL-Datenbank die Beziehungen zwischen Datenobjekten auf andere Weise.
In der folgenden Aufgabe erfahren Sie, wie Sie eine Cloud Run-Anwendung für den Bestelldienst erstellen, die von Firestore unterstützt wird. Der Sortierdienst ruft den im vorherigen Abschnitt erstellten Inventardienst auf, um die Spanner-Datenbank abzufragen, bevor der Auftrag gestartet wird. Mit diesem Dienst wird sichergestellt, dass genügend Inventar vorhanden ist und der Auftrag 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
Sie müssen alle Dokumente in Sammlungen speichern. Dokumente können Untersammlungen und verschachtelte Objekte enthalten, einschließlich einfacher Felder wie Strings oder komplexe Objekte wie Listen.
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, überprüfen und stellen die Firestore-Sicherheitsregeln und prüfen, wie Daten in Firestore geändert werden.
Authentifizierung einrichten
- Datastore-Nutzerrolle dem Dienstkonto 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 ermöglichen Zugriffssteuerung und Datenvalidierung ein effektives und dennoch unkompliziertes Format.
- Verzeichnis „order-service/starter-code“ aufrufen
cd ~/cymbal-eats/order-service
- Datei „firestore.rules“ im Cloud-Editor öffnen
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 hat sich bewährt, den Zugriff auf Firestore-Speicher zu beschrä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 eine .firebaserc-Datei mit der aktuellen Projekt-ID. Die Einstellungen für Bereitstellungsziele werden in der .firebaserc-Datei in Ihrem Projektverzeichnis gespeichert.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Firebase-Binärprogramm 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:
- Legen Sie die Daten eines Dokuments innerhalb einer Sammlung fest, indem Sie explizit eine Dokument-ID angeben.
- Sie fügen einer Sammlung ein neues Dokument hinzu. In diesem Fall generiert Cloud Firestore automatisch die Dokument-ID.
- Erstellen Sie ein leeres Dokument mit einer automatisch generierten ID und weisen Sie ihm später Daten zu.
Im nächsten Abschnitt erfahren Sie, wie Sie ein Dokument mit der set-Methode erstellen.
Dokument festlegen
Verwenden Sie die Methode set()
, um ein Dokument zu erstellen. Bei der Methode set()
müssen Sie eine ID für das zu erstellende Dokument angeben.
Sehen Sie sich das folgende Code-Snippet 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 nutzergenerierten Dokument-ID 123 erstellt. Wenn Firestore in Ihrem Namen eine ID 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 aktualisiert der Code die Reihenfolge 123
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. Verwenden Sie zum Löschen eines Dokuments die Methode delete()
.
Das folgende Snippet löscht Bestellung 123.
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 zur Integration mit dem Inventardienst
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Bestelldienst 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
- URL der Bestelldienstanwendung zu Testzwecken in einer Variablen speichern
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 veröffentlichen
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 zur späteren 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 Bestellmenge.
- Datensatz aktualisieren und 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
- Element 46429 aus der Firestore-Bestellungssammlung löschen
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 von Cymbal Eats:
- Cloud Workflows mit Eventarc auslösen
- Ereignisverarbeitung aus Cloud Storage auslösen
- Verbindung zu Private CloudSQL über Cloud Run herstellen
- Sichere serverlose Anwendung mit Identity-Aware Proxy (IAP)
- Cloud Run-Jobs mit Cloud Scheduler auslösen
- Sichere Bereitstellung in Cloud Run
- Eingehenden Cloud Run-Traffic sichern
- Verbindung zu privater AlloyDB über 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.