BigQuery-Verarbeitungspipeline für Cloud Run for Anthos mit Eventarc erstellen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

In dieser Anleitung erfahren Sie, wie Sie mit Eventarc eine Verarbeitungspipeline erstellen, die Abfragen an ein öffentliches BigQuery-Dataset plant, Diagramme anhand der Daten generiert und Links zu den Diagrammen per E-Mail sendet.

Ziele

In dieser Anleitung werden Sie drei Cloud Run for Anthos-Dienste in einem Google Kubernetes Engine-Cluster (GKE) erstellen und bereitstellen, die Ereignisse mithilfe von Eventarc empfangen:

  1. Query Runner: Wird ausgelöst, wenn Cloud Scheduler-Jobs eine Nachricht in einem Pub/Sub-Thema veröffentlichen. Dieser Dienst verwendet die BigQuery API, um Daten aus einem öffentlichen COVID-19-Dataset abzurufen, und speichert die Ergebnisse in einer neuen BigQuery-Tabelle.
  2. Chart Creator: Wird ausgelöst, wenn der Query Runner-Dienst eine Nachricht in einem Pub/Sub-Thema veröffentlicht. Dieser Dienst generiert Diagramme über die Python-Plot-Bibliothek Matplotlib und speichert sie in einem Cloud Storage-Bucket.
  3. Notifier: Wird von Audit-Logs ausgelöst, wenn der Chart Creator-Dienst ein Diagramm in einem Cloud Storage-Bucket speichert. Dieser Dienst verwendet den E-Mail-Dienst SendGrid, um Links zu den Diagrammen an eine E-Mail-Adresse zu senden.

Im folgenden Diagramm ist die allgemeine Architektur dargestellt:

Grafik: BigQuery-Verarbeitungspipeline

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

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

    Aktivieren Sie die APIs

  5. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  6. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist.

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

    Aktivieren Sie die APIs

  8. Installieren und initialisieren Sie das Google Cloud CLI.
  9. Aktualisieren Sie die gcloud-Komponenten:
    gcloud components update
  10. Melden Sie sich mit Ihrem Konto an:
    gcloud auth login
  11. Wählen Sie Google Cloud Storage aus und aktivieren Sie die Logtypen Lesen durch Administrator, Daten lesen und Daten schreiben: Zur Seite "Cloud-Audit-Logging"
  12. Legen Sie die in dieser Anleitung verwendeten Standardwerte fest:
    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
    
    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
  13. Laden Sie das Git-Quellcodeverwaltungstool herunter und installieren Sie es.

SendGrid API-Schlüssel erstellen

SendGrid ist ein cloudbasierter E-Mail-Anbieter, mit dem Sie E-Mails senden können, ohne E-Mail-Server verwalten zu müssen.

  1. Melden Sie sich bei SendGrid an und rufen Sie Einstellungen > API-Schlüssel auf.
  2. Klicken Sie auf API-Schlüssel erstellen.
  3. Wählen Sie die Berechtigungen für den Schlüssel aus. Der Schlüssel muss mindestens die Berechtigungen E-Mails senden zum Senden von E-Mails haben.
  4. Klicken Sie auf Save, um den Schlüssel zu erstellen.
  5. SendGrid generiert einen neuen Schlüssel. Dies ist die einzige Kopie des Schlüssels. Kopieren Sie den Schlüssel daher und speichern Sie ihn für später.

GKE-Cluster für Cloud Run for Anthos erstellen

Erstellen Sie einen Cluster mit aktiviertem Workload Identity, damit er über Anwendungen, die in GKE ausgeführt werden, auf Google Cloud-Dienste zugreifen kann. Workload Identity ist auch erforderlich, um Ereignisse mithilfe von Eventarc weiterzuleiten.

  1. Erstellen Sie einen GKE-Cluster für Cloud Run for Anthos mit den aktivierten Add-ons CloudRun, HttpLoadBalancing und HorizontalPodAutoscaling:

    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. Warten Sie einige Minuten, bis der Cluster erstellt ist. Während dem Prozess werden möglicherweise Warnmeldungen angezeigt, die Sie ignorieren können. Wenn der Cluster erstellt wurde, sieht die Ausgabe in etwa so aus:

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

