Présentation
L'informatique sans serveur sur Google Cloud vous permet de développer et de déployer des applications hautement évolutives sur une plate-forme sans serveur entièrement gérée. Les services font l'objet d'un scaling automatique à la hausse ou à la baisse en fonction du trafic.
L'intégration de services vous permet d'intégrer facilement vos services de manière asynchrone et faiblement couplée, ce qui favorise une innovation rapide. Eventarc vous permet de créer des architectures basées sur des événements sans avoir à gérer l'infrastructure. Workflows vous permet de créer facilement des applications fiables en orchestrant des services et des API. Cloud Scheduler est un service de jobs Cron entièrement géré servant à planifier vos charges de travail. Cloud Tasks est un service entièrement géré qui permet de créer des files d'attente de tâches distribuées. Eventarc, Workflows, Cloud Scheduler et Cloud Tasks vous aident à intégrer vos services tout en maintenant l'observabilité, la fiabilité et la sécurité.
Dans cet atelier, vous allez utiliser Workflows pour créer un workflow qui gère le processus de création de vignettes et d'extraction de métadonnées d'images entrantes. Eventarc détecte qu'une image est importée dans un bucket Cloud Storage et lance l'exécution de votre workflow.
Le workflow appelle l'API Cloud Vision pour analyser la photo importée. Cloud Vision détermine si l'image est sûre, détecte le texte qu'elle contient et fournit des étiquettes pour le contenu de l'image. Les données de vision sont extraites à l'aide d'une fonction personnalisée créée dans Cloud Run Functions. Les données extraites sont enregistrées dans Firestore, la base de données de documents sans serveur entièrement gérée de Google Cloud. Le workflow utilise également Cloud Tasks pour mettre en file d'attente une tâche de création de vignette.
Cloud Build est utilisé pour créer trois services qui sont déployés dans Cloud Run, une plate-forme sans serveur permettant d'exécuter des services conteneurisés. L'un de ces services crée une vignette en réponse à la tâche créée par le workflow.
Le deuxième service crée un montage à partir des images les plus récentes. Le service de montage s'exécute selon une planification créée dans Cloud Scheduler.
Le troisième service est déclenché par Eventarc lorsqu'une image est supprimée du bucket Cloud Storage. Ce service supprimera les métadonnées et la vignette de l'image supprimée.

Objectifs de l'atelier
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Déclencher de manière asynchrone des services et des workflows à l'aide d'Eventarc
- Orchestrer des services et des API à l'aide de Workflows
- Gérer une file d'attente de tâches distribuées à l'aide de Cloud Tasks
- Exécuter des services selon une planification à l'aide de Cloud Scheduler
Préparation
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
-
Cliquez sur le bouton Démarrer l'atelier. Si l'atelier est payant, un pop-up s'affiche pour vous permettre de sélectionner un mode de paiement.
Sur la gauche, vous trouverez le panneau Détails concernant l'atelier, qui contient les éléments suivants :
- Le bouton Ouvrir la console Google Cloud
- Le temps restant
- Les identifiants temporaires que vous devez utiliser pour cet atelier
- Des informations complémentaires vous permettant d'effectuer l'atelier
-
Cliquez sur Ouvrir la console Google Cloud (ou effectuez un clic droit et sélectionnez Ouvrir le lien dans la fenêtre de navigation privée si vous utilisez le navigateur Chrome).
L'atelier lance les ressources, puis ouvre la page Se connecter dans un nouvel onglet.
Conseil : Réorganisez les onglets dans des fenêtres distinctes, placées côte à côte.
Remarque : Si la boîte de dialogue Sélectionner un compte s'affiche, cliquez sur Utiliser un autre compte.
-
Si nécessaire, copiez le nom d'utilisateur ci-dessous et collez-le dans la boîte de dialogue Se connecter.
{{{user_0.username | "Username"}}}
Vous trouverez également le nom d'utilisateur dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
-
Copiez le mot de passe ci-dessous et collez-le dans la boîte de dialogue Bienvenue.
{{{user_0.password | "Password"}}}
Vous trouverez également le mot de passe dans le panneau Détails concernant l'atelier.
-
Cliquez sur Suivant.
Important : Vous devez utiliser les identifiants fournis pour l'atelier. Ne saisissez pas ceux de votre compte Google Cloud.
Remarque : Si vous utilisez votre propre compte Google Cloud pour cet atelier, des frais supplémentaires peuvent vous être facturés.
-
Accédez aux pages suivantes :
- Acceptez les conditions d'utilisation.
- N'ajoutez pas d'options de récupération ni d'authentification à deux facteurs (ce compte est temporaire).
- Ne vous inscrivez pas à des essais sans frais.
Après quelques instants, la console Cloud s'ouvre dans cet onglet.
Remarque : Pour afficher un menu contenant la liste des produits et services Google Cloud, cliquez sur le menu de navigation en haut à gauche, ou saisissez le nom du service ou du produit dans le champ Recherche.
Activer Google Cloud Shell
Google Cloud Shell est une machine virtuelle qui contient de nombreux outils pour les développeurs. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud.
Google Cloud Shell vous permet d'accéder à vos ressources Google Cloud grâce à une ligne de commande.
-
Dans la barre d'outils située en haut à droite dans la console Cloud, cliquez sur le bouton "Ouvrir Cloud Shell".

