1. Panoramica
In questo lab integrerai i database serverless(Spanner e Firestore) con le applicazioni(Go e Node.js) in esecuzione in Cloud Run. L'applicazione Cymbal Eats include più servizi eseguiti su Cloud Run. Nei passaggi seguenti, configurerai i servizi per utilizzare 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 ti consente di astrarre tutta la gestione dell'infrastruttura, concentrandoti sulla creazione dell'applicazione anziché sull'overhead.
2. Cosa imparerai a fare
In questo lab imparerai a:
- Integra Spanner
- Abilita i servizi gestiti di Spanner
- Integrazione nel codice
- Esegui il deployment del codice che si connette a Spanner
- Integra Firestore
- Abilita i servizi gestiti di Firestore
- Integrazione nel codice
- Esegui il deployment del codice che si connette a Firestore
3. Configurazione e requisiti
Configurazione dell'ambiente autogestito
- 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 progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come
PROJECT_ID
). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto. - Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.
Configura l'ambiente
- Crea una variabile di 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
- Passa alla directory
cd cymbal-eats/inventory-service/spanner
4. Crea e configura un'istanza Spanner
Spanner è il database relazionale di backend dei servizi di inventario. Nei passaggi seguenti 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.
- Verificare se l'istanza Spanner è 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 DDL (Data Definition Language) di SQL standard di Google 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
- Visualizza 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
- Visualizza 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 come integrare Spanner nella tua applicazione. Inoltre, SQL Spanner fornisce librerie client, driver JDBC, driver R2DBC, API REST e API RPC, che 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 dell'applicazione predefinite (ADC) per trovare le credenziali del tuo account di servizio.
Configura l'autenticazione
Le librerie client di Google Cloud CLI e Google Cloud rilevano automaticamente quando sono in esecuzione su Google Cloud e utilizzano l'account di servizio di runtime della revisione attuale di Cloud Run. Questa strategia si chiama Credenziali predefinite dell'applicazione e consente la portabilità del codice in più ambienti.
Tuttavia, è meglio creare un'identità dedicata assegnando un account di servizio gestito dall'utente anziché l'account di servizio predefinito.
- Concedi il ruolo Amministratore database Spanner all'account di servizio
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 è sicuro da utilizzare contemporaneamente, tranne che per il metodo Close.
Lo snippet seguente crea un client Spanner
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Puoi pensare a un client come a una connessione di database: tutte le tue interazioni con Cloud Spanner devono passare attraverso un client. In genere si crea un client all'avvio dell'applicazione, quindi lo riutilizzi per leggere, scrivere ed eseguire transazioni. Ogni client utilizza le risorse in Cloud Spanner.
Modifica 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 container per le operazioni di mutazione. Una mutazione rappresenta una sequenza di inserimenti, aggiornamenti ed eliminazioni che Cloud Spanner applica a livello 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 ed eseguire automaticamente il push e il deployment del tuo codice con un solo comando. Nel comando seguente, chiamerai il comando deploy
sul servizio run
, passando le variabili utilizzate dall'applicazione in esecuzione, come SPANNER_CONNECTION_STRING che hai creato in precedenza.
- Fai clic su Apri terminale
- Eseguire il deployment del servizio di inventario in 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
- Archivia 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
Inserisci un elemento
- In Cloudshell, inserisci il comando seguente.
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
- Eseguire 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 propri database utilizzando istruzioni SQL dichiarative. Le istruzioni SQL indicano ciò che l'utente vuole senza descrivere come otterranno 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 delle query è una serie di passaggi che Spanner utilizza per ottenere risultati. Esistono diversi modi per acquisire i risultati di una particolare istruzione SQL. I piani di esecuzione delle query sono accessibili nella console e nelle librerie client. Per vedere in che modo Spanner gestisce le query SQL:
- Nella console, apri la pagina Istanze Cloud Spanner.
- Vai alle istanze Cloud Spanner
- Fai clic sul nome dell'istanza Cloud Spanner. Nella sezione Database, seleziona il database su cui eseguire la query.
- Fai clic su Query.
- Inserisci la seguente query nell'editor query
SELECT * FROM InventoryHistory WHERE ItemID=1
- Fai clic su ESEGUI
- Fai clic su SPIEGAZIONE
La console Cloud mostra un piano di esecuzione visivo per la query.
Strumento di ottimizzazione delle query
Lo strumento di ottimizzazione delle query di Cloud Spanner confronta piani di esecuzione alternativi e seleziona quello più efficiente. Nel tempo, lo strumento di ottimizzazione delle query si evolverà, ampliando le scelte nel piano di esecuzione delle query e migliorando l'accuratezza delle stime su cui si basano queste scelte, portando a piani di esecuzione delle query più efficienti.
Cloud Spanner implementa gli aggiornamenti dello strumento di ottimizzazione come nuove versioni. Per impostazione predefinita, ogni database inizia a utilizzare la versione più recente dell'ottimizzatore almeno 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 4. Successivamente, aggiornerai la tabella Spanner in modo che utilizzi la versione 4 per l'ottimizzazione delle query.
- Aggiorna lo strumento di ottimizzazione
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 seguente comando 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 [...]
Visualizza la versione dello strumento di ottimizzazione delle query in Metrics Explorer
Puoi utilizzare Esplora metriche nella console Cloud per visualizzare il Conteggio delle query per l'istanza del database. Puoi vedere quale versione dell'ottimizzatore viene utilizzata in ciascun database.
- Vai a Monitoring nella console Cloud e seleziona Metrics Explorer nel menu a sinistra.
- Nel campo Tipo di risorsa, seleziona Istanza Cloud Spanner.
- Nel campo Metrica, seleziona Conteggio delle query e Applica.
- Nel campo Group By (Raggruppa per), seleziona database, optimized_version e status.
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 funzionalità dei database tradizionali, un database NoSQL differisce da queste nella descrizione delle relazioni tra oggetti dati.
La seguente attività ti guiderà nella creazione di un'applicazione Cloud Run per il servizio di ordinazione supportata da Firestore. Il servizio di ordinazione chiama il servizio di inventario creato nella sezione precedente per eseguire una query sul database Spanner prima di iniziare l'ordine. Questo servizio garantirà l'inventario sufficiente e la possibilità di evadere l'ordine.
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 piccoli documenti.
Raccolte
Devi archiviare tutti i documenti in 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 l'account di servizio, aggiungerai account di servizio di accesso a Firestore, esaminerai ed eseguirai il deployment delle regole di sicurezza di Firestore ed esamineremo le modifiche apportate ai dati in Firestore.
Configura l'autenticazione
- Concedi il ruolo utente Datastore all'account di servizio
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 un formato espressivo ma diretto, ma al tempo stesso espresso per il controllo degli accessi e la convalida dei dati.
- Vai alla directory order-service/starter-code
cd ~/cymbal-eats/order-service
- Apri il file firestore.rules in 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 } } }
Avviso: come best practice, limitare l'accesso allo spazio di archiviazione di Firestore. Ai fini di questo lab, sono consentite tutte le operazioni di lettura. Questa configurazione di produzione non è consigliata.
Abilita i servizi gestiti di Firestore
- Fai clic su Apri terminale
- Crea il file .firebaserc con l'ID progetto attuale. 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 programma binario di 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 di 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
Modifica dati
Le raccolte e i documenti vengono creati implicitamente in Firestore. È sufficiente assegnare i dati a un documento all'interno di una raccolta. Se la raccolta o il documento non esiste, Firestore lo crea.
Aggiungi 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.
- Aggiungi 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 assegna i dati in un secondo momento.
La sezione successiva ti guiderà nella creazione di un documento utilizzando il metodo "set".
Imposta 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()
.
Aggiorna un documento
Il metodo di aggiornamento update()
consente di aggiornare alcuni campi del documento senza sovrascrivere l'intero documento.
Nello snippet seguente, 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 in Cloud Run e testerai i metodi di creazione, aggiornamento ed eliminazione.
esegui il deployment dell'applicazione in Cloud Run
- Archivia l'URL nella variabile INVENTORY_SERVICE_URL per l'integrazione con il Servizio di inventario
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Eseguire il deployment del servizio 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
- Archiviare l'URL dell'applicazione del servizio 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 dell'ordine per utilizzarlo in un secondo momento
export ORDER_NUMBER=<value_from_output>
Visualizza risultati
Visualizza i risultati in Firestore
- Vai alla console di Firestore.
- Fai clic su Dati
Aggiorna 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
Visualizza i risultati in Firestore
- Vai alla console di Firestore.
- Fai clic su Dati
Eliminare un documento
- Elimina l'elemento 46429 dalla raccolta ordini Firestore
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Visualizza risultati
- Vai alla console di Firestore.
- Fai clic su Dati
11. Complimenti!
Congratulazioni, hai terminato il lab.
Passaggi successivi
Esplora altri codelab di Cymbal Eats:
- Attivazione di Cloud Workflows con Eventarc
- Attivazione dell'elaborazione degli eventi da Cloud Storage
- Connessione a Cloud SQL privato da Cloud Run
- Applicazione serverless sicura con Identity-Aware Proxy (IAP)
- Attivazione di job Cloud Run con Cloud Scheduler
- Deployment sicuro su Cloud Run
- Protezione del traffico in entrata di Cloud Run
- Connessione ad AlloyDB privata 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 è quello di eliminare il progetto che hai creato per il tutorial.