1. Présentation
Dans cet atelier, vous allez intégrer des bases de données sans serveur(Spanner et Firestore) à des applications(Go et Node.js) exécutées dans Cloud Run. L'application Cymbal Eats inclut plusieurs services qui s'exécutent sur Cloud Run. Dans les étapes suivantes, vous allez configurer des services pour utiliser la base de données relationnelle Cloud Spanner et Cloud Firestore, une base de données de documents NoSQL. L'utilisation de produits sans serveur pour le niveau de données et l'environnement d'exécution de l'application vous permet d'éliminer toute la gestion de l'infrastructure et de vous concentrer sur la création de votre application sans vous soucier des coûts.
2. Objectifs de l'atelier
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Intégrer Spanner
- Activer les services gérés Spanner
- Intégrer dans le code
- Déployer du code se connectant à Spanner
- Intégrer Firestore
- Activer les services gérés Firestore
- Intégrer dans le code
- Déployer le code se connectant à Firestore
3. Préparation
Configuration de l'environnement d'auto-formation
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)



- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pourrez toujours le modifier.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique (en général, vous n'y accordez d'importance particulière). Dans la plupart des ateliers de programmation, vous devrez indiquer l'ID de votre projet (généralement identifié par
PROJECT_ID). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre de manière aléatoire. Vous pouvez également en spécifier un et voir s'il est disponible. Après cette étape, l'ID n'est plus modifiable et restera donc le même pour toute la durée du projet. - Pour information, il existe une troisième valeur (le numéro de projet) que certaines API utilisent. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour désactiver les ressources et éviter ainsi que des frais ne vous soient facturés après ce tutoriel, vous pouvez supprimer le projet ou les ressources que vous avez créées. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300 $.
Configurer l'environnement
- Créer une variable d'ID de projet
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
- Activer les API Spanner, Cloud Run, Cloud Build et 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
- Cloner le dépôt
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git
- Accédez au répertoire.
cd cymbal-eats/inventory-service/spanner
4. Créer et configurer une instance Spanner
Spanner est la base de données relationnelle du backend des services d'inventaire. Dans les étapes suivantes, vous allez créer une instance, une base de données et un schéma Spanner.
Créer une instance
- Créer une instance Cloud Spanner
gcloud spanner instances create $SPANNER_INSTANCE --config=regional-${REGION} \
--description="Cymbal Menu Inventory" --nodes=1
Exemple de résultat
Creating instance...done.
- Vérifier si l'instance Spanner est correctement configurée
gcloud spanner instances list
Exemple de résultat :
NAME: inventory-instance DISPLAY_NAME: Cymbal Menu Inventory CONFIG: regional-us-east1 NODE_COUNT: 1 PROCESSING_UNITS: 100 STATE: READY
Créer une base de données et un schéma
Créez une base de données et utilisez le langage de définition de données (LDD) SQL standard de Google pour créer le schéma de la base de données.
- Créer un fichier DDL
echo "CREATE TABLE InventoryHistory (ItemRowID STRING (36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, Timestamp TIMESTAMP) PRIMARY KEY(ItemRowID)" >> table.ddl
- Créer la base de données Spanner
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl-file=table.ddl
Exemple de résultat :
Creating database...done.
Vérifier l'état et le schéma de la base de données
- Afficher l'état de la base de données
gcloud spanner databases describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Exemple de résultat :
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
- Afficher le schéma de la base de données
gcloud spanner databases ddl describe $SPANNER_DB \
--instance=$SPANNER_INSTANCE
Exemple de résultat :
CREATE TABLE InventoryHistory ( ItemRowID STRING(36) NOT NULL, ItemID INT64 NOT NULL, InventoryChange INT64, TimeStamp TIMESTAMP, ) PRIMARY KEY(ItemRowID);
5. Intégrer Spanner
Dans cette section, vous allez apprendre à intégrer Spanner à votre application. De plus, SQL Spanner fournit des bibliothèques clientes, des pilotes JDBC, des pilotes R2DBC, des API REST et des API RPC, qui vous permettent d'intégrer Spanner à n'importe quelle application.
Dans la section suivante, vous allez utiliser la bibliothèque cliente Go pour installer, authentifier et modifier des données dans Spanner.
Installer la bibliothèque cliente
La bibliothèque cliente Cloud Spanner facilite l'intégration à Cloud Spanner en utilisant automatiquement les identifiants par défaut de l'application (ADC) pour trouver les identifiants de votre compte de service.
Configurer l'authentification
La Google Cloud CLI et les bibliothèques clientes Google Cloud détectent automatiquement leur exécution sur Google Cloud et utilisent le compte de service d'exécution de la révision Cloud Run actuelle. Cette stratégie est appelée "Identifiants par défaut de l'application" et permet la portabilité du code dans plusieurs environnements.
Toutefois, il est préférable de créer une identité dédiée en lui attribuant un compte de service géré par l'utilisateur au lieu du compte de service par défaut.
- Attribuer le rôle Administrateur de bases de données Spanner au compte de service
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/spanner.databaseAdmin"
Exemple de résultat :
Updated IAM policy for project [cymbal-eats-6422-3462]. [...]
Bibliothèques clientes
Les bibliothèques clientes Spanner simplifient l'intégration à Spanner et sont disponibles dans de nombreux langages de programmation courants.
Créer un client Spanner
Le client Spanner est un client permettant de lire et d'écrire des données dans une base de données Cloud Spanner. Un client peut être utilisé simultanément, à l'exception de sa méthode Close.
L'extrait ci-dessous crée un client Spanner.
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Vous pouvez considérer un objet Client comme une connexion à une base de données. Toutes vos interactions avec Cloud Spanner doivent s'effectuer par le biais de cet objet Client. En général, vous devez créer un client lorsque votre application démarre. Vous réutiliserez ensuite ce client pour lire, écrire et exécuter des transactions. Chaque client utilise des ressources dans Cloud Spanner.
Modifier les données
Il existe plusieurs façons d'insérer, de mettre à jour et de supprimer des données d'une base de données Spanner. Vous trouverez ci-dessous les méthodes disponibles.
Dans cet atelier, vous allez utiliser des mutations pour modifier des données dans Spanner.
Mutations dans Spanner
Un objet Mutation est un conteneur destiné aux opérations de mutation. Une mutation représente une séquence d'opérations (insertions, mises à jour, suppressions, etc.) que Cloud Spanner applique de manière atomique à différentes lignes et tables d'une base de données Cloud Spanner.
main.go
m := []*spanner.Mutation{}
m = append(m, spanner.Insert(
"inventoryHistory",
inventoryHistoryColumns,
[]interface{}{uuid.New().String(), element.ItemID, element.InventoryChange, time.Now()}))
L'extrait de code insère une ligne dans le tableau de l'historique de l'inventaire.
Déployer et tester
Maintenant que Spanner est configuré et que vous avez examiné les éléments de code clés, déployez l'application sur Cloud Run.
Déployer l'application dans Cloud Run
Cloud Run peut compiler, envoyer et déployer automatiquement votre code avec une seule commande. Dans la commande suivante, vous appellerez la commande deploy sur le service run, en transmettant les variables utilisées par l'application en cours d'exécution, telles que SPANNER_CONNECTION_STRING que vous avez créée précédemment.
- Cliquez sur "Ouvrir le terminal".
- Déployer le service d'inventaire sur 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
Exemple de résultat :
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
- Stocker l'URL du service
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
Tester l'application Cloud Run
Insérer un élément
- Dans Cloud Shell, saisissez la commande suivante :
POST_URL=$INVENTORY_SERVICE_URL/updateInventoryItem
curl -i -X POST ${POST_URL} \
--header 'Content-Type: application/json' \
--data-raw '[
{
"itemID": 1,
"inventoryChange": 5
}
]'
Exemple de résultat :
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
Interroger un élément
- Interroger le service d'inventaire
GET_URL=$INVENTORY_SERVICE_URL/getAvailableInventory
curl -i ${GET_URL}
Exemple de réponse
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. Concepts Spanner
Cloud Spanner interroge ses bases de données à l'aide d'instructions SQL déclaratives. Les instructions SQL indiquent ce que l'utilisateur souhaite sans décrire comment les résultats seront obtenus.
- Dans le terminal, saisissez cette commande pour interroger la table et rechercher l'enregistrement créé précédemment.
gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT * FROM InventoryHistory WHERE ItemID=1'
Exemple de résultat :
ItemRowID: 1
ItemID: 1
InventoryChange: 3
Timestamp:
Plans d'exécution de requêtes
Un plan d'exécution de requêtes est une série d'étapes que Spanner utilise pour obtenir des résultats. Il existe peut-être plusieurs façons d'obtenir les résultats d'une instruction SQL spécifique. Les plans d'exécution de requêtes sont accessibles dans la console et les bibliothèques clientes. Pour voir comment Spanner gère les requêtes SQL :
- Dans la console, ouvrez la page "Instances" de Cloud Spanner.
- Accéder à la page Instances de Cloud Spanner
- Cliquez sur le nom de l'instance Cloud Spanner. Dans la section "Bases de données", sélectionnez celle que vous souhaitez interroger.
- Cliquez sur "Requête".
- Saisissez la requête suivante dans l'éditeur de requête.
SELECT * FROM InventoryHistory WHERE ItemID=1
- Cliquez sur EXÉCUTER.
- Cliquez sur EXPLICATION.
Cloud Console affiche un plan d'exécution visuel pour votre requête.

