Créer un pipeline de traitement BigQuery pour Cloud Run for Anthos avec Eventarc

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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 pour Anthos s'exécutant dans un cluster Google Kubernetes Engine (GKE) et qui recevront des événements à l'aide d'Eventarc :

  1. 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.
  2. 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.
  3. 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 :

Pipeline de traitement BigQuery

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. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. 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.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. 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.

  4. Activer les API Cloud Build, Cloud Logging, Cloud Run for Anthos, Cloud Scheduler, Container Registry, Eventarc, GKE, Pub/Sub, and Resource Manager .

    Activer les API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. 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.

  7. Activer les API Cloud Build, Cloud Logging, Cloud Run for Anthos, Cloud Scheduler, Container Registry, Eventarc, GKE, Pub/Sub, and Resource Manager .

    Activer les API

  8. Installez et initialisez Google Cloud CLI.
  9. Mettez à jour les composants gcloud :
    gcloud components update
  10. Connectez-vous à votre compte :
    gcloud auth login
  11. Sélectionnez Google Cloud Storage, puis activez les types de journaux Lecture administrateur, Lecture de données et Écriture de données : Accéder à Cloud Audit Logging
  12. Définissez les valeurs par défaut utilisées dans ce tutoriel :
    CLUSTER_NAME=events-cluster
    CLUSTER_LOCATION=us-central1
    PROJECT_ID=PROJECT_ID
    
    gcloud config set project $PROJECT_ID
    gcloud config set run/region $CLUSTER_LOCATION
    gcloud config set run/cluster $CLUSTER_NAME
    gcloud config set run/cluster_location $CLUSTER_LOCATION
    gcloud config set run/platform gke
    gcloud config set eventarc/location $CLUSTER_LOCATION
    
    Remplacez PROJECT_ID par l'ID du projet.
  13. 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.

  1. Connectez-vous à Sendgrid et accédez à Paramètres > Clés API.
  2. Cliquez sur Créer la clé API.
  3. 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.
  4. Cliquez sur Enregistrer pour créer la clé.
  5. 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 cluster GKE pour Cloud Run pour Anthos

Créez un cluster avec Workload Identity activé afin qu'il puisse accéder aux services Google Cloud à partir des applications qui s'exécutent dans GKE. Workload Identity est également nécessaire pour transférer des événements à l'aide d'Eventarc.

  1. Créez un cluster GKE pour Cloud Run pour Anthos avec les modules complémentaires CloudRun, HttpLoadBalancing et HorizontalPodAutoscaling activés :

    gcloud beta container clusters create $CLUSTER_NAME \
      --addons=HttpLoadBalancing,HorizontalPodAutoscaling,CloudRun \
      --machine-type=n1-standard-4 \
      --enable-autoscaling --min-nodes=2 --max-nodes=10 \
      --no-issue-client-certificate --num-nodes=2  \
      --logging=SYSTEM,WORKLOAD \
      --monitoring=SYSTEM \
      --scopes=cloud-platform,logging-write,monitoring-write,pubsub \
      --zone us-central1 \
      --release-channel=rapid \
      --workload-pool=$PROJECT_ID.svc.id.goog
    
  2. Attendez quelques minutes que la création du cluster soit terminée. Au cours du processus, des avertissements peuvent s'afficher, que vous pouvez ignorer en toute sécurité. Une fois le cluster créé, le résultat ressemble à ce qui suit :

    Creating cluster ...done.
    Created [https://container.googleapis.com/v1beta1/projects/my-project/zones/us-central1/clusters/my-cluster].
    

Configurer le compte de service GKE

Configurez un compte de service GKE qui servira de compte de service Compute par défaut.

  1. Créez une liaison de gestion de l'authentification et des accès (IAM) entre les comptes de service :

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud iam service-accounts add-iam-policy-binding \
      --role roles/iam.workloadIdentityUser \
      --member "serviceAccount:$PROJECT_ID.svc.id.goog[default/default]" \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com
    
  2. Ajoutez l'annotation iam.gke.io/gcp-service-account au compte de service GKE à l'aide de l'adresse e-mail du compte de service Compute :

    kubectl annotate serviceaccount \
      --namespace default \
      default \
      iam.gke.io/gcp-service-account=$PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

Activer les destinations GKE

Pour permettre à Eventarc de gérer les ressources du cluster GKE, activez les destinations GKE et liez le compte de service Eventarc aux rôles requis.

  1. Activez les destinations GKE pour Eventarc :

    gcloud eventarc gke-destinations init
    
  2. Lorsque vous êtes invité à lier les rôles requis, saisissez y.

    Les rôles suivants sont liés :

    • roles/compute.viewer
    • roles/container.developer
    • roles/iam.serviceAccountAdmin

Créer un compte de service et des rôles d'accès liés

Avant de créer le déclencheur Eventarc, configurez un compte de service géré par l'utilisateur et attribuez-lui des rôles spécifiques afin qu'Eventarc puisse transférer les événements Pub/Sub.

  1. Créez un compte de service appelé TRIGGER_GSA :

    TRIGGER_GSA=eventarc-bigquery-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. Attribuez les rôles pubsub.subscriber, monitoring.metricWriter et eventarc.eventReceiver au compte de service :

    PROJECT_ID=$(gcloud config get-value project)
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
    --role "roles/eventarc.eventReceiver"
    

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 pour Anthos :

  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}
  

