Vous pouvez utiliser Workflows pour exécuter une tâche Cloud Run dans le cadre d'un workflow qui effectue un traitement de données plus complexe ou orchestre un système de tâches existantes.
Ce tutoriel explique comment utiliser Workflows pour exécuter un job Cloud Run qui traite les données d'événement stockées dans un bucket Cloud Storage. Le stockage de la charge utile de l'événement dans un bucket Cloud Storage vous permet de chiffrer les données à l'aide de clés de chiffrement gérées par le client, ce qui n'est pas possible si vous transmettez les données d'événement en tant que variables d'environnement à la tâche Cloud Run.
Le schéma suivant présente une vue d'ensemble:
Objectifs
Au cours de ce tutoriel, vous allez :
- Créez une tâche Cloud Run qui traite les données d'événement stockées dans un bucket Cloud Storage.
- Déployer un workflow qui :
- Reçoit un événement en tant qu'argument.
- Écrit les données de charge utile de l'événement dans le bucket Cloud Storage.
- Utilise le connecteur de l'API Cloud Run Admin pour exécuter le job Cloud Run.
- Créez un sujet Pub/Sub pour y publier un message. Ce tutoriel utilise un événement Pub/Sub comme exemple d'acheminement d'événements à l'aide de Workflows, en enregistrant l'événement dans Cloud Storage afin qu'un job Cloud Run puisse traiter les données d'événement.
- Créez un déclencheur Eventarc qui exécute le workflow lorsqu'un message est écrit dans le sujet Pub/Sub.
- Déclencher le workflow en écrivant un message dans le sujet Pub/Sub.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
Avant de commencer ce tutoriel, vous devez activer des API spécifiques et créer un compte de service géré par l'utilisateur. Vous devez attribuer au compte de service les rôles et les autorisations nécessaires pour pouvoir acheminer des événements à l'aide d'un déclencheur Eventarc et exécuter un workflow.
Console
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Créez un compte de service :
-
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Accéder à la page "Créer un compte de service" - Sélectionnez votre projet.
-
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for quickstart
. - Cliquez sur Créer et continuer.
-
Attribuez les rôles suivants au compte de service : Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
Pour attribuer un rôle, trouvez la liste Sélectionner un rôle, puis sélectionnez le rôle.
Pour attribuer des rôles supplémentaires, cliquez sur
Ajouter un autre rôle et ajoutez chaque rôle supplémentaire. - Cliquez sur Continuer.
-
Cliquez sur OK pour terminer la création du compte de service.
-
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows.
-
Créez un compte de service :
-
Dans la console Google Cloud, accédez à la page Créer un compte de service.
Accéder à la page "Créer un compte de service" - Sélectionnez votre projet.
-
Dans le champ Nom du compte de service, saisissez un nom. La console Google Cloud remplit le champ ID du compte de service en fonction de ce nom.
Dans le champ Description du compte de service, saisissez une description. Exemple :
Service account for quickstart
. - Cliquez sur Créer et continuer.
-
Attribuez les rôles suivants au compte de service : Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Storage Object Creator, Workflows Invoker.
Pour attribuer un rôle, trouvez la liste Sélectionner un rôle, puis sélectionnez le rôle.
Pour attribuer des rôles supplémentaires, cliquez sur
Ajouter un autre rôle et ajoutez chaque rôle supplémentaire. - Cliquez sur Continuer.
-
Cliquez sur OK pour terminer la création du compte de service.
-
- Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou avant cette date, pour accepter les requêtes push Pub/Sub authentifiées, accordez le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator
) au compte de service géré par Google. Sinon, ce rôle est attribué par défaut :- Dans la console Google Cloud, accédez à la page IAM.
- Cochez la case Inclure les attributions de rôles fournies par Google.
- Dans la colonne Nom, recherchez le compte de service Cloud Pub/Sub, puis cliquez sur Modifier le compte principal dans la ligne correspondante.
- Cliquez sur Ajouter un rôle ou Ajouter un autre rôle.
- Dans la liste Sélectionner un rôle, filtrez sur Créateur de jetons du compte de service, puis sélectionnez le rôle.
- Cliquez sur Enregistrer.
- Dans la console Google Cloud, accédez à la page IAM.
-
Dans la console Google Cloud, activez Cloud Shell.
En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Cloud Shell est compatible avec les étapes de ligne de commande de ce tutoriel.
gcloud
- Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows :
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Configurez l'authentification :
-
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME
: nom du compte de service.PROJECT_ID
: ID du projet dans lequel vous avez créé le compte de service.ROLE
: rôle à accorder
-
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Créez ou sélectionnez un projet Google Cloud.
-
Créez un projet Google Cloud :
gcloud projects create PROJECT_ID
Remplacez
PROJECT_ID
par le nom du projet Google Cloud que vous créez. -
Sélectionnez le projet Google Cloud que vous avez créé :
gcloud config set project PROJECT_ID
Remplacez
PROJECT_ID
par le nom de votre projet Google Cloud.
-
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activer les API Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows :
gcloud services enable cloudbuild.googleapis.com
run.googleapis.com storage.googleapis.com eventarc.googleapis.com workflows.googleapis.com -
Configurez l'authentification :
-
Créez le compte de service :
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Remplacez
SERVICE_ACCOUNT_NAME
par le nom que vous souhaitez donner au compte de service. -
Attribuez des rôles au compte de service. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/eventarc.eventReceiver, roles/logging.logWriter, roles/run.admin, roles/storage.objectCreator, roles/workflows.invoker
:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME
: nom du compte de service.PROJECT_ID
: ID du projet dans lequel vous avez créé le compte de service.ROLE
: rôle à accorder
-
- Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator
) au compte de service géré par Google pour accepter les requêtes push Pub/Sub authentifiées. Sinon, ce rôle est attribué par défaut :gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Remplacez PROJECT_NUMBER
par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :
gcloud projects describe PROJECT_ID --format='value(projectNumber)'
Créer un job Cloud Run
Ce tutoriel utilise un exemple de code disponible sur GitHub. Le script de déploiement crée une image de conteneur pour créer un job Cloud Run. Le script crée également un bucket Cloud Storage. La tâche Cloud Run lit toutes les données d'événement stockées dans le bucket Cloud Storage, puis les imprime.
Récupérez l'exemple de code en clonant le dépôt de l'exemple d'application sur votre ordinateur local:
git clone https://github.com/GoogleCloudPlatform/workflows-demos.git
Vous pouvez également télécharger l'exemple en tant que fichier ZIP.
Accédez au répertoire qui contient l'exemple de code :
cd workflows-demos/cloud-run-jobs-payload-gcs/message-payload-job
Créez la tâche Cloud Run en exécutant le script de déploiement:
./deploy-job.sh
Le script crée un bucket Cloud Storage nommé message-payload-PROJECT_ID
, où PROJECT_ID
correspond à l'ID de votre projet Google Cloud.
Un job Cloud Run nommé message-payload-job
est également créé.
Déployer un workflow qui exécute le job Cloud Run
Définissez et déployez un workflow qui exécute la tâche Cloud Run que vous venez de créer. Une définition de workflow est composée d'une série d'étapes décrites à l'aide de la syntaxe Workflows.
Le workflow reçoit un événement, enregistre les données de l'événement dans un bucket Cloud Storage, puis exécute une tâche Cloud Run pour traiter les données d'événement.
Console
Dans la console Google Cloud, accédez à la page Workflows:
Cliquez sur
Créer.Saisissez un nom pour le nouveau workflow, par exemple
message-payload-workflow
.Choisissez une région appropriée, par exemple
us-central1
.Dans le champ Compte de service, sélectionnez le compte de service que vous avez créé précédemment.
Le compte de service sert d'identité au workflow. Vous devez avoir déjà attribué les rôles suivants au compte de service:
- Administrateur Cloud Run: permet d'exécuter des tâches Cloud Run.
- Rédacteur de journaux: permet d'écrire des entrées de journal
- Créateur des objets Storage: permet de créer des objets dans Cloud Storage.
Cliquez sur Suivant.
Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow:
Cliquez sur Deploy (Déployer).
gcloud
Créez un fichier de code source pour votre workflow:
touch message-payload-workflow.yaml
Copiez la définition de workflow suivante dans
message-payload-workflow.yaml
:Déployez le workflow en saisissant la commande suivante :
gcloud workflows deploy message-payload-workflow \ --location=us-central1 \ --source=message-payload-workflow.yaml \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez les éléments suivants :
SERVICE_ACCOUNT_NAME
: nom du compte de service que vous avez créé précédemmentPROJECT_ID
: ID de votre projet Google Cloud
Le compte de service sert d'identité au workflow. Vous devez avoir déjà attribué les rôles suivants au compte de service:
roles/logging.logWriter
: permet d'écrire des entrées de journal.roles/run.admin
: permet d'exécuter des tâches Cloud Run.roles/storage.objectCreator
: permet de créer des objets dans Cloud Storage.
Il effectue les opérations suivantes:
Étape
init
: accepte un événement en tant qu'argument et définit les variables nécessaires.Étape
log_event
: crée une entrée de journal dans Cloud Logging à l'aide de la fonction sys.log.Étape
write_payload_to_gcs
: effectue une requête HTTPPOST
et écrit les données de charge utile de l'événement dans un fichier de bucket Cloud Storage.Étape
run_job_to_process_payload
: utilise la méthode du connecteur de l'API Cloud Run Admin,googleapis.run.v1.namespaces.jobs.run
, pour exécuter la tâche. Le bucket Cloud Storage et le nom du fichier de données sont transmis en tant que variables de remplacement du workflow à la tâche.Étape
finish
: renvoie des informations sur l'exécution de la tâche à la suite du workflow.
Créer un sujet Pub/Sub
Créez un sujet Pub/Sub pour y publier un message. Un événement Pub/Sub permet d'illustrer comment acheminer un événement à l'aide de Workflows et enregistrer l'événement dans Cloud Storage afin qu'un job Cloud Run puisse traiter les données d'événement.
Console
Dans la console Google Cloud, accédez à la page Sujets.
Cliquez sur
Créer un sujet.Dans le champ ID du sujet, saisissez un ID pour le sujet (par exemple,
message-payload-topic
).Conservez l'option Ajouter un abonnement par défaut.
Ne sélectionnez pas les autres options.
Cliquez sur Créer.
gcloud
Pour créer un sujet avec l'ID message-payload-topic
, exécutez la commande gcloud pubsub topics create
:
gcloud pubsub topics create message-payload-topic
Créer un déclencheur Eventarc pour acheminer les événements vers le workflow
Pour exécuter automatiquement le workflow, puis la tâche Cloud Run, créez un déclencheur Eventarc qui répond aux événements Pub/Sub et les achemine vers le workflow. Chaque fois qu'un message est écrit dans le sujet Pub/Sub, l'événement déclenche une exécution du workflow.
Console
Dans la console Google Cloud, accédez à la page Workflows:
Cliquez sur le nom de votre workflow, par exemple
message-payload-workflow
.Sur la page Workflow details (Détails du workflow), cliquez sur
Edit (Modifier).Dans la section Déclencheurs de la page Modifier le workflow, cliquez sur Ajouter un déclencheur > Eventarc.
Le volet Déclencheur Eventarc s'ouvre.
Dans le champ Nom du déclencheur, saisissez un nom pour le déclencheur, par exemple
message-payload-trigger
.Dans la liste Fournisseur d'événements, sélectionnez Cloud Pub/Sub.
Dans la liste Événement, sélectionnez google.cloud.pubsub.topic.v1.messagePublish.
Dans la liste Sélectionner un sujet Cloud Pub/Sub, sélectionnez le sujet Pub/Sub que vous avez créé précédemment.
Dans le champ Compte de service, sélectionnez le compte de service que vous avez créé précédemment.
Le compte de service sert d'identité au déclencheur. Vous devez avoir déjà attribué les rôles suivants au compte de service:
- Eventarc Event Receiver: permet de recevoir des événements
- Demandeur de workflows: permet d'exécuter des workflows
Cliquez sur Enregistrer le déclencheur.
Le déclencheur Eventarc apparaît désormais dans la section Déclencheurs de la page Modifier le workflow.
Cliquez sur Suivant.
Cliquez sur Déployer.
gcloud
Créez un déclencheur Eventarc en exécutant la commande suivante:
gcloud eventarc triggers create message-payload-trigger \ --location=us-central1 \ --destination-workflow=message-payload-workflow \ --destination-workflow-location=us-central1 \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_ID/topics/message-payload-topic \ --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projet Google CloudSERVICE_ACCOUNT_NAME
: nom du compte de service que vous avez créé précédemment.
Le compte de service sert d'identité au déclencheur. Vous devez avoir déjà attribué les rôles suivants au compte de service:
roles/eventarc.eventReceiver
: pour recevoir des événementsroles/workflows.invoker
: permet d'exécuter des workflows.
Déclencher le workflow
Testez le système de bout en bout en publiant un message dans le sujet Pub/Sub et en générant un événement. Pour en savoir plus, consultez la section Déclencher un workflow avec des événements ou des messages Pub/Sub.
Envoyer un message au sujet Pub/Sub pour générer un événement :
gcloud pubsub topics publish message-payload-topic --message="Hello World"
L'événement est acheminé vers le workflow qui consigne le message d'événement, enregistre les données d'événement dans le bucket Cloud Storage et exécute la tâche Cloud Run pour traiter les données enregistrées dans Cloud Storage. Cette opération peut prendre une minute.
Vérifiez que la tâche Cloud Run a été exécutée comme prévu en affichant ses exécutions:
gcloud run jobs executions list --job=message-payload-job
Vous devriez voir une nouvelle exécution de job dans le résultat.
Pour afficher les entrées de journal liées aux événements créées par le déclenchement du workflow, exécutez la commande suivante:
gcloud logging read "resource.type=cloud_run_job AND textPayload:Payload"
Recherchez une entrée de journal semblable à ceci :
textPayload: "Payload: {'message': {'data': 'SGVsbG8gV29ybGQ=', 'messageId': '8834108235224238',\ \ 'publishTime': '2023-09-20T17:07:52.921Z'}, 'subscription': 'projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741'}" ... resource: labels: job_name: message-payload-job location: us-central1 project_id: MY_PROJECT type: cloud_run_job textPayload: Processing message payload gs://message-payload-MY_PROJECT/8254002311197919.data.json
Vous pouvez vérifier que les résultats sont conformes à vos attentes en affichant les données d'événement dans l'objet de bucket Cloud Storage.
Récupérez le nom de votre bucket:
gsutil ls
Le résultat ressemble à ce qui suit :
gs://message-payload-PROJECT_ID/
Répertoriez les objets de votre bucket:
gsutil ls -r gs://message-payload-PROJECT_ID/**
La sortie devrait ressembler à ce qui suit :
gs://message-payload-PROJECT_ID/OBJECT_ID.data.json
Notez la valeur de
OBJECT_ID
afin de pouvoir l'utiliser à l'étape suivante.Téléchargez l'objet dans votre bucket sous forme de fichier:
gcloud storage cp gs://message-payload-PROJECT_ID/OBJECT_ID.data.json message-event.txt
Remplacez
OBJECT_ID
par l'ID renvoyé à l'étape précédente.Dans un éditeur de texte, ouvrez le fichier
message-event.txt
. Le corps de l'événement écrit dans le fichier doit se présenter comme suit:{ "message": { "data": "SGVsbG8gV29ybGQ=", "messageId": "8254002311197919", "publishTime": "2023-09-20T16:54:29.312Z" }, "subscription": "projects/MY_PROJECT/subscriptions/eventarc-us-central1-message-payload-trigger-sub-741" }
Notez que si vous décodez la valeur de données de
SGVsbG8gV29ybGQ=
à partir de son format Base64, "Hello World" est renvoyé.
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
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.
Pour supprimer le projet :
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources du tutoriel
Supprimez les ressources que vous avez créées dans ce tutoriel: