BigQuery-Verarbeitungspipeline für GKE mit Eventarc erstellen

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 erstellen und stellen Sie drei Google Kubernetes Engine-Dienste (GKE) bereit, die in einem GKE-Cluster ausgeführt werden und 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 der Diagramme an eine E-Mail-Adresse zu senden.

Im folgenden Diagramm ist die allgemeine Architektur dargestellt:

Allgemeine Architektur der BigQuery-Verarbeitungspipeline

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.

Neuen Nutzern von Google Cloud steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach 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. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Google Cloud Projekt erstellen oder auswählen

    Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Informationen zum Zuweisen von Rollen
    • Erstellen Sie ein Projekt in Google Cloud :

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Projekt in Google Cloud , das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  6. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.

  7. Aktivieren Sie die Artifact Registry-, BigQuery-, Cloud Build-, Cloud Logging-, Cloud Scheduler-, Eventarc-, GKE-, Pub/Sub- und Resource Manager-APIs, falls sie noch nicht aktiviert sind:

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  8. Installieren Sie die Google Cloud CLI.

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Google Cloud Projekt erstellen oder auswählen

    Erforderliche Rollen zum Auswählen oder Erstellen eines Projekts

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Project Creator“ (roles/resourcemanager.projectCreator), die die Berechtigung resourcemanager.projects.create enthält. Informationen zum Zuweisen von Rollen
    • Erstellen Sie ein Projekt in Google Cloud :

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Projekt in Google Cloud , das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Projekt in Google Cloud aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Projekts in Google Cloud .

  12. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud -Projekt aktiviert ist.

  13. Aktivieren Sie die Artifact Registry-, BigQuery-, Cloud Build-, Cloud Logging-, Cloud Scheduler-, Eventarc-, GKE-, Pub/Sub- und Resource Manager-APIs, falls sie noch nicht aktiviert sind:

    Erforderliche Rollen zum Aktivieren von APIs

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

    gcloud services enable artifactregistry.googleapis.com bigquery.googleapis.com cloudbuild.googleapis.com cloudresourcemanager.googleapis.com cloudscheduler.googleapis.com container.googleapis.com eventarc.googleapis.com pubsub.googleapis.com logging.googleapis.com
  14. Aktivieren Sie für Cloud Storage das Audit-Logging für die Datenzugriffstypen ADMIN_READ, DATA_WRITE und DATA_READ.

    1. Lesen Sie die IAM-Richtlinie (Identity and Access Management), die Ihrem Google Cloud -Projekt, -Ordner oder -Organisation zugeordnet ist, und speichern Sie sie in einer temporären Datei:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Öffnen Sie /tmp/policy.yaml in einem Texteditor und fügen Sie nur die Konfiguration des Audit-Logs im Abschnitt auditConfigs hinzu oder ändern Sie sie:

      
        auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
        [...]
        etag: BwW_bHKTV5U=
        version: 1
    3. Schreiben Sie die neue IAM-Richtlinie:

      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml

      Wenn der vorhergehende Befehl einen Konflikt mit einer anderen Änderung meldet, wiederholen Sie diese Schritte, beginnend mit dem Lesen der IAM-Richtlinie. Weitere Informationen finden Sie unter Audit-Logs zum Datenzugriff mit der API konfigurieren.

  15. 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 eventarc/location $CLUSTER_LOCATION

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

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 erstellen

Erstellen Sie einen Cluster mit aktivierter Workload Identity-Föderation für GKE, damit er über Anwendungen, die in GKE ausgeführt werden, auf Google Cloud -Dienste zugreifen kann. Sie benötigen außerdem die Workload Identity-Föderation für GKE, um Ereignisse mithilfe von Eventarc weiterzuleiten.

  1. Erstellen Sie einen GKE-Cluster mit den aktivierten Add-ons HttpLoadBalancing und HorizontalPodAutoscaling:

    gcloud container clusters create $CLUSTER_NAME \
        --addons=HttpLoadBalancing,HorizontalPodAutoscaling \
        --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 \
        --region=$CLUSTER_LOCATION \
        --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/v1/projects/my-project/zones/us-central1/clusters/events-cluster].
    
  3. Aktualisieren Sie die Datei kubeconfig mit Anmeldedaten und Endpunktinformationen, damit kubectl auf den GKE-Cluster verweist:

    gcloud container clusters get-credentials $CLUSTER_NAME \
        --region=$CLUSTER_LOCATION
  4. Erstellen Sie ein Artifact Registry-Standard-Repository zum Speichern des Docker-Container-Images:

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=$CLUSTER_LOCATION

    Ersetzen Sie REPOSITORY durch einen eindeutigen Namen für das Repository.