Cloner le dépôt

Clonez le dépôt GitHub.

  git clone https://github.com/GoogleCloudPlatform/eventarc-samples
  cd eventarc-samples/processing-pipelines

Déployer le système d'alerte

À partir du répertoire bigquery/notifier/python, déployez un service Cloud Run pour Anthos 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.

  1. Créez et transférez l'image de conteneur :

    pushd bigquery/notifier/python
    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
    popd
    
  2. Déployez l'image de conteneur dans Cloud Run pour Anthos, 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}
    

    Remplacez les éléments suivants :

    • 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 pour Anthos filtre les journaux d'audit Cloud Storage dont le nom de la méthode est storage.objects.create.

  1. Créez le déclencheur :

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
        --destination-gke-cluster=$CLUSTER_NAME \
        --destination-gke-location=$CLUSTER_LOCATION \
        --destination-gke-namespace=default \
        --destination-gke-service=$SERVICE_NAME \
        --destination-gke-path=/ \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Cette action crée un déclencheur appelé trigger-notifier-gke.

Déployer le service de création de graphiques

Depuis le répertoire bigquery/chart-creator/python, déployez un service Cloud Run pour Anthos 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.

  1. Créez et transférez l'image de conteneur :

    pushd bigquery/chart-creator/python
    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
    popd
    
  2. Déployez l'image de conteneur dans Cloud Run pour Anthos en transmettant BUCKET :

    gcloud run deploy ${SERVICE_NAME} \
      --image gcr.io/$(gcloud config get-value project)/${SERVICE_NAME}:v1 \
      --update-env-vars BUCKET=${BUCKET}
    

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 pour Anthos filtre les messages publiés dans un sujet Pub/Sub.

  1. Créez le déclencheur :

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Cette action crée un déclencheur appelé trigger-chart-creator-gke.

  2. Définissez la variable d'environnement du sujet Pub/Sub.

    export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)'))
    

Déployer le service d'exécution de requêtes

À partir du répertoire processing-pipelines, déployez un service Cloud Run pour Anthos qui reçoit les événements de Cloud Scheduler, récupère les données d'un ensemble de données public sur la COVID-19 et enregistre les résultats dans une nouvelle table BigQuery.

  1. 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
    
  2. Déployez l'image de conteneur dans Cloud Run pour Anthos en transmettant PROJECT_ID et TOPIC_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}
    

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 pour Anthos filtre les messages publiés dans un sujet Pub/Sub.

  1. Créez le déclencheur :

    gcloud eventarc triggers create trigger-${SERVICE_NAME}-gke \
      --destination-gke-cluster=$CLUSTER_NAME \
      --destination-gke-location=$CLUSTER_LOCATION \
      --destination-gke-namespace=default \
      --destination-gke-service=$SERVICE_NAME \
      --destination-gke-path=/ \
      --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
      --service-account=$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com
    

    Cette action crée un déclencheur appelé trigger-query-runner-gke.

  2. Définissez une variable d'environnement pour le sujet Pub/Sub.

    export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME}-gke --format='value(transport.pubsub.topic)')
    

Planifier les tâches

Le pipeline de traitement est déclenché par deux tâches Cloud Scheduler.

  1. Créez une application App Engine requise par Cloud Scheduler et spécifiez un emplacement approprié (par exemple, europe-west) :

    export APP_ENGINE_LOCATION=LOCATION
    gcloud app create --region=${APP_ENGINE_LOCATION}
    
  2. 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

  1. 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-gke  google.cloud.pubsub.topic.v1.messagePublished                                                  Yes
    trigger-notifier-gke       google.cloud.audit.log.v1.written                                                              Yes
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished                                                  Yes
    
  2. 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
    
  3. 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
    
  4. 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 :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. 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

  1. Supprimez tous les services Cloud Run pour Anthos que vous avez déployés dans ce tutoriel :

    gcloud run services delete SERVICE_NAME

    SERVICE_NAME est le nom de service que vous avez choisi.

    Vous pouvez également supprimer des services Cloud Run for Anthos depuis Google Cloud Console :

  2. Supprimez tous les déclencheurs Eventarc que vous avez créés dans ce tutoriel :

    gcloud eventarc triggers delete TRIGGER_NAME
    

    Remplacez TRIGGER_NAME par le nom de votre déclencheur.

  3. Supprimez les configurations gcloud par défaut que vous avez ajoutées lors de la configuration du tutoriel.

    gcloud config unset project
    gcloud config unset run/cluster
    gcloud config unset run/cluster_location
    gcloud config unset run/platform
    gcloud config unset eventarc/location
    gcloud config unset compute/zone
    

Étapes suivantes