Ce tutoriel explique comment utiliser Eventarc pour créer un pipeline de traitement qui planifie des requêtes sur un ensemble de données BigQuery public, génère des graphiques basés sur les données et partage des liens vers les graphiques par e-mail.
Objectifs
Dans ce tutoriel, vous allez créer et déployer trois services Cloud Run qui permettent d'autoriser l'accès non authentifié et de recevoir des événements à l'aide d'Eventarc :
- Exécuteur de requêtes : déclenché lorsque les tâches Cloud Scheduler publient un message dans un sujet Pub/Sub, ce service extrait les données d'un ensemble de données public sur la COVID-19 à l'aide de l'API BigQuery et enregistre les résultats dans une nouvelle table BigQuery.
- Créateur de graphiques : déclenché lorsque le service d'exécution de requêtes publie un message dans un sujet Pub/Sub, ce service génère des graphiques à l'aide de la bibliothèque de traçage Python Matplotlib et les enregistre dans un bucket Cloud Storage.
- Système d'alerte : déclenché par les journaux d'audit lorsque le service de création de graphiques stocke un graphique dans un bucket Cloud Storage, ce service utilise le service de messagerie SendGrid pour envoyer des liens vers les graphiques à une adresse e-mail.
Le schéma suivant illustre l'architecture générale :
Coûts
Ce tutoriel utilise 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
Certaines étapes de ce document risquent de ne pas fonctionner correctement si votre organisation applique des contraintes à votre environnement Google Cloud. Dans ce cas, vous ne pourrez peut-être pas effectuer des tâches telles que la création d'adresses IP publiques ou de clés de compte de service. Si vous effectuez une requête qui renvoie une erreur concernant des contraintes, consultez la section Développer des applications dans un environnement Google Cloud limité.
- 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.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activer les API Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
-
Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.
-
Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.
-
Activer les API Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
- Mettez à jour les composants gcloud :
gcloud components update
- Connectez-vous à votre compte :
gcloud auth login
- Sélectionnez Google Cloud Storage, puis activez les types de journaux Lecture administrateur, Lecture de données et Écriture de données :
- Attribuez le rôle
eventarc.eventReceiver
au compte de service Compute Engine :export PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')" gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com \ --role='roles/eventarc.eventReceiver'
- Si vous avez activé le compte de service Pub/Sub le 8 avril 2021 ou avant cette date, attribuez le rôle
iam.serviceAccountTokenCreator
au compte de service Pub/Sub :gcloud projects add-iam-policy-binding $(gcloud config get-value project) \ --member="serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com"\ --role='roles/iam.serviceAccountTokenCreator'
- Définissez les valeurs par défaut utilisées dans ce tutoriel :
export REGION=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Remplacez REGION par un emplacement Eventarc compatible de votre choix.
- Téléchargez et installez l'outil de gestion du code source Git.
Créer une clé API SendGrid
SendGrid est un fournisseur de messagerie dans le cloud qui vous permet d'envoyer des e-mails, sans avoir à gérer de serveurs de messagerie.
- Connectez-vous à Sendgrid et accédez à Paramètres > Clés API.
- Cliquez sur Créer la clé API.
- Sélectionnez les autorisations pour la clé. La clé a besoin au minimum de l'autorisation d'envoi d'e-mails pour envoyer des e-mails.
- Cliquez sur Enregistrer pour créer la clé.
- SendGrid génère une nouvelle clé. Il s'agit de la seule copie de la clé. Assurez-vous de la copier et de l'enregistrer pour plus tard.
Créer un bucket Cloud Storage
Créez un bucket Cloud Storage pour enregistrer les graphiques. Assurez-vous que le bucket et les graphiques sont accessibles au public, et qu'ils se trouvent dans la même région que votre service Cloud Run :
export BUCKET="$(gcloud config get-value core/project)-charts" gsutil mb -l $(gcloud config get-value run/region) gs://${BUCKET} gsutil uniformbucketlevelaccess set on gs://${BUCKET} gsutil iam ch allUsers:objectViewer gs://${BUCKET}
Déployer le système d'alerte
Déployez un service Cloud Run qui reçoit les événements du créateur de graphiques et utilise SendGrid pour envoyer des liens vers les graphiques générés par e-mail.
Clonez le dépôt GitHub et accédez au répertoire
notifier/python
:git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
Créez et transférez l'image de conteneur :
export SERVICE_NAME=notifier docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
Déployez l'image de conteneur dans Cloud Run, en transmettant une adresse à laquelle envoyer des e-mails et la clé API SendGrid :
export TO_EMAILS=EMAIL_ADDRESS export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars TO_EMAILS=${TO_EMAILS},SENDGRID_API_KEY=${SENDGRID_API_KEY},BUCKET=${BUCKET} \ --allow-unauthenticated
Remplacez l'élément suivant :
- EMAIL_ADDRESS par une adresse e-mail à laquelle envoyer les liens vers les graphiques générés.
- YOUR_SENDGRID_API_KEY par la clé API SendGrid que vous avez notée précédemment.
Lorsque l'URL du service s'affiche, cela signifie que le déploiement est terminé.
Créer un déclencheur pour le système d'alerte
Le déclencheur Eventarc du système d'alerte déployé sur Cloud Run filtre les journaux d'audit Cloud Storage dont le nom de la méthode est storage.objects.create
.
Créez le déclencheur :
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.audit.log.v1.written" \ --event-filters="serviceName=storage.googleapis.com" \ --event-filters="methodName=storage.objects.create" \ --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com
Cette action crée un déclencheur appelé
trigger-notifier
.
Déployer le service de création de graphiques
Déployez un service Cloud Run qui reçoit les événements de l'exécuteur de requêtes, récupère les données d'une table BigQuery pour un pays spécifique, puis génère un graphique basé sur les données à l'aide de Matplotlib. Le graphique est importé dans un bucket Cloud Storage.
Accédez au répertoire
chart-creator/python
:cd ../../chart-creator/python
Créez et transférez l'image de conteneur :
export SERVICE_NAME=chart-creator docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
Déployez l'image de conteneur dans Cloud Run, en transmettant le
BUCKET
:gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars BUCKET=${BUCKET} \ --allow-unauthenticated
Lorsque l'URL du service s'affiche, cela signifie que le déploiement est terminé.
Créer un déclencheur pour le service de création de graphiques
Le déclencheur Eventarc du service de création de graphiques déployé sur Cloud Run filtre les messages publiés dans un sujet Pub/Sub.
Créez le déclencheur :
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Cette action crée un déclencheur appelé
trigger-chart-creator
.Définissez la variable d'environnement du sujet Pub/Sub.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
Déployer le service d'exécution de requêtes
Déployez un service Cloud Run qui reçoit les événements Cloud Scheduler, extrait les données d'un ensemble de données public sur la COVID-19 et enregistre les résultats dans une nouvelle table BigQuery.
Accédez au répertoire
processing-pipelines
:cd ../../..
Créez et transférez l'image de conteneur :
export SERVICE_NAME=query-runner docker build -t gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 -f bigquery/${SERVICE_NAME}/csharp/Dockerfile . docker push gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1
Déployez l'image de conteneur dans Cloud Run, en transmettant
PROJECT_ID
etTOPIC_QUERY_COMPLETED
:gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \ --update-env-vars PROJECT_ID=$(gcloud config get-value project),TOPIC_ID=${TOPIC_QUERY_COMPLETED} \ --allow-unauthenticated
Lorsque l'URL du service s'affiche, cela signifie que le déploiement est terminé.
Créer un déclencheur pour le service d'exécution de requêtes
Le déclencheur Eventarc du service d'exécution de requêtes déployé sur Cloud Run filtre les messages publiés dans un sujet Pub/Sub.
Créez le déclencheur :
gcloud eventarc triggers create trigger-${SERVICE_NAME} \ --destination-run-service=${SERVICE_NAME} \ --destination-run-region=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished"
Cette action crée un déclencheur appelé
trigger-query-runner
.Définissez une variable d'environnement pour le sujet Pub/Sub.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)')
Planifier les tâches
Le pipeline de traitement est déclenché par deux tâches Cloud Scheduler.
Créez une application App Engine requise par Cloud Scheduler et spécifiez un emplacement approprié :
export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
Créez deux tâches Cloud Scheduler qui publient un sujet Pub/Sub une fois par jour :
gcloud scheduler jobs create pubsub cre-scheduler-uk \ --schedule="0 16 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \ --schedule="0 17 * * *" \ --topic=${TOPIC_QUERY_SCHEDULED} \ --message-body="Cyprus"
La planification est spécifiée au format unix-cron. Par exemple,
0 16 * * *
signifie que les tâches s'exécutent tous les jours à 16:00 UTC.
Exécuter le pipeline
Tout d'abord, vérifiez que tous les déclencheurs ont bien été créés :
gcloud eventarc triggers list
La sortie devrait ressembler à ce qui suit :
NAME TYPE DESTINATION_RUN_SERVICE DESTINATION_RUN_PATH ACTIVE trigger-chart-creator google.cloud.pubsub.topic.v1.messagePublished chart-creator Yes trigger-notifier google.cloud.audit.log.v1.written notifier Yes trigger-query-runner google.cloud.pubsub.topic.v1.messagePublished query-runner Yes
Récupérez les ID de tâches Cloud Scheduler :
gcloud scheduler jobs list
La sortie devrait ressembler à ce qui suit :
ID LOCATION SCHEDULE (TZ) TARGET_TYPE STATE cre-scheduler-cy us-central1 0 17 * * * (Etc/UTC) Pub/Sub ENABLED cre-scheduler-uk us-central1 0 16 * * * (Etc/UTC) Pub/Sub ENABLED
Bien que l'exécution des tâches soit planifiée tous les jours à 16h et 17h, vous pouvez également les exécuter manuellement :
gcloud scheduler jobs run cre-scheduler-cy gcloud scheduler jobs run cre-scheduler-uk
Au bout de quelques minutes, vérifiez que le bucket Cloud Storage contient deux graphiques :
gsutil ls gs://${BUCKET}
La sortie devrait ressembler à ce qui suit :
gs://BUCKET/chart-cyprus.png gs://BUCKET/chart-unitedkingdom.png
Félicitations ! Vous devez également recevoir deux e-mails contenant les liens vers les graphiques.
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 le service Cloud Run que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE_NAME
Où
SERVICE_NAME
est le nom de service que vous avez choisi.Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.
Supprimez les configurations gcloud CLI par défaut que vous avez ajoutées lors de la configuration du tutoriel.
Exemple :
gcloud config unset run/region
ou
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
- Supprimez le déclencheur Eventarc :
gcloud eventarc triggers delete TRIGGER_NAME
RemplacezTRIGGER_NAME
par le nom de votre déclencheur.
- Supprimez l'image de conteneur nommée
gcr.io/PROJECT_ID/SERVICE_NAME
de Container Registry.
- Supprimez le déclencheur Eventarc :