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-Dienste erstellen und bereitstellen, die nicht authentifizierten Zugriff zulassen und Ereignisse über Eventarc empfangen:
- 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.
- 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.
- 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:
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Hinweis
Einige der Schritte in diesem Dokument funktionieren möglicherweise nicht richtig, wenn Ihre Organisation Einschränkungen auf Ihre Google Cloud-Umgebung anwendet. In diesem Fall können Sie möglicherweise keine Aufgaben wie das Erstellen öffentlicher IP-Adressen oder Dienstkontoschlüssel ausführen. Wenn Sie eine Anfrage stellen, die einen Fehler zu Einschränkungen zurückgibt, lesen Sie, wie Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln werden.
- 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.
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist
-
Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für ein Projekt aktiviert ist
-
Cloud Build, Cloud Logging, Cloud Run, Cloud Scheduler, Container Registry, Eventarc, Pub/Sub APIs aktivieren.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
- Aktualisieren Sie die gcloud-Komponenten:
gcloud components update
- Melden Sie sich mit Ihrem Konto an:
gcloud auth login
- Wählen Sie Google Cloud Storage aus und aktivieren Sie die Logtypen Admin Read, Data Read und Data Write:
- Weisen Sie dem Compute Engine-Dienstkonto die Rolle
eventarc.eventReceiver
zu: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'
- Wenn Sie das Pub/Sub-Dienstkonto am oder vor dem 8. April 2021 aktiviert haben, weisen Sie dem Pub/Sub-Dienstkonto die Rolle
iam.serviceAccountTokenCreator
zu: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'
- Legen Sie die in dieser Anleitung verwendeten Standardwerte fest:
export REGION=REGION gcloud config set run/region ${REGION} gcloud config set run/platform managed gcloud config set eventarc/location ${REGION}
Ersetzen Sie REGION durch den unterstützten Eventarc-Standort Ihrer Wahl.
- 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.
- Melden Sie sich bei SendGrid an und rufen Sie Einstellungen > API-Schlüssel auf.
- Klicken Sie auf API-Schlüssel erstellen.
- 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.
- Klicken Sie auf Save, um den Schlüssel zu erstellen.
- 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.
Cloud Storage-Bucket erstellen
Erstellen Sie einen eindeutigen 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-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}
Notifier-Dienst bereitstellen
Stellen Sie einen Cloud Run-Dienst bereit, der Chart Creator-Ereignisse empfängt und mithilfe von SendGrid Links zu den generierten Diagrammen per E-Mail sendet.
Klonen Sie das GitHub-Repository und wechseln Sie in das Verzeichnis
notifier/python
:git clone https://github.com/GoogleCloudPlatform/eventarc-samples cd eventarc-samples/processing-pipelines/bigquery/notifier/python/
Erstellen Sie das Container-Image und übertragen Sie es per Push:
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
Stellen Sie das Container-Image für Cloud Run 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} \ --allow-unauthenticated
Ersetzen Sie Folgendes:
- 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 bereitgestellt wird, filtert nach Cloud Storage-Audit-Logs, wobei der Methodenname storage.objects.create
lautet.
Erstellen Sie den Trigger:
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
Dadurch wird ein Trigger mit dem Namen
trigger-notifier
erstellt.
Chart Creator-Dienst bereitstellen
Stellen Sie einen Cloud Run-Dienst bereit, der Query Runner-Ereignisse empfängt, Daten aus einer BigQuery-Tabelle für ein bestimmtes Land abruft und dann mithilfe von Matplotlib aus den Daten ein Diagramm generiert. Das Diagramm wird in einen Cloud Storage-Bucket hochgeladen.
Wechseln Sie in das Verzeichnis
chart-creator/python
:cd ../../chart-creator/python
Erstellen Sie das Container-Image und übertragen Sie es per Push:
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
Stellen Sie das Container-Image für Cloud Run 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} \ --allow-unauthenticated
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 bereitgestellt wird, filtert nach Nachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden.
Erstellen Sie den Trigger:
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"
Dadurch wird ein Trigger mit dem Namen
trigger-chart-creator
erstellt.Legen Sie die Umgebungsvariable für das Pub/Sub-Thema fest.
export TOPIC_QUERY_COMPLETED=$(basename $(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)'))
Query Runner-Dienst bereitstellen
Stellen Sie deinen Cloud Run-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.
Wechseln Sie in das Verzeichnis
processing-pipelines
:cd ../../..
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
Stellen Sie das Container-Image für Cloud Run bereit und übergeben Sie
PROJECT_ID
undTOPIC_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
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 bereitgestellt wird, filtert nach Nachrichten, die in einem Pub/Sub-Thema veröffentlicht wurden.
Erstellen Sie den Trigger:
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"
Dadurch wird ein Trigger mit dem Namen
trigger-query-runner
erstellt.Legen Sie eine Umgebungsvariable für das Pub/Sub-Thema fest.
export TOPIC_QUERY_SCHEDULED=$(gcloud eventarc triggers describe trigger-${SERVICE_NAME} --format='value(transport.pubsub.topic)')
Jobs planen
Die Verarbeitungspipeline wird durch zwei Cloud Scheduler-Jobs ausgelöst.
Erstellen Sie eine App Engine-Anwendung, die für Cloud Scheduler erforderlich ist, und geben Sie einen geeigneten Standort an:
export APP_ENGINE_LOCATION=LOCATION gcloud app create --region=${APP_ENGINE_LOCATION}
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
Prüfen Sie zuerst, 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 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
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
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
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:
- Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
- Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.
Anleitungsressourcen löschen
Löschen Sie den Cloud Run-Dienst, den 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-Dienste auch über die Google Cloud Console löschen.
Entfernen Sie gcloud CLI-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.
Beispiel:
gcloud config unset run/region
oder
gcloud config unset project
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
- Löschen Sie den Eventarc-Trigger:
gcloud eventarc triggers delete TRIGGER_NAME
Ersetzen SieTRIGGER_NAME
durch den Namen des Triggers.
- Löschen Sie das Container-Image mit dem Namen
gcr.io/PROJECT_ID/SERVICE_NAME
aus Container Registry.
- Löschen Sie den Eventarc-Trigger: