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 des applications vous permet d'éliminer toute la gestion de l'infrastructure et de vous concentrer sur la création de votre application sans avoir à vous soucier des frais généraux.
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 au code
- Déployer le code se connectant à Spanner
- Intégrer Firestore
- Activer les services gérés Firestore
- Intégrer au 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éder 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 backend du service d'inventaire. Vous allez créer une instance, une base de données et un schéma Spanner au cours des étapes suivantes.
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) du langage SQL standard de Google pour générer le schéma de la base de données.
- Créer un fichier LDD
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. En outre, 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 lorsqu'elles s'exécutent sur Google Cloud et utilisent le compte de service d'exécution de la révision Cloud Run actuelle. Cette stratégie, appelée "Identifiants par défaut de l'application", permet la portabilité du code entre 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 plutôt que le compte de service par défaut.
- Accorder au compte de service le rôle d'administrateur de bases de données Spanner
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 permettent d'éliminer les complexités de 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. Vous pouvez utiliser un client simultanément en toute sécurité, à l'exception de sa méthode Close.
L'extrait de code ci-dessous crée un client Spanner
main.go
var dataClient *spanner.Client ... dataClient, err = spanner.NewClient(ctx, databaseName)
Un client peut être considéré comme une connexion à une base de données: toutes vos interactions avec Cloud Spanner doivent s'effectuer par le biais d'un client. Généralement, vous créez un client lorsque votre application démarre, puis vous le réutilisez 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 dans 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 nouvelle ligne dans le tableau de l'historique de l'inventaire.
Déploiement et test
Maintenant que Spanner est configuré et que vous avez passé en revue les éléments de code clés qui déploient l'application sur Cloud Run,
Déployer l'application sur Cloud Run
Cloud Run peut automatiquement créer, transférer et déployer votre code à l'aide d'une seule commande. Dans la commande suivante, vous allez appeler 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 cloudshell, 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 veut sans décrire comment les résultats seront obtenus.
- Dans le terminal, saisissez la commande suivante pour interroger la table afin d'obtenir 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 peut y avoir plusieurs façons d'obtenir les résultats d'une instruction SQL particulière. Les plans d'exécution de requêtes sont accessibles dans la console et dans les bibliothèques clientes. Pour savoir comment Spanner gère les requêtes SQL:
- Dans la console, ouvrez la page "Instances 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 la base de données 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.
La console Cloud affiche un plan d'exécution visuel pour votre requête.
Optimiseur de requêtes
L'optimiseur de requêtes Cloud Spanner compare les plans d'exécution alternatifs et sélectionne le plus efficace. Au fil du temps, l'optimiseur de requête évoluera, en élargissant les choix dans le plan d'exécution des requêtes et en améliorant la précision des estimations qui guident ces choix, ce qui conduira à des plans d'exécution des requêtes plus efficaces.
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 moins 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
Au moment de cet atelier, la version la plus récente est la version 4. Vous allez maintenant mettre à jour la table Spanner afin qu'elle utilise la version 4 pour 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 pour votre instance de base de données. Vous pouvez voir quelle version de l'optimiseur est utilisée dans chaque base de données.
- Accédez à Monitoring dans la console Cloud et 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 "Appliquer".
- Dans le champ Group by (Grouper par), sélectionnez "database", "optimiseur_version" et "status".
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 d'elles en décrivant les relations entre les objets de données.
La tâche suivante va vous guider dans la création d'une application Cloud Run de service de commande reposant sur Firestore. Le service de commande appelle le service d'inventaire créé dans la section précédente pour interroger la base de données Spanner avant de lancer la commande. Ce service permet de garantir un inventaire suffisant et la possibilité de honorer la commande.
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 le stockage 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 primitifs comme des chaînes ou des objets complexes comme 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 la modification des donné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é offrent un format à la fois expressif et simple pour le contrôle des accès et la validation des données.
- Accéder au répertoire "order-service/starter-code"
cd ~/cymbal-eats/order-service
- Ouvrir 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:Il est recommandé de limiter l'accès au stockage Firestore. Dans le cadre de cet atelier, toutes les lectures sont autorisées. Cette configuration de production n'est pas recommandée.
Activer les services gérés Firestore
- Cliquez sur "Ouvrir le terminal".
- Créez un 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éployer 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 au sein d'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 va vous guider dans la création d'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 l'ID 123 généré par l'utilisateur. Pour que Firestore génère un ID en votre nom, utilisez la méthode add()
ou create()
.
Mettre à jour un document
La méthode de mise à jour update()
vous permet de mettre à jour certains champs d'un document sans écraser l'ensemble 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 ci-dessous supprime la commande 123.
index.js
const orderDoc = db.doc(`orders/123`); await orderDoc.delete();
10. Déploiement et test
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 sur Cloud Run
- Stockez l'URL dans la variable INVENTORY_SERVICE_URL pour intégrer le service Inventory
INVENTORY_SERVICE_URL=$(gcloud run services describe inventory-service \
--region=$REGION \
--format=json | jq \
--raw-output ".status.url")
- Déployer le service des commandes
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
- Stocker l'URL de l'application du service de commande dans une variable à des fins de test
ORDER_SERVICE_URL=$(gcloud run services describe order-service \
--platform managed \
--region $REGION \
--format=json | jq \
--raw-output ".status.url")
- Créer une requête 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}
Enregistrer 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 commande n'incluait pas la quantité.
- 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
- Supprimer 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 Cloud Workflows avec Eventarc
- Déclencher le traitement des événements depuis Cloud Storage
- Se connecter au service Cloud SQL privé depuis Cloud Run
- Sécuriser une application sans serveur avec Identity-Aware Proxy (IAP)
- Déclencher des jobs Cloud Run avec Cloud Scheduler
- Déployer une application sur Cloud Run en toute sécurité
- Sécuriser le trafic d'entrée Cloud Run
- Se connecter à une instance privée AlloyDB 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.