Dienstkonten konfigurieren

  1. Damit die GKE-Knoten Container-Images aus Artifact Registry abrufen können, weisen Sie dem Compute Engine-Standarddienstkonto, das von den Clusterknoten verwendet wird, die Rolle Artifact Registry-Leser (roles/artifactregistry.reader) für das Projekt zu:

    PROJECT_NUMBER="$(gcloud projects describe $(gcloud config get-value project) --format='value(projectNumber)')"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --condition=None \
      --role "roles/artifactregistry.reader"
  2. Damit die GKE-Dienste BigQuery abfragen und in BigQuery schreiben, in Pub/Sub veröffentlichen und Diagramme in Cloud Storage hochladen können, weisen Sie dem Kubernetes-ServiceAccount default im Namespace default die Rollen BigQuery-Datenbearbeiter (roles/bigquery.dataEditor), BigQuery-Jobnutzer (roles/bigquery.jobUser), Pub/Sub-Publisher (roles/pubsub.publisher) und Storage-Objekt-Administrator (roles/storage.objectAdmin) für das Projekt zu:

    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.dataEditor"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/bigquery.jobUser"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/pubsub.publisher"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
      --member "principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/default" \
      --condition=None \
      --role "roles/storage.objectAdmin"

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

Cloud Storage-Bucket erstellen

Erstellen Sie einen Cloud Storage-Bucket in derselben Region wie Ihr GKE-Dienst, um die Diagramme zu speichern, und gewähren Sie Ihrem Konto Lesezugriff (roles/storage.objectViewer), um die generierten Diagramme aufzurufen:

export BUCKET="$(gcloud config get-value core/project)-charts"
gcloud storage buckets create gs://${BUCKET} --location=$CLUSTER_LOCATION
gcloud storage buckets update gs://${BUCKET} --uniform-bucket-level-access
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
    --member="user:$(gcloud config get-value core/account)" \
    --role=roles/storage.objectViewer

Repository klonen

GitHub-Repository klonen.

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

Dienstkonto erstellen und Zugriffsrollen binden

Bevor Sie die 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 eventarc-triggers-test-sa:

    TRIGGER_GSA=eventarc-triggers-test-sa
    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" \
        --condition=None \
        --role "roles/pubsub.subscriber"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/monitoring.metricWriter"
    
    gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member "serviceAccount:$TRIGGER_GSA@$PROJECT_ID.iam.gserviceaccount.com" \
        --condition=None \
        --role "roles/eventarc.eventReceiver"

Notifier-Dienst bereitstellen

Stellen Sie im Verzeichnis bigquery/notifier/python einen GKE-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 $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. Erstellen Sie eine Kubernetes-Bereitstellung für das Container-Image und legen Sie die erforderlichen Umgebungsvariablen fest, einschließlich einer Adresse, an die E-Mails gesendet werden sollen, und des SendGrid API-Schlüssels:

    export TO_EMAILS=EMAIL_ADDRESS
    export SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY
    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        TO_EMAILS=${TO_EMAILS} \
        SENDGRID_API_KEY=${SENDGRID_API_KEY} \
        BUCKET=${BUCKET}

    Ersetzen Sie Folgendes:

    • EMAIL_ADDRESS: eine E-Mail-Adresse, um die Links zu den generierten Diagrammen zu senden
    • YOUR_SENDGRID_API_KEY: der zuvor notierte SendGrid API-Schlüssel
    • REPOSITORY: der Name Ihres Artifact Registry-Repositorys
  3. Geben Sie das Deployment als Kubernetes-Dienst frei:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Trigger für den Notifier-Dienst erstellen

Erstellen Sie einen Eventarc-Trigger für den in GKE bereitgestellten Notifier-Dienst, der nach Cloud Storage-Audit-Logs für den angegebenen Cloud Storage-Bucket filtert und bei dem der methodName storage.objects.create ist:

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" \
      --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET/objects/*" \
      --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 GKE-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 $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    popd
  2. Erstellen Sie ein Kubernetes-Deployment für das Container-Image und legen Sie die Umgebungsvariable BUCKET fest:

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        BUCKET=${BUCKET}
  3. Geben Sie das Deployment als Kubernetes-Dienst frei:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Trigger für den Chart Creator-Dienst erstellen