Optimiseur de requêtes
L'optimiseur de requêtes Cloud Spanner compare les différents plans d'exécution et sélectionne le plus efficace. Au fil du temps, l'optimiseur de requêtes évoluera, élargissant la gamme de choix dans le plan d'exécution de requêtes et améliorant la précision des estimations qui informent ces choix, ce qui améliorera l'efficacité des plans d'exécution.
Cloud Spanner déploie les mises à jour de l'optimiseur en tant que nouvelles versions de l'optimiseur de requêtes. Par défaut, chaque base de données commence à utiliser la dernière version de l'optimiseur au plus tard 30 jours après sa publication.
Pour afficher la version utilisée lors de l'exécution d'une requête dans gcloud spanner, définissez l'option "–query-mode" sur PROFILE.
- Saisissez la commande suivante pour afficher la version de l'optimiseur :
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Exemple de résultat :
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:
Mettre à jour la version de l'optimiseur
La dernière version au moment de cet atelier est la version 4. Vous allez ensuite mettre à jour la table Spanner pour utiliser la version 4 de l'optimiseur de requêtes.
- Mettre à jour l'optimiseur
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl='ALTER DATABASE InventoryHistory
SET OPTIONS (optimizer_version = 4)'
Exemple de résultat :
Schema updating...done.
- Saisissez la commande suivante pour afficher la mise à jour de la version de l'optimiseur.
gcloud spanner databases execute-sql $SPANNER_DB --instance=$SPANNER_INSTANCE \
--query-mode=PROFILE --sql='SELECT * FROM InventoryHistory'
Exemple de résultat :
TOTAL_ELAPSED_TIME: 8.57 msecs CPU_TIME: 8.54 msecs ROWS_RETURNED: 1 ROWS_SCANNED: 1 OPTIMIZER_VERSION: 4 [...]
Visualiser la version de l'optimiseur de requêtes dans l'explorateur de métriques
Vous pouvez utiliser l'explorateur de métriques dans la console Cloud pour visualiser le nombre de requêtes de votre instance de base de données. Vous pouvez identifier la version de l'optimiseur utilisée dans chaque base de données.
- Accédez à Monitoring dans la console Cloud, puis sélectionnez Explorateur de métriques dans le menu de gauche.
- Dans le champ Type de ressource, sélectionnez "Instance Cloud Spanner".
- Dans le champ Métrique, sélectionnez "Nombre de requêtes", puis cliquez sur "Appliquer".
- Dans le champ Grouper par, sélectionnez "database" (base de données), "optimizer_version" (version de l'optimiseur) et "status" (état).

7. Créer et configurer une base de données Firestore
Conçue pour le scaling automatique et les hautes performances, Firestore est une base de données de documents NoSQL qui simplifie le développement d'applications. Bien que l'interface Firestore présente de nombreuses fonctionnalités identiques aux bases de données traditionnelles, une base de données NoSQL diffère de ces bases de données par la manière dont elle décrit les relations entre les objets de données.
La tâche suivante vous guidera dans la création d'une application Cloud Run de service de commande reposant sur Firestore. Le service de commande appellera le service d'inventaire créé dans la section précédente pour interroger la base de données Spanner avant de commencer la commande. Ce service permet de s'assurer qu'il existe suffisamment d'inventaire et que la commande peut être traitée.

8. Concepts Firestore
Modèle de données
Une base de données Firestore est constituée de collections et de documents.

Documents
Chaque document contient un ensemble de paires clé/valeur. Firestore est optimisé pour stocker de grandes collections de petits documents.

Collections
Vous devez stocker tous les documents dans des collections. Les documents peuvent contenir des sous-collections et des objets imbriqués, y compris des champs de données élémentaires, tels que des chaînes, ou des objets complexes, tels que des listes.

Créer une base de données Firestore
- Créer la base de données Firestore
gcloud firestore databases create --location=$REGION
Exemple de résultat :
Success! Selected Google Cloud Firestore Native database for cymbal-eats-6422-3462
9. Intégrer Firestore à votre application
Dans cette section, vous allez mettre à jour le compte de service, ajouter des comptes de service d'accès à Firestore, examiner et déployer les règles de sécurité Firestore, et examiner comment les données sont modifiées dans Firestore.
Configurer l'authentification
- Attribuer le rôle Utilisateur Datastore au compte de service
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
--role="roles/datastore.user"
Exemple de résultat :
Updated IAM policy for project [cymbal-eats-6422-3462].
Règles de sécurité Firestore
Les règles de sécurité assurent le contrôle des accès et la validation des données à l'aide d'un format expressif, mais simple.
- Accédez au répertoire order-service/starter-code.
cd ~/cymbal-eats/order-service
- Ouvrez le fichier firestore.rules dans l'éditeur 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
}
}
}
Avertissement : Nous vous recommandons de limiter l'accès au stockage Firestore. Pour cet atelier, toutes les lectures sont autorisées. Il ne s'agit pas d'une configuration de production recommandée.
Activer les services gérés Firestore
- Cliquez sur "Ouvrir le terminal".
- Créez le fichier .firebaserc avec l'ID de projet actuel. Les paramètres des cibles de déploiement sont stockés dans le fichier .firebaserc du répertoire de votre projet.
firebaserc.tmpl
sed "s/PROJECT_ID/$PROJECT_ID/g" firebaserc.tmpl > .firebaserc
- Télécharger le binaire Firebase
curl -sL https://firebase.tools | upgrade=true bash
Exemple de résultat :
-- Checking for existing firebase-tools on PATH... Your machine already has firebase-tools@10.7.0 installed. Nothing to do. -- All done!
- Déployez les règles Firestore.
firebase deploy
Exemple de résultat
=== 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
Modifier les données
Dans Firestore, les collections et les documents sont créés implicitement. Il vous suffit d'attribuer des données à un document au sein d'une collection. Si la collection ou le document n'existe pas, Firestore le crée.
Ajouter des données à Firestore
Il existe plusieurs façons d'écrire des données dans Cloud Firestore :
- Définissez les données d'un document dans une collection, en spécifiant explicitement un identifiant de document.
- Ajoutez un document à une collection. Dans ce cas, Cloud Firestore génère automatiquement l'identifiant du document.
- Créez un document vide avec un identifiant généré automatiquement et attribuez-lui des données ultérieurement.
La section suivante vous explique comment créer un document à l'aide de la méthode "set".
Définir un document
Utilisez la méthode set() pour créer un document. Avec la méthode set(), vous devez spécifier un ID pour le document à créer.
Examinez l'extrait de code ci-dessous.
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'
});
Ce code crée un document spécifiant un ID de document généré par l'utilisateur 123. Pour que Firestore génère un ID à votre place, utilisez la méthode add() ou create().
Modifier un document
La méthode update() vous permet de mettre à jour certains champs d'un document sans écraser l'intégralité du document.
Dans l'extrait ci-dessous, le code met à jour la commande 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.update(name: "Anna");
Supprimer un document
Dans Firestore, vous pouvez supprimer des collections, des documents ou des champs spécifiques d'un document. Pour supprimer un document, utilisez la méthode delete().
L'extrait de code ci-dessous supprime la commande 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Déployer et tester
Dans cette section, vous allez déployer l'application sur Cloud Run et tester les méthodes de création, de mise à jour et de suppression.
Déployer l'application dans Cloud Run
- Stockez l'URL dans la variable INVENTORY_SERVICE_URL pour l'intégrer au service d'inventaire.
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Déployer le service de commande
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
Exemple de résultat :
[...] 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
Tester l'application Cloud Run
Créer un document
- Stockez l'URL de l'application de service de commande dans une variable pour les tests.
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Créer une demande de commande et publier une nouvelle commande dans la base de données 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
}
]
}'
Exemple de résultat :
{"orderNumber":46429}
Enregistrez le numéro de commande pour une utilisation ultérieure.
export ORDER_NUMBER=<value_from_output>
Afficher les résultats
Afficher les résultats dans Firestore
- Accédez à la console Firestore.
- Cliquez sur "Données".