GKE-Dienstkonto konfigurieren

Konfigurieren Sie ein GKE-Dienstkonto, das als Standarddienstkonto für Compute fungieren soll.

  1. Erstellen Sie eine IAM-Bindung (Identitäts- und Zugriffsverwaltung) zwischen den Dienstkonten:

    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. Fügen Sie dem GKE-Dienstkonto unter Verwendung der E-Mail-Adresse des Compute-Dienstkontos die Annotation iam.gke.io/gcp-service-account hinzu:

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

GKE-Ziele aktivieren

Damit Eventarc Ressourcen im GKE-Cluster verwalten kann, aktivieren Sie GKE-Ziele und binden Sie das Eventarc-Dienstkonto an die erforderlichen Rollen.

  1. Aktivieren Sie GKE-Ziele für Eventarc:

    gcloud eventarc gke-destinations init
    
  2. Geben Sie bei der Aufforderung, die erforderlichen Rollen zu binden, y ein.

    Die folgenden Rollen sind gebunden:

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

Dienstkonto erstellen und Rollen für den Bindungszugriff erstellen

Bevor Sie den Eventarc-Trigger erstellen, richten Sie ein vom Nutzer verwaltetes Dienstkonto ein und weisen Sie ihm bestimmte Rollen zu, damit Eventarc Pub/Sub-Ereignisse weiterleiten kann.

  1. Erstellen Sie ein Dienstkonto mit dem Namen TRIGGER_GSA:

    TRIGGER_GSA=eventarc-bigquery-triggers
    gcloud iam service-accounts create $TRIGGER_GSA
  2. Weisen Sie dem Dienstkonto die Rollen pubsub.subscriber, monitoring.metricWriter und eventarc.eventReceiver zu:

    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"
    

Cloud Storage-Bucket erstellen

Erstellen Sie einen Cloud Storage-Bucket zum Speichern der Diagramme. Achten Sie darauf, dass der Bucket und die Diagramme öffentlich verfügbar sind und sich in derselben Region wie Ihr Cloud Run for Anthos-Dienst befinden:

  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}
  

Repository klonen

GitHub-Repository klonen.

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

Notifier-Dienst bereitstellen

Stellen Sie im Verzeichnis bigquery/notifier/python einen Cloud Run for Anthos-Dienst bereit, der Diagrammerstellerereignisse empfängt und SendGrid verwendet, um Links zu den generierten Diagrammen zu senden.

  1. Erstellen Sie das Container-Image und übertragen Sie es per Push:

    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. Stellen Sie das Container-Image für Cloud Run for Anthos bereit und übergeben Sie eine Adresse, an die E-Mails gesendet werden sollen, sowie den SendGrid API-Schlüssel an:

    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}
    

    Dabei gilt:

    • EMAIL_ADDRESS durch eine E-Mail-Adresse, um die Links zu den generierten Diagrammen zu senden
    • YOUR_SENDGRID_API_KEY durch den zuvor notierten SendGrid API-Schlüssel

Wenn die Dienst-URL angezeigt wird, wurde sie erfolgreich bereitgestellt.

Trigger für den Notifier-Dienst erstellen

Der Eventarc-Trigger für den Notifier-Dienst, der in Cloud Run for Anthos bereitgestellt wird, filtert nach Cloud Storage-Audit-Logs, wobei der Methodenname storage.objects.create lautet.

  1. Erstellen Sie den Trigger:

    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
    

    Dadurch wird ein Trigger mit dem Namen trigger-notifier-gke erstellt.

Chart Creator-Dienst bereitstellen

Stellen Sie im Verzeichnis bigquery/chart-creator/python einen Cloud Run for Anthos-Dienst bereit, der Abfrage-Runner-Ereignisse empfängt, Daten aus einer BigQuery-Tabelle für ein bestimmtes Land abruft und dann mithilfe von Matplotlib ein Diagramm aus den Daten erstellt. Das Diagramm wird in einen Cloud Storage-Bucket hochgeladen.

  1. Erstellen Sie das Container-Image und übertragen Sie es per Push:

    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. Stellen Sie das Container-Image für Cloud Run for Anthos bereit und übergeben Sie BUCKET:

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

Wenn die Dienst-URL angezeigt wird, wurde sie erfolgreich bereitgestellt.