-
Cliquez sur Continuer.
Le provisionnement et la connexion à l'environnement prennent quelques instants. Une fois connecté, vous êtes en principe authentifié et le projet est défini sur votre ID_PROJET. Par exemple :

gcloud est l'outil de ligne de commande pour Google Cloud. Il est préinstallé sur Cloud Shell et permet la complétion par tabulation.
- Vous pouvez lister les noms des comptes actifs à l'aide de cette commande :
gcloud auth list
Résultat :
Credentialed accounts:
- @.com (active)
Exemple de résultat :
Credentialed accounts:
- google1623327_student@qwiklabs.net
- Vous pouvez lister les ID de projet à l'aide de cette commande :
gcloud config list project
Résultat :
[core]
project =
Exemple de résultat :
[core]
project = qwiklabs-gcp-44776a13dea667a6
Remarque : Pour consulter la documentation complète sur gcloud, accédez au guide de présentation de la gcloud CLI.
Tâche 1 : Activer les API et créer des buckets Cloud Storage
Dans cette tâche, vous allez activer les API requises. Vous allez également créer deux buckets dans Cloud Storage : l'un pour importer des images et l'autre pour stocker les images générées par votre application.
Activer les API
-
Pour activer les API requises, exécutez la commande suivante :
gcloud services enable \
workflows.googleapis.com \
workflowexecutions.googleapis.com \
eventarc.googleapis.com \
tasks.googleapis.com \
cloudscheduler.googleapis.com \
storage.googleapis.com \
vision.googleapis.com \
run.googleapis.com \
cloudfunctions.googleapis.com \
firestore.googleapis.com \
appengine.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com
Cette application utilise plusieurs services Google Cloud. Vous devez activer chacune des API pour ces services.
Voici les API activées :
- L'API Workflows gère les définitions des workflows. Un workflow exécutera le processus principal lorsqu'une nouvelle image est importée.
- L'API Workflow Executions gère les exécutions des workflows.
- L'API Eventarc gère la configuration d'Eventarc. Eventarc sera utilisé pour détecter les images ajoutées à un bucket Cloud Storage et celles qui en sont supprimées.
- L'API Cloud Tasks crée et gère les tâches distribuées. Le workflow créera une tâche qui déclenchera la création d'une vignette.
- L'API Cloud Scheduler crée et gère les jobs Cron planifiés. Un job planifié sera utilisé pour créer un montage à partir des dernières images.
- L'API Cloud Storage crée et gère les buckets et les objets Cloud Storage.
- L'API Cloud Vision permet d'accéder aux fonctionnalités de vision exploitant le machine learning de Google.
- L'API Cloud Run crée et gère les services Cloud Run. Les services Cloud Run sont fournis pour créer une vignette, supprimer une image et créer un montage.
- L'API Cloud Functions crée et gère les fonctions. Une fonction est utilisée pour extraire des informations de la réponse de Cloud Vision.
- L'API Firestore crée et gère les bases de données Firestore.
- L'API App Engine crée et gère les applications App Engine. Cette API est requise pour activer Firestore.
- L'API Cloud Build gère les compilations d'application.
- L'API Artifact Registry gère les artefacts de compilation et les registres.
Créer des buckets Cloud Storage
-
Dans Cloud Shell, créez un bucket Cloud Storage pour importer des images :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage buckets create \
--location={{{project_0.default_region|set at lab start}}} gs://${UPLOAD_BUCKET}
gcloud storage buckets update \
gs://${UPLOAD_BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding \
gs://${UPLOAD_BUCKET} \
--member=allUsers --role=roles/storage.objectViewer
Ces commandes créent un bucket régional public avec accès uniforme. Chaque fois qu'une image est copiée dans le bucket, un workflow est lancé pour analyser la photo et stocker les métadonnées ainsi qu'une vignette.
-
Créez un deuxième bucket Cloud Storage pour les images générées par les applications d'images :
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage buckets create \
--location={{{project_0.default_region|set at lab start}}} gs://${GENERATED_BUCKET}
gcloud storage buckets update \
gs://${GENERATED_BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding \
gs://${GENERATED_BUCKET} \
--member=allUsers --role=roles/storage.objectViewer
-
Dans la console Google Cloud, accédez au menu de navigation (
), puis à Cloud Storage > Buckets.
Les deux buckets que vous avez créés s'affichent.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer des buckets Cloud Storage
Tâche 2 : Créer la base de données Firestore
Dans cette tâche, vous allez créer la base de données Firestore qui stockera les métadonnées des images.
Créer la base de données
-
Pour créer la base de données Firestore, exécutez la commande suivante dans Cloud Shell :
export FIRESTORE_LOCATION={{{project_0.default_region|set at lab start}}}
gcloud firestore databases create \
--location=${FIRESTORE_LOCATION} \
--type=firestore-native
Une collection Firestore nommée images sera utilisée pour stocker les métadonnées des images. Le service de montage va rechercher dans la base de données les images avec vignettes les plus récentes pour créer le montage.
Une fois la base de données créée, vous devez créer un index pour prendre en charge cette recherche.
Créer l'index composite Firestore
Un index composite Firestore est utilisé lorsque vous avez besoin d'une seule requête pour faire référence à plusieurs champs.
-
Pour créer l'index composite, exécutez la commande suivante :
gcloud firestore indexes composite create \
--collection-group=images \
--field-config field-path=thumbnail,order=descending \
--field-config field-path=created,order=descending \
--async
Cet index permettra au service de montage de trouver les images avec vignettes les plus récentes.
Le paramètre --async indique que vous ne souhaitez pas attendre la fin de l'opération.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Firestore et cliquez sur Recherche, puis sur Firestore.
-
Cliquez sur l'ID de votre base de données (default)
, puis sur Index dans le volet de gauche.
Vous devez voir que l'index de la collection images est en cours de création.
Remarque : La création de l'index de recherche peut prendre plusieurs minutes. Vous pouvez poursuivre l'atelier en attendant que la création de l'index soit terminée.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer la base de données Firestore et l'index composite
Tâche 3 : Créer la file d'attente de tâches pour les vignettes
Dans cette tâche, vous allez créer une file d'attente Cloud Tasks pour demander la création de vignettes au service create-thumbnail.
-
Pour créer la file d'attente de tâches, saisissez la commande suivante dans Cloud Shell :
export QUEUE_REGION={{{project_0.default_region|set at lab start}}}
gcloud tasks queues create thumbnail-task-queue \
--location=${QUEUE_REGION}
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Cloud Tasks et cliquez sur Recherche, puis sur Cloud Tasks.
La file d'attente nommée thumbnail-task-queue a été créée.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer la file d'attente Cloud Tasks
Tâche 4 : Déployer les services Cloud Run
Dans cette tâche, vous allez créer et déployer les services Cloud Run qui seront utilisés par l'application d'images.
Cloner le dépôt du code source
-
Dans Cloud Shell, clonez le dépôt Git :
git clone --depth=1 https://github.com/GoogleCloudPlatform/training-data-analyst
-
Créez un lien symbolique vers le répertoire racine pour cet atelier :
ln -s ~/training-data-analyst/courses/orchestration-and-choreography/lab1 ~/code
Créer un dépôt dans Artifact Registry
Artifact Registry est la nouvelle génération de Container Registry. Vous pouvez stocker des artefacts de compilation dans un dépôt Artifact Registry.
-
Afin de créer un dépôt Artifact Registry pour les images Docker, exécutez la commande suivante dans Cloud Shell :
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
gcloud artifacts repositories create ${REPO_NAME} \
--location=${REPO_REGION} --repository-format=docker
Créer et déployer le service create-thumbnail
Le service de vignettes crée une vignette pour l'image importée et la stocke dans le bucket generated-images.
-
Dans Cloud Shell, cliquez sur Ouvrir l'éditeur.
-
Dans l'éditeur Cloud Shell, accédez à ~/code/cloud-run/create-thumbnail
et examinez les fichiers du service create-thumbnail.
Le répertoire contient trois fichiers :
- Le fichier package.json contient les métadonnées nécessaires à la création de votre application Node.js. Il définit la commande qui démarre l'application (node index.js) et spécifie les versions des packages utilisés par le code.
- Le Dockerfile spécifie l'image de départ (node:16-slim) et contient la liste des commandes exécutées pour créer l'image de conteneur qui hébergera notre service. L'installation inclut Imagemagick, qui sera utilisé pour créer des vignettes à partir des images importées.
-
index.js contient le code du service.
-
Cliquez sur Ouvrir le terminal.
-
Pour créer l'image Docker du service create-thumbnail à l'aide de Cloud Build, exécutez les commandes suivantes dans Cloud Shell :
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_NAME=create-thumbnail
cd ~/code/cloud-run/create-thumbnail
gcloud builds submit \
. \
--tag ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${THUMBNAIL_SERVICE_NAME}
Le service est créé et stocké dans le dépôt Artifact Registry.
-
Pour déployer le service à l'aide de Cloud Run, exécutez les commandes suivantes dans Cloud Shell :
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export THUMBNAIL_SERVICE_NAME=create-thumbnail
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/create-thumbnail
gcloud config set run/region ${THUMBNAIL_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${THUMBNAIL_SERVICE_NAME} \
--image ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${THUMBNAIL_SERVICE_NAME} \
--no-allow-unauthenticated \
--memory=1Gi \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
Le nom du bucket generated-images est transmis à l'application par le biais d'une variable d'environnement.
Créer et déployer le service de montage
Le service de montage combine les images importées le plus récemment dans un montage, qu'il stocke dans le bucket des images générées.
-
Dans Cloud Shell, cliquez sur Ouvrir l'éditeur.
-
Dans l'éditeur Cloud Shell, accédez à ~/code/cloud-run/create-collage
et examinez les fichiers du service create-collage.
Ce répertoire contient trois fichiers : package.json, index.js et le Dockerfile.
-
Cliquez sur Ouvrir le terminal.
-
Pour créer et déployer l'image Docker du service create-collage, exécutez les commandes suivantes dans Cloud Shell :
export REPO_NAME=image-app-repo
export REPO_REGION={{{project_0.default_region|set at lab start}}}
export COLLAGE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export COLLAGE_SERVICE_NAME=create-collage
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/create-collage
gcloud builds submit \
. \
--tag ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${COLLAGE_SERVICE_NAME}
gcloud config set run/region ${COLLAGE_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${COLLAGE_SERVICE_NAME} \
--image ${REPO_REGION}-docker.pkg.dev/${GOOGLE_CLOUD_PROJECT}/${REPO_NAME}/${COLLAGE_SERVICE_NAME} \
--no-allow-unauthenticated \
--memory=1Gi \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
Créer et déployer le service delete-image
Le service delete-image supprime la vignette du bucket des images générées et les métadonnées de l'image de la base de données.
-
Dans Cloud Shell, cliquez sur Ouvrir l'éditeur.
-
Dans l'éditeur Cloud Shell, accédez à ~/code/cloud-run/delete-image
et examinez les fichiers du service delete-image.
Ce répertoire ne contient que deux fichiers : package.json et index.js. Il n'y a pas de Dockerfile.
Au lieu de créer et de publier le conteneur manuellement, cet atelier s'appuie sur les buildpacks Google Cloud pour créer automatiquement le conteneur.
Notez également que le service analyse la requête en tant qu'événement CloudEvent. Eventarc envoie les événements au format CloudEvent standard.
-
Cliquez sur Ouvrir le terminal.
-
Pour créer et déployer le service delete-image dans Cloud Run à l'aide des buildpacks Google Cloud, exécutez les commandes suivantes dans Cloud Shell :
export DELETE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export DELETE_SERVICE_NAME=delete-image
export GENERATED_IMAGES_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
cd ~/code/cloud-run/delete-image
npm install
gcloud config set run/region ${DELETE_SERVICE_REGION}
gcloud config set run/platform managed
gcloud run deploy ${DELETE_SERVICE_NAME} \
--source . \
--no-allow-unauthenticated \
--max-instances=1 \
--update-env-vars GENERATED_IMAGES_BUCKET=${GENERATED_IMAGES_BUCKET}
gcloud run deploy vous avertit que vous devez créer un dépôt Docker Artifact Registry pour les images créées par les buildpacks Google Cloud.
-
Lorsque vous y êtes invité, saisissez Y
pour continuer.
Examiner les dépôts d'artefacts et les services Cloud Run
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Artifact Registry et cliquez sur Recherche, puis sur Artifact Registry.
Le dépôt que vous avez créé (image-app-repo) et celui créé par les buildpacks Google Cloud (cloud-run-source-deploy) se trouvent dans Artifact Registry.
-
Cliquez sur image-app-repo.
Les images Docker que vous venez de créer pour les services create-collage et create-thumbnail sont stockées dans image-app-repo.
-
Revenez à Artifact Registry > Dépôts, puis cliquez sur cloud-run-source-deploy.
Le dépôt contient l'image Docker delete-image qui a été créée automatiquement par les buildpacks Google Cloud.
-
Dans la console Google Cloud, accédez au menu de navigation (
), puis cliquez sur Cloud Run > Services.
Les trois services ont été déployés.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer le dépôt et déployer les services Cloud Run
Tâche 5 : Créer une fonction pour analyser la réponse de Cloud Vision
Dans cette tâche, vous allez créer une fonction Cloud Run pour analyser les données d'image renvoyées par l'API Cloud Vision.
-
Dans Cloud Shell, cliquez sur Ouvrir l'éditeur.
-
Dans l'éditeur Cloud, accédez à ~/code/cloud-functions/extract-image-metadata
et examinez les fichiers de la fonction extract-image-metadata.
Le service Node.js contient les fichiers index.js et package.json. Cloud Run Functions utilise automatiquement des buildpacks pour créer le conteneur. Vous n'avez donc pas besoin d'un Dockerfile.
-
Cliquez sur Ouvrir le terminal.
-
Pour déployer la fonction, exécutez la commande suivante dans Cloud Shell :
export EXTRACT_FUNCTION_REGION={{{project_0.default_region|set at lab start}}}
export EXTRACT_FUNCTION_NAME=extract-image-metadata
cd ~/code/cloud-functions/${EXTRACT_FUNCTION_NAME}
gcloud config set functions/region ${EXTRACT_FUNCTION_REGION}
gcloud functions deploy ${EXTRACT_FUNCTION_NAME} \
--gen2 \
--source . \
--runtime=nodejs20 \
--entry-point=extract_image_metadata \
--trigger-http \
--no-allow-unauthenticated
Remarque : Si le déploiement indique que les métadonnées du dépôt n'ont pas pu être récupérées, réessayez plusieurs fois jusqu'à ce que le déploiement de la fonction aboutisse.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Fonctions Cloud Run et cliquez sur Recherche, puis sur Fonctions Cloud Run.
La fonction extract-image-metadata a été déployée.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer la fonction pour analyser la réponse de Cloud Vision
Tâche 6 : Créer le workflow
Dans cette tâche, vous allez créer un workflow pour orchestrer les appels de service et d'API.
-
Dans Cloud Shell, cliquez sur Ouvrir l'éditeur.
-
Dans l'éditeur Cloud Shell, accédez à ~/code/workflows
et examinez le fichier YAML image-add-workflow.yaml.
Le workflow spécifie une série d'étapes à effectuer lors de son lancement. Voici les étapes sans journalisation :
-
init attribue des variables qui seront utilisées dans le workflow. bucket et filename sont remplis avec les valeurs transmises par Eventarc lorsque le workflow est appelé. projectId récupère la valeur d'ID du projet à partir d'une variable d'environnement automatiquement remplie pour un workflow.
-
imageAnalysisCall appelle l'API Cloud Vision pour analyser l'image importée.
-
extractImageMetadata appelle une fonction Cloud Run pour extraire les informations importantes de la réponse de l'appel d'API Cloud Vision.
-
checkSafety quitte le workflow lorsque l'API Cloud Vision détermine que l'image n'est pas sûre.
-
storeMetadata appelle l'API Firestore pour stocker les métadonnées de l'image.
-
getThumbnailService appelle un connecteur Cloud Run pour trouver l'URL du service Cloud Run create-thumbnail.
-
queueThumbnail utilise un connecteur Cloud Tasks pour créer une tâche permettant d'appeler de manière asynchrone le service de vignettes.
-
completed met fin au workflow et renvoie son identifiant d'exécution.
-
Cliquez sur Ouvrir le terminal.
-
Afin de créer un compte de service pour l'identité de workflow et d'ajouter des autorisations de base, exécutez les commandes suivantes :
export WORKFLOWS_SA=workflows-sa
gcloud iam service-accounts create ${WORKFLOWS_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/datastore.user"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/cloudtasks.enqueuer"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/logging.logWriter"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"
Les rôles autorisent les fonctionnalités suivantes :
-
roles/datastore.user permet au workflow d'écrire des documents dans Firestore.
-
roles/cloudtasks.enqueuer permet au workflow de créer une tâche Cloud Tasks.
-
roles/logging.logWriter permet au workflow de journaliser les variables dans Cloud Logging.
-
roles/iam.serviceAccountUser permet au compte de service d'emprunter l'identité d'un autre compte de service. Cloud Tasks peut ainsi envoyer la requête en utilisant l'identité du compte de service du workflow.
-
Pour ajouter des autorisations permettant d'appeler la fonction et le service Cloud Run, exécutez les commandes suivantes :
export WORKFLOWS_SA=workflows-sa
export THUMBNAIL_SERVICE_NAME=create-thumbnail
export THUMBNAIL_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export EXTRACT_FUNCTION_NAME=extract-image-metadata
gcloud functions add-iam-policy-binding ${EXTRACT_FUNCTION_NAME} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/cloudfunctions.invoker"
gcloud run services add-iam-policy-binding ${THUMBNAIL_SERVICE_NAME} \
--region=${THUMBNAIL_SERVICE_REGION} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.viewer"
gcloud run services add-iam-policy-binding ${THUMBNAIL_SERVICE_NAME} \
--region=${THUMBNAIL_SERVICE_REGION} \
--member="serviceAccount:${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Si la question "Would you like to run this command and additionally grant permission to invoke function [extract-image-metadata] (Y/n)?" (Voulez-vous exécuter cette commande et accorder l'autorisation d'appeler la fonction [extract-image-metadata] ? (O/n)) s'affiche à l'écran, saisissez Y
.
Ces rôles supplémentaires autorisent les fonctionnalités suivantes :
-
roles/cloudfunctions.invoker permet au workflow d'appeler la fonction qui extrait les métadonnées de la réponse de Cloud Vision.
-
roles/run.viewer permet au workflow d'interroger les informations sur le service de vignettes.
-
roles/run.invoker permet au compte de service du workflow d'appeler le service de vignettes. Le compte de service sera utilisé par Cloud Tasks lors de l'appel du service.
-
Pour déployer le workflow, exécutez la commande suivante :
export WORKFLOW_NAME=image-add-workflow
export WORKFLOW_REGION={{{project_0.default_region|set at lab start}}}
export WORKFLOWS_SA=workflows-sa
cd ~/code/workflows
gcloud workflows deploy ${WORKFLOW_NAME} \
--source=${WORKFLOW_NAME}.yaml \
--location=${WORKFLOW_REGION} \
--service-account="${WORKFLOWS_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"
Remarque : Si la commande échoue avec l'erreur "Workflows service agent does not exist" (L'agent de service Workflows n'existe pas), redéployez le workflow.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Workflows et cliquez sur Recherche, puis sur Workflows.
-
Cliquez sur l'icône Épingler à côté de Workflows.
-
Cliquez sur image-add-workflow, puis sur l'onglet Source.
Le volet de gauche affiche le code du workflow, et le volet de droite affiche une visualisation du flux pour les étapes du workflow.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer le workflow
Tâche 7 : Créer un déclencheur Eventarc pour démarrer le workflow
Dans cette tâche, vous allez créer un déclencheur Eventarc qui exécute le workflow lorsqu'un fichier est ajouté au bucket uploaded-images.
-
Afin de créer un compte de service pour le déclencheur du workflow et de lui accorder les autorisations nécessaires, exécutez la commande suivante dans Cloud Shell :
export WORKFLOW_TRIGGER_SA=workflow-trigger-sa
gcloud iam service-accounts create ${WORKFLOW_TRIGGER_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/workflows.invoker"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member "serviceAccount:${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/eventarc.eventReceiver"
Ces commandes créent un compte de service nommé workflow-trigger-sa, puis ajoutent des rôles pour recevoir des événements et appeler des workflows.
-
Pour autoriser le compte de service Cloud Storage à créer des événements, exécutez la commande suivante :
export CLOUD_STORAGE_SA="$(gcloud storage service-agent)"
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member="serviceAccount:${CLOUD_STORAGE_SA}" \
--role="roles/pubsub.publisher"
Ces commandes récupèrent le compte de service Cloud Storage et ajoutent l'autorisation de publier des événements Pub/Sub.
-
Pour créer le déclencheur, exécutez la commande suivante :
export WORKFLOW_TRIGGER_REGION={{{project_0.default_region|set at lab start}}}
export WORKFLOW_NAME=image-add-workflow
export WORKFLOW_REGION={{{project_0.default_region|set at lab start}}}
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export WORKFLOW_TRIGGER_SA=workflow-trigger-sa
gcloud eventarc triggers create image-add-trigger \
--location=${WORKFLOW_TRIGGER_REGION} \
--destination-workflow=${WORKFLOW_NAME} \
--destination-workflow-location=${WORKFLOW_REGION} \
--event-filters="type=google.cloud.storage.object.v1.finalized" \
--event-filters="bucket=${UPLOAD_BUCKET}" \
--service-account="${WORKFLOW_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com"
Ce déclencheur appellera le workflow chaque fois qu'un fichier sera écrit dans le bucket uploaded-images.
Remarque : Si vous recevez une erreur de propagation des autorisations lors de la création du déclencheur, il est possible qu'une autorisation n'ait pas encore été propagée vers Eventarc. Vous devriez parvenir à résoudre le problème en réessayant une ou deux fois de créer le déclencheur.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Créer le déclencheur Eventarc pour démarrer le workflow
Tâche 8 : Tester le workflow d'ajout d'image
Dans cette tâche, vous allez tester les étapes qui se déroulent lorsqu'une image est ajoutée au bucket uploaded-images.
-
Pour importer une image dans le bucket uploaded-images, exécutez les commandes suivantes :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=neon.jpg
gcloud storage cp ~/code/images/${IMAGE_NAME} gs://${UPLOAD_BUCKET}
Une fois l'importation terminée, Eventarc la détecte et lance le workflow.
-
Dans la console Google Cloud, accédez au menu de navigation (
), puis cliquez sur Workflows > Workflows.
-
Cliquez sur image-add-workflow, puis sur l'onglet Exécutions.
Une exécution de workflow devrait rapidement apparaître.
Remarque : L'exécution peut mettre une minute ou deux à démarrer.
-
Cliquez sur l'ID d'exécution pour ouvrir la page Détails de l'exécution.
Cette page affiche les détails de l'exécution du workflow.
Le volet "Entrée" affiche le contenu de l'événement Cloud Storage envoyé par le déclencheur Eventarc.
Le volet "Sortie" affiche les valeurs renvoyées à la fin du workflow.
Le volet "Journaux" affiche les entrées de journal créées par le workflow.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Fonctions Cloud Run et cliquez sur Recherche, puis sur Fonctions Cloud Run.
-
Cliquez sur extract-image-metadata.
Ce tableau de bord affiche des détails sur la fonction utilisée pour extraire les informations de la réponse de Cloud Vision.
-
Cliquez sur l'onglet Journaux.
Les données journalisées lors de l'exécution de la fonction se trouvent dans cet onglet. Les étiquettes et le texte de l'image ont été journalisés.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Firestore et cliquez sur Recherche, puis sur Firestore.
-
Cliquez sur (default).
La collection d'images doit afficher un document nommé neon.jpg écrit par le workflow. Les étiquettes associées à l'image et le texte trouvé dans l'image sont affichés.
-
Dans la console Google Cloud, accédez au menu de navigation (
). Ensuite, cliquez sur Cloud Run > Services, puis sur create-thumbnail.
Ce tableau de bord affiche des informations sur le service create-thumbnail.
-
Cliquez sur l'onglet Journaux.
Les données journalisées lors de l'exécution du service se trouvent dans cet onglet.
-
Dans Cloud Shell, exécutez les commandes suivantes :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=neon.jpg
echo "uploaded image: https://storage.googleapis.com/${UPLOAD_BUCKET}/${IMAGE_NAME}"
echo "generated image: https://storage.googleapis.com/${GENERATED_BUCKET}/${IMAGE_NAME}"
echo "Listing of generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}
Le bucket generated-images doit contenir une vignette créée par le service create-thumbnail. Vous pouvez cliquer sur les liens présents dans Cloud Shell pour ouvrir un nouvel onglet et afficher les images importées et générées.
Remarque : L'image générée peut mettre un petit peu de temps à apparaître dans le bucket et la liste.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Tester le workflow d'ajout d'image
Tâche 9 : Ajouter un job planifié pour créer un montage
Dans cette tâche, vous allez créer un job Cloud Scheduler afin de créer régulièrement un montage des photos importées le plus récemment.
Importer des images
-
Pour importer d'autres images dans le bucket uploaded-images, exécutez les commandes suivantes :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
gcloud storage cp ~/code/images/alley.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/desktop.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/rainbow.jpg \
gs://${UPLOAD_BUCKET}
gcloud storage cp ~/code/images/vegas.jpg \
gs://${UPLOAD_BUCKET}
Le workflow s'exécute pour chaque image, ce qui génère une vignette pour chaque image.
-
Pour créer un compte de service permettant d'appeler le service create-collage, exécutez les commandes suivantes :
export COLLAGE_SCHED_SA=collage-schedule-sa
export COLLAGE_SERVICE=create-collage
export COLLAGE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
gcloud iam service-accounts create ${COLLAGE_SCHED_SA}
gcloud run services add-iam-policy-binding ${COLLAGE_SERVICE} \
--region=${COLLAGE_SERVICE_REGION} \
--member="serviceAccount:${COLLAGE_SCHED_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
-
Pour récupérer l'URL du service create-collage, exécutez la commande suivante dans Cloud Shell :
export SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export SERVICE_NAME=create-collage
gcloud run services describe ${SERVICE_NAME} \
--platform managed \
--region ${SERVICE_REGION} \
--format 'value(status.url)'
Copiez l'URL dans le presse-papiers. Vous en aurez besoin pour créer le job planifié.
-
Dans la barre de titre de la console Google Cloud, accédez au champ Recherche. Ensuite, saisissez Cloud Scheduler et cliquez sur Recherche, puis sur Cloud Scheduler.
-
Cliquez sur + Créer un job.
-
Spécifiez les paramètres de planification suivants :
Propriété |
Valeur |
Nom |
collage-schedule |
Région |
Sélectionnez
|
Fréquence |
* * * * * |
Fuseau horaire |
Recherchez UTC, puis sélectionnez UTC (temps universel coordonné)
|
La fréquence spécifie la planification au format unix-cron. * * * * * spécifie que le job s'exécutera toutes les minutes.
La fréquence "toutes les minutes" est choisie pour faciliter les tests.
-
Cliquez sur Continuer, puis sélectionnez HTTP dans Type de cible.
-
Spécifiez les paramètres d'exécution suivants :
Propriété |
Valeur |
URL |
Collez l'URL du service create-collage |
Méthode HTTP |
Sélectionnez POST
|
En-tête d'autorisation |
Sélectionnez Ajouter un jeton OIDC
|
Compte de service |
Sélectionnez collage-schedule-sa
|
Audience |
Collez l'URL du service create-collage |
-
Cliquez sur Continuer, puis sur Créer.
Le job collage-schedule s'affiche sur la page des jobs Cloud Scheduler.
Le job devrait s'exécuter en moins d'une minute.
-
Cliquez sur Actualiser jusqu'à ce qu'une coche s'affiche pour le job collage-schedule, ce qui indique sa réussite.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Ajouter un job planifié pour créer le montage
-
Dans Cloud Shell, exécutez les commandes suivantes :
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=collage.png
echo "generated collage: https://storage.googleapis.com/${GENERATED_BUCKET}/${IMAGE_NAME}"
echo "Listing of generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}
Le bucket generated-images doit maintenant inclure le fichier collage.png. Vous pouvez cliquer sur le lien "generated collage" (Montage généré) dans Cloud Shell pour ouvrir un nouvel onglet et afficher le montage.
Un fichier copié dans Cloud Storage est disponible dès que le processus d'importation est terminé. Le lien devrait donc fonctionner immédiatement après la fin de l'exécution du job planifié. Lorsque vous listez le contenu du bucket, il est possible que le fichier n'apparaisse pas tout de suite.
Tâche 10 : Déclencher un service pour supprimer des fichiers image et des métadonnées
Dans cette tâche, vous allez créer un déclencheur Eventarc pour supprimer la vignette associée et le document Firestore lorsqu'une image est supprimée du bucket uploaded-images.
Créer un compte de service et gérer les rôles
-
Afin de créer un compte de service pour le déclencheur delete-image et de lui accorder les autorisations nécessaires, exécutez la commande suivante dans Cloud Shell :
export DELETE_TRIGGER_SA=delete-image-trigger-sa
export DELETE_SERVICE_REGION={{{project_0.default_region|set at lab start}}}
export DELETE_SERVICE=delete-image
gcloud iam service-accounts create ${DELETE_TRIGGER_SA}
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
--member "serviceAccount:${DELETE_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/eventarc.eventReceiver"
gcloud run services add-iam-policy-binding ${DELETE_SERVICE} \
--region=${DELETE_SERVICE_REGION} \
--member="serviceAccount:${DELETE_TRIGGER_SA}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--role="roles/run.invoker"
Ces commandes créent un compte de service nommé delete-image-trigger-sa, puis ajoutent des autorisations pour recevoir des événements et appeler le service delete-image.
-
Dans la console Google Cloud, accédez au menu de navigation (
). Ensuite, cliquez sur Cloud Run, puis sur delete-image.
-
Sur la page d'informations sur le service, cliquez sur l'onglet Déclencheurs.
-
Cliquez sur + Ajouter un déclencheur, puis sélectionnez Déclencheur Cloud Storage.
-
Spécifiez les paramètres de déclencheur suivants :
Propriété |
Valeur |
Nom du déclencheur |
image-delete-trigger |
Type d'événement |
Sélectionnez google.cloud.storage.object.v1.deleted
|
Bucket |
Cliquez sur Parcourir, sélectionnez le bucket uploaded-images, puis cliquez sur Sélectionner
|
Compte de service |
Sélectionnez le compte de service delete-image-trigger-sa
|
Chemin de l'URL du service |
/ |
-
Si vous êtes invité à attribuer un rôle à Pub/Sub, cliquez sur Accorder.
-
Cliquez sur Enregistrer le déclencheur.
Ce déclencheur appellera le service delete-image chaque fois qu'un fichier sera supprimé du bucket uploaded-images.
Remarque : Si vous obtenez un message d'erreur indiquant qu'une région ne respecte pas une contrainte sur la ressource de déclencheur, il est possible que vous ayez sélectionné le mauvais bucket Cloud Storage. Réessayez d'effectuer le processus de création et confirmez la sélection du bucket uploaded-images.
Cliquez sur Vérifier ma progression pour valider l'objectif.
Déclencher un service pour supprimer des fichiers image et des métadonnées
Tester la suppression d'image
-
Pour afficher les détails d'une image figurant dans les buckets Cloud Storage et le document correspondant dans Firestore, exécutez les commandes suivantes :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
echo "Listing of image in uploaded-images bucket:"
gcloud storage ls gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
echo "Listing of image in generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}/${IMAGE_NAME}
echo "Image document in Firestore:"
curl -q -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-X GET "https://firestore.googleapis.com/v1/projects/${GOOGLE_CLOUD_PROJECT}/databases/(default)/documents/images/${IMAGE_NAME}"
Ces commandes affichent les détails Cloud Storage et Firestore d'une image donnée. Nous allons ensuite supprimer cette image.
-
Pour supprimer une image du bucket uploaded-images, exécutez la commande suivante :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
gcloud storage rm gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
Eventarc détectera le fichier supprimé et appellera le service image-delete, qui supprimera la vignette et le document Firestore.
-
Pour vérifier si la vignette et le document Firestore ont bien été supprimés, exécutez les mêmes commandes que précédemment :
export UPLOAD_BUCKET=uploaded-images-${GOOGLE_CLOUD_PROJECT}
export GENERATED_BUCKET=generated-images-${GOOGLE_CLOUD_PROJECT}
export IMAGE_NAME=vegas.jpg
echo "Listing of image in uploaded-images bucket:"
gcloud storage ls gs://${UPLOAD_BUCKET}/${IMAGE_NAME}
echo "Listing of image in generated-images bucket:"
gcloud storage ls gs://${GENERATED_BUCKET}/${IMAGE_NAME}
echo "Image document in Firestore:"
curl -q -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://firestore.googleapis.com/v1/projects/${GOOGLE_CLOUD_PROJECT}/databases/(default)/documents/images/${IMAGE_NAME}"
Les éléments ont été supprimés.
-
Dans la console Google Cloud, accédez au menu de navigation (
). Ensuite, cliquez sur Cloud Run > Services, puis sur delete-image.
-
Cliquez sur Journaux.
Les journaux du service delete-image indiquent que la vignette a été supprimée du bucket generated-images et que le document Firestore a été supprimé de la base de données.
Félicitations !
Vous avez utilisé Eventarc pour déclencher des services et des workflows. Vous avez orchestré des services et des API à l'aide de Workflows. Vous avez créé et utilisé une file d'attente de tâches distribuées à l'aide de Cloud Tasks. Enfin, vous avez créé un job pour exécuter un service à l'aide de Cloud Scheduler.
Étapes suivantes et informations supplémentaires
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
- 1 étoile = très insatisfait(e)
- 2 étoiles = insatisfait(e)
- 3 étoiles = ni insatisfait(e), ni satisfait(e)
- 4 étoiles = satisfait(e)
- 5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2024 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms de société et de produit peuvent être des marques des sociétés auxquelles ils sont associés.