1. Panoramica
In questo lab integrerai database serverless(Spanner e Firestore) con applicazioni(Go e Node.js) in esecuzione in Cloud Run. L'applicazione Cymbal Eats include più servizi eseguiti su Cloud Run. Nei passaggi successivi, configurerai i servizi in modo che utilizzino il database relazionale Cloud Spanner e Cloud Firestore, un database di documenti NoSQL. L'utilizzo di prodotti serverless per il livello dati e il runtime dell'applicazione consente di astrarre tutta la gestione dell'infrastruttura, concentrandosi sulla creazione dell'applicazione anziché preoccuparsi dell'overhead.
2. Cosa imparerai a fare
In questo lab imparerai a:
- Integrare Spanner
- Abilita Spanner Managed Services
- Integrare nel codice
- Esegui il deployment del codice che si connette a Spanner
- Integra Firestore
- Attiva i servizi gestiti di Firestore
- Integrare nel codice
- Esegui il deployment del codice che si connette a Firestore
3. Configurazione e requisiti
Configurazione dell'ambiente autonomo
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, dovrai fare riferimento all'ID progetto (in genere identificato come
PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. Completare questo codelab non costa molto, se non nulla. Per arrestare le risorse ed evitare addebiti oltre a quelli previsti in questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud possono usufruire del programma prova senza costi di 300$.
Configura ambiente
- Crea una variabile ID progetto
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
- Abilita le API Spanner, Cloud Run, Cloud Build e Artifact Registry
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
- Clona il repository
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Vai alla directory
cd cymbal-eats/inventory-service/spanner
4. Crea e configura un'istanza di Spanner
Spanner è il database relazionale di backend dei servizi di inventario. Nei passaggi successivi creerai un'istanza, un database e uno schema Spanner.
Crea un'istanza
- Crea un'istanza Cloud Spanner
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Output di esempio
Creating instance...done.
- Verifica che l'istanza Spanner sia configurata correttamente
gcloud spanner instances list
Output di esempio
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Crea un database e uno schema
Crea un nuovo database e utilizza il Data Definition Language (DDL) di Google Standard SQL per creare lo schema del database.
- Creare un file DDL
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Crea il database Spanner
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Output di esempio
Creating database...done.
Verifica lo stato e lo schema del database
- Visualizzare lo stato del database
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Output di esempio
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
- Visualizzare lo schema del database
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Output di esempio
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Integrazione di Spanner
In questa sezione, imparerai a integrare Spanner nella tua applicazione. Inoltre, SQL Spanner fornisce librerie client, driver JDBC, driver R2DBC, API REST e API RPC, che ti consentono di integrare Spanner in qualsiasi applicazione.
Nella sezione successiva, utilizzerai la libreria client Go per installare, autenticare e modificare i dati in Spanner.
Installare la libreria client
La libreria client di Cloud Spanner semplifica l'integrazione con Cloud Spanner utilizzando automaticamente le Credenziali predefinite dell'applicazione (ADC) per trovare le credenziali del service account.
Configura l'autenticazione
Google Cloud CLI e le librerie client di Google Cloud rilevano automaticamente quando vengono eseguite su Google Cloud e utilizzano il service account di runtime della revisione Cloud Run corrente. Questa strategia è chiamata Credenziali predefinite dell'applicazione e consente la portabilità del codice in più ambienti.
Tuttavia, è consigliabile creare un'identità dedicata assegnandole un service account gestito dall'utente anziché il service account predefinito.
- Concedi il ruolo Amministratore database Spanner al service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Output di esempio
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
Utilizzo delle librerie client
Le librerie client di Spanner astraggono le complessità dell'integrazione con Spanner e sono disponibili in molti linguaggi di programmazione comuni.
Crea un client Spanner
Il client Spanner è un client per la lettura e la scrittura di dati in un database Cloud Spanner. Un client può essere utilizzato contemporaneamente, ad eccezione del metodo Close.
Lo snippet seguente crea un client Spanner
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Puoi considerare un client come una connessione al database: tutte le interazioni con Cloud Spanner devono passare attraverso un client. In genere, crei un client all'avvio dell'applicazione e lo riutilizzi per leggere, scrivere ed eseguire transazioni. Ogni cliente utilizza le risorse in Cloud Spanner.
Modificare i dati
Esistono diversi modi per inserire, aggiornare ed eliminare dati da un database Spanner. Di seguito sono elencati i metodi disponibili.
In questo lab utilizzerai le mutazioni per modificare i dati in Spanner.
Mutazioni in Spanner
Una mutazione è un contenitore per le operazioni di mutazione. Una mutazione rappresenta una sequenza di inserimenti, aggiornamenti ed eliminazioni che Cloud Spanner applica in modo atomico a righe e tabelle diverse in un database Cloud Spanner.
main.go
m := []*spanner.Mutation{}
m = append(m, spanner.Insert(
"inventoryHistory",
inventoryHistoryColumns,
[]interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
Lo snippet di codice inserisce una nuova riga nella tabella della cronologia dell'inventario.
Deployment e test
Ora che Spanner è configurato e hai esaminato gli elementi chiave del codice, esegui il deployment dell'applicazione in Cloud Run.
Esegui il deployment dell'applicazione in Cloud Run
Cloud Run può creare, eseguire il push e il deployment del codice automaticamente con un unico comando. Nel comando seguente, chiamerai il comando deploy sul servizio run, passando le variabili utilizzate dall'applicazione in esecuzione, ad esempio SPANNER_CONNECTION_STRING, che hai creato in precedenza.
- Fai clic su Apri terminale.
- Esegui il deployment del servizio di inventario su Cloud Run
gcloud run deploy inventory-service \
--source . \
--region $REGION \
--update-env-vars SPANNER_CONNECTION_STRING=$SPANNER_CONNECTION_STRING \
--allow-unauthenticated \
--project=$PROJECT_ID \
--quiet
Output di esempio
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
- Memorizzare l'URL del servizio
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Testa l'applicazione Cloud Run
Inserire un elemento
- In Cloud Shell, inserisci questo comando.
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Output di esempio
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
Eseguire una query su un elemento
- Esegui una query sul servizio di inventario
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Esempio di risposta
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. Concetti di Spanner
Cloud Spanner esegue query sui suoi database utilizzando istruzioni SQL dichiarative. Le istruzioni SQL indicano ciò che l'utente vuole senza descrivere come verranno ottenuti i risultati.
- Nel terminale, inserisci questo comando per eseguire una query sulla tabella per il record creato in precedenza.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Output di esempio
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Piani di esecuzione delle query
Un piano di esecuzione query è una serie di passaggi che Spanner utilizza per ottenere i risultati. Esistono diversi modi per ottenere i risultati di una determinata istruzione SQL. I piani di esecuzione delle query sono accessibili nella console e nelle librerie client. Per vedere come Spanner gestisce le query SQL:
- Nella console, apri la pagina delle istanze Cloud Spanner.
- Vai alle istanze Cloud Spanner
- Fai clic sul nome dell'istanza Cloud Spanner. Nella sezione dei database, seleziona il database su cui vuoi eseguire la query.
- Fai clic su Query.
- Inserisci la seguente query nell'editor di query
SELECT * FROM InventoryHistory WHERE ItemID=1
- Fai clic su ESEGUI.
- Fai clic su SPIEGAZIONE
Cloud Console mostra un piano di esecuzione visivo per la tua query.

Strumento di ottimizzazione delle query
L'ottimizzatore delle query di Cloud Spanner confronta i piani di esecuzione alternativi e seleziona quello più efficiente. Nel tempo, l'ottimizzatore delle query si evolverà, ampliando le scelte nel piano di esecuzione delle query e migliorando l'accuratezza delle stime che informano queste scelte, portando a piani di esecuzione delle query più efficienti.
Cloud Spanner implementa gli aggiornamenti dell'ottimizzatore come nuove versioni dell'ottimizzatore delle query. Per impostazione predefinita, ogni database inizia a utilizzare l'ultima versione dell'ottimizzatore non prima di 30 giorni dopo il rilascio della versione.
Per visualizzare la versione utilizzata durante l'esecuzione di una query in gcloud spanner, imposta il flag --query-mode su PROFILE.
- Inserisci il seguente comando per visualizzare la versione dell'ottimizzatore
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Output di esempio
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:
Aggiorna la versione dello strumento di ottimizzazione
La versione più recente al momento di questo lab è la versione 4. Successivamente, aggiornerai la tabella Spanner per utilizzare la versione 4 per l'ottimizzatore delle query.
- Aggiorna l'ottimizzatore
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Output di esempio
Schema updating...done.
- Inserisci il comando seguente per visualizzare l'aggiornamento della versione dell'ottimizzatore
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Output di esempio
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Visualizzare la versione dello strumento di ottimizzazione delle query in Esplora metriche
Puoi utilizzare Esplora metriche in Cloud Console per visualizzare il conteggio delle query per l'istanza del database. Puoi vedere quale versione dell'ottimizzatore viene utilizzata in ogni database.
- Vai a Monitoring nella console Google Cloud e seleziona Esplora metriche nel menu a sinistra.
- Nel campo Tipo di risorsa, seleziona Istanza Cloud Spanner.
- Nel campo Metrica, seleziona Conteggio query e Applica.
- Nel campo Raggruppa per, seleziona database, optimizer_version e stato.

7. Crea e configura un database Firestore
Firestore è un database di documenti NoSQL creato per offrire scalabilità automatica, prestazioni elevate e facilità di sviluppo delle applicazioni. Sebbene l'interfaccia Firestore abbia molte delle stesse funzionalità dei database tradizionali, un database NoSQL si differenzia da questi ultimi per la descrizione delle relazioni tra gli oggetti di dati.
L'attività seguente ti guiderà nella creazione di un'applicazione Cloud Run per il servizio di ordinazione supportata da Firestore. Il servizio di ordinazione chiamerà il servizio di inventario creato nella sezione precedente per eseguire query sul database Spanner prima di iniziare l'ordine. Questo servizio garantisce la presenza di un inventario sufficiente e che l'ordine possa essere completato.

8. Concetti di Firestore
Modello dei dati
Un database Firestore è composto da raccolte e documenti.

Documenti
Ogni documento contiene una serie di coppie chiave-valore. Firestore è ottimizzato per l'archiviazione di grandi raccolte di documenti di piccole dimensioni.

Raccolte
Devi archiviare tutti i documenti nelle raccolte. I documenti possono contenere sottoraccolte e oggetti nidificati, inclusi campi primitivi come stringhe o oggetti complessi come elenchi.

Crea un database Firestore
- Crea il database Firestore
gcloud firestore databases create --location=$REGION
Output di esempio
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Integrazione di Firestore nell'applicazione
In questa sezione, aggiornerai il service account, aggiungerai i service account di accesso a Firestore, esaminerai e implementerai le regole di sicurezza di Firestore e vedrai come vengono modificati i dati in Firestore.
Configura l'autenticazione
- Concedi il ruolo Utente Datastore al service account
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Output di esempio
Updated IAM policy for project [cymbal-eats-6422-3462].
Regole di sicurezza di Firestore
Le regole di sicurezza offrono il controllo dell'accesso e la convalida dei dati in un formato espressivo ma semplice.
- Vai alla directory order-service/starter-code
cd ~/cymbal-eats/order-service
- Apri il file firestore.rules nell'editor cloud
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
}
}
}
Avviso:è consigliabile limitare l'accesso allo spazio di archiviazione Firestore. Ai fini di questo lab, sono consentite tutte le letture. Questa non è una configurazione di produzione consigliata.
Attiva i servizi gestiti di Firestore
- Fai clic su Apri terminale.
- Crea il file .firebaserc con l'ID progetto corrente. Le impostazioni per le destinazioni di deployment sono archiviate nel file .firebaserc nella directory del progetto.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Scarica il binario Firebase
curl -sL https://firebase.tools | upgrade=true bash
Output di esempio
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Esegui il deployment delle regole Firestore.
firebase deploy
Output di esempio
=== 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
Modificare i dati
Raccolte e documenti vengono creati implicitamente in Firestore. Assegna semplicemente i dati a un documento all'interno di una raccolta. Se la raccolta o il documento non esiste, Firestore lo crea.
Aggiungere dati a Firestore
Esistono diversi modi per scrivere dati in Cloud Firestore:
- Imposta i dati di un documento all'interno di una raccolta, specificando esplicitamente un identificatore del documento.
- Aggiungere un nuovo documento a una raccolta. In questo caso, Cloud Firestore genera automaticamente l'identificatore del documento.
- Crea un documento vuoto con un identificatore generato automaticamente e assegnagli i dati in un secondo momento.
La sezione successiva ti guiderà nella creazione di un documento utilizzando il metodo set.
Impostare un documento
Utilizza il metodo set() per creare un documento. Con il metodo set(), devi specificare un ID per il documento da creare.
Dai un'occhiata allo snippet di codice riportato di seguito.
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'
});
Questo codice creerà un documento che specifica un ID documento generato dall'utente 123. Per fare in modo che Firestore generi un ID per tuo conto, utilizza il metodo add() o create().
Aggiornare un documento
Il metodo di aggiornamento update()ti consente di aggiornare alcuni campi del documento senza sovrascrivere l'intero documento.
Nello snippet riportato di seguito, il codice aggiorna l'ordine 123
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Eliminare un documento
In Firestore, puoi eliminare raccolte, documenti o campi specifici da un documento. Per eliminare un documento, utilizza il metodo delete().
Lo snippet seguente elimina l'ordine 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Deployment e test
In questa sezione, eseguirai il deployment dell'applicazione su Cloud Run e testerai i metodi di creazione, aggiornamento ed eliminazione.
Esegui il deployment dell'applicazione in Cloud Run
- Memorizza l'URL nella variabile INVENTORY_SERVICE_URL per l'integrazione con Inventory Service.
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Esegui il deployment del servizio di ordini
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
Output di esempio
[...] 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
Testa l'applicazione Cloud Run
Crea un documento
- Memorizza l'URL dell'applicazione del servizio di ordini in una variabile per il test
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Crea una richiesta di ordine e pubblica un nuovo ordine nel database Firestore
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
}
]
}'
Output di esempio
{"orderNumber":46429}
Salva il numero d'ordine per utilizzarlo in un secondo momento
export ORDER_NUMBER=<value_from_output>
Visualizza risultati
Visualizzare i risultati in Firestore
- Vai alla console Firestore.
- Fai clic su Dati.

Aggiornare un documento
L'ordine inviato non includeva la quantità.
- Aggiorna il record e aggiungi una coppia chiave-valore di quantità
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Output di esempio
{"status":"success"}
Visualizza risultati
Visualizzare i risultati in Firestore
- Vai alla console Firestore.
- Fai clic su Dati.

Eliminare un documento
- Elimina l'articolo 46429 dalla raccolta degli ordini Firestore
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Visualizza risultati
- Vai alla console Firestore.
- Fai clic su Dati.

11. Complimenti!
Complimenti, hai completato il lab.
Qual è il passaggio successivo?
Esplora altri codelab di Cymbal Eats:
- Attivazione di Cloud Workflows con Eventarc
- Attivazione dell'elaborazione degli eventi da Cloud Storage
- Connessione a Private CloudSQL da Cloud Run
- Proteggi l'applicazione serverless con Identity-Aware Proxy (IAP)
- Attivazione di Cloud Run Jobs con Cloud Scheduler
- Eseguire il deployment in Cloud Run in modo sicuro
- Protezione del traffico in entrata di Cloud Run
- Connessione ad AlloyDB privato da GKE Autopilot
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.