Erstellen Sie einen Eventarc-Trigger für den Chart Creator-Dienst, der in GKE bereitgestellt wird und nach Nachrichten filtert, 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 GKE-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 $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1 -f Dockerfile .
    docker push $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
  2. Erstellen Sie ein Kubernetes-Deployment für das Container-Image und legen Sie die Umgebungsvariablen PROJECT_ID und TOPIC_ID fest:

    kubectl create deployment ${SERVICE_NAME} \
        --image=$CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/${SERVICE_NAME}:v1
    kubectl set env deployment/${SERVICE_NAME} \
        PROJECT_ID=$(gcloud config get-value project) \
        TOPIC_ID=${TOPIC_QUERY_COMPLETED}
  3. Deployment als Kubernetes-Dienst bereitstellen:

    kubectl expose deployment ${SERVICE_NAME} \
        --type=ClusterIP --port=80 --target-port=8080

Trigger für den Query Runner-Dienst erstellen

Erstellen Sie einen Eventarc-Trigger für den in GKE bereitgestellten Query Runner-Dienst, der nach Nachrichten filtert, 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=$(basename $(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. 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 \
      --location=$CLUSTER_LOCATION \
      --schedule="0 16 * * *" \
      --topic=${TOPIC_QUERY_SCHEDULED} \
      --message-body="United Kingdom"
gcloud scheduler jobs create pubsub cre-scheduler-cy \
      --location=$CLUSTER_LOCATION \
      --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         ACTIVE  LOCATION
    trigger-chart-creator-gke  google.cloud.pubsub.topic.v1.messagePublished   GKE:chart-creator   Yes     us-central1
    trigger-notifier-gke       google.cloud.audit.log.v1.written               GKE:notifier        Yes     us-central1
    trigger-query-runner-gke   google.cloud.pubsub.topic.v1.messagePublished   GKE:query-runner    Yes     us-central1
    
  2. Rufen Sie die Cloud Scheduler-Job-IDs ab:

    gcloud scheduler jobs list --location=$CLUSTER_LOCATION

    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 --location=$CLUSTER_LOCATION
    gcloud scheduler jobs run cre-scheduler-uk --location=$CLUSTER_LOCATION
  4. Prüfen Sie nach einigen Minuten, ob sich im Cloud Storage-Bucket zwei Diagramme befinden:

    gcloud storage ls gs://${BUCKET}

    Die Ausgabe sollte in etwa so aussehen:

    gs://PROJECT_ID-charts/chart-cyprus.png
    gs://PROJECT_ID-charts/chart-unitedkingdom.png
    

Glückwunsch! 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.

    Google Cloud -Projekt löschen:

    gcloud projects delete PROJECT_ID

Anleitungsressourcen löschen

  1. Löschen Sie die Kubernetes-Dienste und -Deployments, die Sie in dieser Anleitung bereitgestellt haben, und löschen Sie den GKE-Cluster:

    kubectl delete service notifier chart-creator query-runner
    kubectl delete deployment notifier chart-creator query-runner
    gcloud container clusters delete $CLUSTER_NAME --region=$CLUSTER_LOCATION
  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. Löschen Sie die Images aus Artifact Registry:

    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/notifier:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/chart-creator:v1
    gcloud artifacts docker images delete $CLUSTER_LOCATION-docker.pkg.dev/$(gcloud config get-value project)/REPOSITORY/query-runner:v1
  4. Löschen Sie das Artifact Registry-Repository:

    gcloud artifacts repositories delete REPOSITORY \
        --location=$CLUSTER_LOCATION
  5. Löschen Sie den Bucket zusammen mit allen Objekten im Bucket:

    gcloud storage rm --recursive gs://${BUCKET}/
  6. Löschen Sie die Cloud Scheduler-Jobs:

    gcloud scheduler jobs delete cre-scheduler-cy --location=$CLUSTER_LOCATION
    gcloud scheduler jobs delete cre-scheduler-uk --location=$CLUSTER_LOCATION
  7. Entfernen Sie alle Google Cloud CLI-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben:

    gcloud config unset project
    gcloud config unset eventarc/location

Nächste Schritte