Mettre à jour un document
La quantité n'était pas indiquée dans la commande envoyée.
- Mettre à jour l'enregistrement et ajouter une paire clé/valeur de quantité
curl --location -g --request PATCH $ORDER_SERVICE_URL/order/${ORDER_NUMBER} \
--header 'Content-Type: application/json' \
--data-raw '{
"orderItems": [
{
"id": 1,
"quantity": 1
}
]
}'
Exemple de résultat :
{"status":"success"}
Afficher les résultats
Afficher les résultats dans Firestore
- Accédez à la console Firestore.
- Cliquez sur "Données".

Supprimer un document
- Supprime l'élément 46429 de la collection de commandes Firestore.
curl --location -g --request DELETE $ORDER_SERVICE_URL/order/${ORDER_NUMBER}
Afficher les résultats
- Accédez à la console Firestore.
- Cliquez sur "Données".

11. Félicitations !
Félicitations, vous avez terminé l'atelier.
Étapes suivantes :
Découvrez d'autres ateliers de programmation Cymbal Eats :
- Déclencher des workflows Cloud avec Eventarc
- Déclencher le traitement des événements à partir de Cloud Storage
- Se connecter à une instance CloudSQL privée depuis Cloud Run
- Sécuriser une application serverless avec Identity-Aware Proxy (IAP)
- Déclencher des jobs Cloud Run avec Cloud Scheduler
- Déployer de manière sécurisée sur Cloud Run
- Sécuriser le trafic d'entrée Cloud Run
- Se connecter à une instance AlloyDB privée depuis GKE Autopilot
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.