Trigger für den Chart Creator-Dienst erstellen

Der Eventarc-Trigger für den Chart Creator-Dienst, der in Cloud Run for Anthos bereitgestellt wird, filtert nach Nachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden.

  1. Erstellen Sie den Trigger:

    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
    

    Dadurch wird ein Trigger mit dem Namen trigger-chart-creator-gke erstellt.

  2. Legen Sie die Umgebungsvariable für das Pub/Sub-Thema fest.

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

Query Runner-Dienst bereitstellen

Stellen Sie im Verzeichnis processing-pipelines einen Cloud Run for Anthos-Dienst bereit, der Cloud Scheduler-Ereignisse empfängt, Daten aus einem öffentlichen COVID-19-Dataset abruft und die Ergebnisse in einer neuen BigQuery-Tabelle speichert.

  1. Erstellen Sie das Container-Image und übertragen Sie es per Push:

    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. Stellen Sie das Container-Image für Cloud Run for Anthos bereit und übergeben Sie PROJECT_ID und 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}
    

Wenn die Dienst-URL angezeigt wird, wurde sie erfolgreich bereitgestellt.

Trigger für den Query Runner-Dienst erstellen

Der Eventarc-Trigger für den Query Runner-Dienst, der in Cloud Run for Anthos bereitgestellt wird, filtert nach Nachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden.

  1. Erstellen Sie den Trigger:

    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
    

    Dadurch wird ein Trigger mit dem Namen trigger-query-runner-gke erstellt.

  2. Legen Sie eine Umgebungsvariable für das Pub/Sub-Thema fest.

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

Jobs planen

Die Verarbeitungspipeline wird durch zwei Cloud Scheduler-Jobs ausgelöst.

  1. Erstellen Sie eine App Engine-Anwendung, die für Cloud Scheduler erforderlich ist, und geben Sie einen geeigneten Speicherort an (z. B. europe-west):

    export APP_ENGINE_LOCATION=LOCATION
    gcloud app create --region=${APP_ENGINE_LOCATION}
    
  2. Erstellen Sie zwei Cloud Scheduler-Jobs, die einmal täglich Veröffentlichungen an ein Pub/Sub-Thema senden:

    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"
    

    Der Zeitplan wird im unix-cron-Format angegeben. 0 16 * * * bedeutet beispielsweise, dass die Jobs täglich um 16:00 Uhr (UTC) ausgeführt werden.

Pipeline ausführen

  1. Prüfen Sie, ob alle Trigger erfolgreich erstellt wurden:

    gcloud eventarc triggers list
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Rufen Sie die Cloud Scheduler-Job-IDs ab:

    gcloud scheduler jobs list
    

    Die Ausgabe sollte in etwa so aussehen:

    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. Die Jobs werden zwar täglich um 16 und 17 Uhr ausgeführt, aber Sie können Sie auch manuell ausführen:

    gcloud scheduler jobs run cre-scheduler-cy
    gcloud scheduler jobs run cre-scheduler-uk
    
  4. Prüfen Sie nach einigen Minuten, ob sich im Cloud Storage-Bucket zwei Diagramme befinden:

    gsutil ls gs://${BUCKET}
    

    Die Ausgabe sollte in etwa so aussehen:

    gs://BUCKET/chart-cyprus.png
    gs://BUCKET/chart-unitedkingdom.png
    

Das war's auch schon! Sie sollten außerdem zwei E-Mails mit Links zu den Diagrammen erhalten.

Bereinigen

Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Anleitungsressourcen löschen

  1. Löschen Sie alle Cloud Run for Anthos-Dienste, die Sie in dieser Anleitung bereitgestellt haben:

    gcloud run services delete SERVICE_NAME

    Dabei ist SERVICE_NAME der von Ihnen ausgewählte Dienstname.

    Sie können Cloud Run for Anthos-Dienste auch über die Google Cloud Console löschen:

  2. Löschen Sie alle Eventarc-Trigger, die Sie in dieser Anleitung erstellt haben:

    gcloud eventarc triggers delete TRIGGER_NAME
    

    Ersetzen Sie TRIGGER_NAME durch den Namen des Triggers.

  3. Entfernen Sie gcloud-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.

    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
    

Nächste Schritte