Cloud Run mit Eventarc-Ereignissen auslösen

1. Einführung

894762ebb681671c.png

Mit Cloud Run können Sie zustandslose Container in einer vollständig verwalteten Umgebung ausführen. Es basiert auf dem Open-Source-Tool Knative und ermöglicht Ihnen, Container wahlweise vollständig verwaltet mit Cloud Run oder in einem Google Kubernetes Engine-Cluster mit Cloud Run for Anthos auszuführen.

cb762f29e9183a3f.png

Eventarc vereinfacht die Verbindung verschiedener Dienste (Cloud Run, Cloud Functions, Workfklows) mit Ereignissen aus einer Vielzahl von Quellen. Damit können Sie ereignisgesteuerte Architekturen erstellen, in denen Mikrodienste lose miteinander verknüpft und verteilt sind. Außerdem übernimmt er die Ereignisaufnahme, -bereitstellung, -sicherheit, -autorisierung und -behebung für Sie, was die Agilität der Entwickler und die Ausfallsicherheit von Anwendungen verbessert.

In diesem Codelab lernen Sie Eventarc kennen. Genauer gesagt, überwachen Sie Ereignisse aus Pub/Sub, Cloud Storage und Cloud-Audit-Logs mit Eventarc und übergeben sie an einen Cloud Run-Dienst.

Lerninhalte

  • Vision von Eventarc
  • Events in Eventarc entdecken
  • Cloud Run-Senke erstellen
  • Trigger für Pub/Sub erstellen
  • Trigger für Cloud Storage erstellen
  • Trigger für Cloud-Audit-Logs erstellen
  • Eventarc-UI kennenlernen

2. Vision von Eventarc

Eventarc zielt darauf ab, Ereignisse aus verschiedenen Google-, Google Cloud- und externen Ereignisquellen an Google Cloud-Ereignisziele bereitzustellen.

59b147dc030b2b0b.png

Google Cloud-Quellen

Ereignisquellen, die Produkte von Google Cloud sind

Google-Quellen

Ereignisquellen, die Google-Produkte wie Gmail, Hangouts und Android Management umfassen

Benutzerdefinierte Quellen

Ereignisquellen, die keine Produkte von Google sind und von den Endnutzern selbst erstellt werden

Drittanbieterquellen

Ereignisquellen, die weder Google gehören noch von Kunden produziert wurden. Dazu gehören beliebte Ereignisquellen wie Check Point CloudGuard, Datadog, ForgeRock, Lacework usw., die Drittanbietern und Partnern gehören und von diesen verwaltet werden.

Ereignisse werden für die dienstübergreifende Interoperabilität auf das Format CloudEvents v1.0 normalisiert. CloudEvents ist eine anbieterneutrale offene Spezifikation, die Ereignisdaten in gängigen Formaten beschreibt und Interoperabilität zwischen Diensten, Plattformen und Systemen ermöglicht.

3. Einrichtung und Anforderungen

Umgebung für das selbstbestimmte Lernen einrichten

  1. Melden Sie sich in der Google Cloud Console an und erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes Projekt. Wenn Sie noch kein Gmail- oder Google Workspace-Konto haben, müssen Sie eines erstellen.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Der Projektname ist der Anzeigename für die Projektteilnehmer. Es handelt sich um eine Zeichenfolge, die von Google APIs nicht verwendet wird und jederzeit aktualisiert werden kann.
  • Die Projekt-ID muss für alle Google Cloud-Projekte eindeutig sein und ist unveränderlich. Sie kann nach dem Festlegen nicht mehr geändert werden. Die Cloud Console generiert automatisch einen eindeutigen String. ist Ihnen meist egal, was es ist. In den meisten Codelabs musst du auf die Projekt-ID verweisen, die in der Regel als PROJECT_ID identifiziert wird. Wenn es dir nicht gefällt, kannst du eine weitere zufällige Projekt-ID generieren. Du kannst aber auch selbst eine andere testen, um zu sehen, ob sie verfügbar ist. Dann ist es „eingefroren“ nachdem das Projekt erstellt wurde.
  • Es gibt einen dritten Wert, die Projektnummer, die von einigen APIs verwendet wird. Weitere Informationen zu allen drei Werten finden Sie in der Dokumentation.
  1. Als Nächstes müssen Sie in der Cloud Console die Abrechnung aktivieren, um Cloud-Ressourcen/APIs verwenden zu können. Dieses Codelab sollte ohne großen Aufwand betrieben werden. Wenn Sie Ressourcen beenden möchten, damit über diese Anleitung hinaus keine Kosten anfallen, führen Sie eine Bereinigung durch am Ende des Codelabs. Neue Google Cloud-Nutzer haben Anspruch auf eine kostenlose Testversion von 300$.

Cloud Shell starten

Sie können Google Cloud zwar von Ihrem Laptop aus aus der Ferne bedienen, in diesem Codelab verwenden Sie jedoch Google Cloud Shell, eine Befehlszeilenumgebung, die in der Cloud ausgeführt wird.

Klicken Sie in der GCP Console oben rechts in der Symbolleiste auf das Cloud Shell-Symbol:

55efc1aaa7a4d3ad.png

Die Bereitstellung und Verbindung mit der Umgebung dauert nur einen Moment. Wenn er abgeschlossen ist, sollten Sie in etwa Folgendes sehen:

7ffe5cbb04455448.png

Diese virtuelle Maschine verfügt über sämtliche Entwicklertools, die Sie benötigen. Es bietet ein Basisverzeichnis mit 5 GB nichtflüchtigem Speicher und läuft auf Google Cloud, wodurch die Netzwerkleistung und Authentifizierung erheblich verbessert werden. Sie können alle Aufgaben in diesem Lab ganz einfach in einem Browser erledigen.

Hinweis

Prüfen Sie in Cloud Shell, ob Ihre Projekt-ID eingerichtet ist:

PROJECT_ID=your-project-id
gcloud config set project $PROJECT_ID

4. Cloud Run-Dienst bereitstellen

Stellen Sie einen Cloud Run-Dienst zum Empfangen von Ereignissen bereit. Sie stellen den „Hello“-Container von Cloud Run bereit, der den Inhalt von CloudEvents protokolliert.

Aktivieren Sie zuerst die erforderlichen Dienste für Cloud Run:

gcloud services enable run.googleapis.com

Stellen Sie den „hello“-Container in Cloud Run bereit:

REGION=us-central1
SERVICE_NAME=hello

gcloud run deploy $SERVICE_NAME \
  --allow-unauthenticated \
  --image=gcr.io/cloudrun/hello \
  --region=$REGION

Bei Erfolg wird in der Befehlszeile die Dienst-URL angezeigt. Sie können die Dienst-URL in einem beliebigen Browserfenster öffnen, um zu prüfen, ob der Dienst jetzt bereitgestellt ist.

5. Ereignissuche

Bevor Sie Trigger in Eventarc erstellen, können Sie sich über die Ereignisquellen und die Ereignistypen informieren, die ausgegeben werden können, und wie Trigger konfiguriert werden, um sie zu verarbeiten.

So rufen Sie die Liste der verschiedenen Ereignistypen auf:

gcloud beta eventarc attributes types list

NAME                                           DESCRIPTION
google.cloud.audit.log.v1.written              Cloud Audit Log written
google.cloud.pubsub.topic.v1.messagePublished  Cloud Pub/Sub message published
google.cloud.storage.object.v1.archived         Cloud Storage: Sent when a live version of an (object versioned) object is archived or deleted.
google.cloud.storage.object.v1.deleted          Cloud Storage: Sent when an object has been permanently deleted.
google.cloud.storage.object.v1.finalized        Cloud Storage: Sent when a new object (or a new generation of an existing object).
google.cloud.storage.object.v1.metadataUpdated  Cloud Storage: Sent when the metadata of an existing object changes.

So rufen Sie weitere Informationen zu den einzelnen Ereignistypen ab:

gcloud beta eventarc attributes types describe google.cloud.audit.log.v1.written

attributes: type,serviceName,methodName,resourceName
description: 'Cloud Audit Log: Sent when a log is written.'
name: google.cloud.audit.log.v1.written

So rufen Sie die Liste der Dienste auf, die einen bestimmten Ereignistyp ausgeben:

gcloud beta eventarc attributes service-names list --type=google.cloud.audit.log.v1.written

SERVICE_NAME                                DISPLAY_NAME
accessapproval.googleapis.com               Access Approval
accesscontextmanager.googleapis.com         Access Context Manager
admin.googleapis.com                        Google Workspace Admin
aiplatform.googleapis.com                   AI Platform (under Vertex AI)
apigee.googleapis.com                       Apigee
apigeeconnect.googleapis.com                Apigee Connect
...
workflows.googleapis.com                    Workflows

So rufen Sie die Liste der Methodennamen (Unterereignisse) auf, die jeder Dienst ausgeben kann:

gcloud beta eventarc attributes method-names list --type=google.cloud.audit.log.v1.written --service-name=workflows.googleapis.com

METHOD_NAME
google.cloud.workflows.v1.Workflows.CreateWorkflow
google.cloud.workflows.v1.Workflows.DeleteWorkflow
google.cloud.workflows.v1.Workflows.GetWorkflow
google.cloud.workflows.v1.Workflows.ListWorkflows
google.cloud.workflows.v1.Workflows.UpdateWorkflow
google.cloud.workflows.v1beta.Workflows.CreateWorkflow
google.cloud.workflows.v1beta.Workflows.DeleteWorkflow
google.cloud.workflows.v1beta.Workflows.GetWorkflow
google.cloud.workflows.v1beta.Workflows.ListWorkflows
google.cloud.workflows.v1beta.Workflows.UpdateWorkflow

6. Pub/Sub-Trigger erstellen

Eine Möglichkeit, Ereignisse zu empfangen, ist über Cloud Pub/Sub. Jede Anwendung kann Nachrichten in Pub/Sub veröffentlichen und diese Nachrichten können über Eventarc an Cloud Run gesendet werden.

Einrichtung

Aktivieren Sie die erforderlichen Dienste für Eventarc, bevor Sie Trigger erstellen:

gcloud services enable eventarc.googleapis.com

Sie benötigen auch ein Dienstkonto, das von Triggern verwendet wird. Erstellen Sie ein Dienstkonto:

SERVICE_ACCOUNT=eventarc-trigger-sa

gcloud iam service-accounts create $SERVICE_ACCOUNT

Erstellen

Erstellen Sie einen Trigger, um Ereignisse zu filtern, die im Pub/Sub-Thema im bereitgestellten Cloud Run-Dienst veröffentlicht wurden:

TRIGGER_NAME=trigger-pubsub

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Der Pub/Sub-Trigger erstellt ein Thema unter dem Cover. Lassen Sie uns das herausfinden und einer Variablen zuweisen:

TOPIC_ID=$(gcloud eventarc triggers describe $TRIGGER_NAME --location $REGION --format='value(transport.pubsub.topic)')

Verwenden Sie gcloud, um eine Nachricht für das Thema zu veröffentlichen:

gcloud pubsub topics publish $TOPIC_ID --message="Hello World"

Der Cloud Run-Dienst protokolliert den Text der eingehenden Nachricht. Sie können dies im Bereich „Logs“ Ihrer Cloud Run-Instanz ansehen:

69e0177e04a0d1af.png

Mit einem vorhandenen Pub/Sub-Thema erstellen

Wenn Sie einen Pub/Sub-Trigger erstellen, erstellt Eventarc standardmäßig ein Thema unter der Decke, das Sie als Transportthema zwischen Ihrer Anwendung und einem Cloud Run-Dienst verwenden können. Dies ist nützlich, um schnell und einfach einen durch Pub/Sub gesicherten Trigger zu erstellen. Manchmal möchten Sie aber vielleicht ein vorhandenes Thema verwenden. Mit Eventarc können Sie ein vorhandenes Pub/Sub-Thema im selben Projekt mit dem gcloud-Flag --transport-topic angeben.

Erstellen Sie ein Pub/Sub-Thema, das als Transportthema verwendet werden soll, um zu sehen, wie das funktioniert:

TOPIC_ID=eventarc-topic

gcloud pubsub topics create $TOPIC_ID

Erstellen Sie einen Trigger:

TRIGGER_NAME=trigger-pubsub-existing

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \
  --location=$REGION \
  --transport-topic=projects/$PROJECT_ID/topics/$TOPIC_ID \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Sie können den Trigger testen, indem Sie eine Nachricht an das Thema senden:

gcloud pubsub topics publish $TOPIC_ID --message="Hello again"

7. Cloud Storage-Trigger erstellen

In diesem Schritt erstellen Sie einen Trigger, um auf Ereignisse aus Cloud Storage zu warten.

Einrichtung

Erstellen Sie zuerst einen Bucket, von dem Ereignisse empfangen werden sollen:

BUCKET_NAME=eventarc-gcs-$PROJECT_ID

gsutil mb -l $REGION gs://$BUCKET_NAME

Weisen Sie die Rolle eventarc.eventReceiver zu, damit das Dienstkonto in einem Cloud Storage-Trigger verwendet werden kann:

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --role roles/eventarc.eventReceiver \
  --member serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Außerdem müssen Sie dem Cloud Storage-Dienstkonto für Cloud Storage-Trigger die Rolle pubsub.publisher hinzufügen:

SERVICE_ACCOUNT_STORAGE=$(gsutil kms serviceaccount -p $PROJECT_ID)

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$SERVICE_ACCOUNT_STORAGE \
    --role roles/pubsub.publisher

Erstellen

Erstellen Sie einen Trigger, um Ereignisse zur Erstellung neuer Dateien aus dem Bucket an Ihren Dienst weiterzuleiten:

TRIGGER_NAME=trigger-storage

gcloud eventarc triggers create $TRIGGER_NAME \
  --destination-run-service=$SERVICE_NAME \
  --destination-run-region=$REGION \
  --event-filters="type=google.cloud.storage.object.v1.finalized" \
  --event-filters="bucket=$BUCKET_NAME" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Listen Sie alle Trigger auf, um zu prüfen, ob der Trigger erfolgreich erstellt wurde:

gcloud eventarc triggers list

Laden Sie eine Datei in den Cloud Storage-Bucket hoch:

echo "Hello World" > random.txt
gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Wenn Sie die Logs des Cloud Run-Dienstes in der Cloud Console prüfen, sollten Sie das empfangene Ereignis sehen:

904cfc93bb8e8df1.png

8. Cloud-Audit-Log-Trigger erstellen

Obwohl der Cloud Storage-Trigger die bessere Möglichkeit ist, auf Cloud Storage-Ereignisse zu warten, erstellen Sie in diesem Schritt einen Cloud-Audit-Log-Trigger, um dies zu erreichen.

Einrichtung

Damit Sie Ereignisse von einem Dienst erhalten, müssen Sie Cloud-Audit-Logs aktivieren. Wählen Sie in der Cloud Console im Menü oben links IAM & Admin und Audit Logs aus. Klicken Sie in der Liste der Dienste auf das Kästchen Google Cloud Storage:

237c.png

Achten Sie darauf, dass auf der rechten Seite Admin, Read und Write ausgewählt sind, und klicken Sie auf Save:

1deb3ad78f11dd5f.png

Erstellen

Erstellen Sie einen Trigger, um Ereignisse zur Erstellung neuer Dateien aus dem Bucket an Ihren Dienst weiterzuleiten:

TRIGGER_NAME=trigger-auditlog-storage

gcloud eventarc triggers create $TRIGGER_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" \
  --event-filters-path-pattern="resourceName=/projects/_/buckets/$BUCKET_NAME/objects/*" \
  --location=$REGION \
  --service-account=$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com

Test

Die Initialisierung von Audit-Log-Triggern dauert eine Weile. Sie können prüfen, ob der Trigger erstellt wurde, indem Sie alle Trigger auflisten:

gcloud eventarc triggers list

Das Feld ACTIVE sollte Yes lauten:

NAME                          TYPE                                       DESTINATION               ACTIVE
trigger-auditlog-storage  google.cloud.audit.log.v1.written              Cloud Run service: hello  Yes

Laden Sie die gleiche Datei wie zuvor in den Cloud Storage-Bucket hoch:

gsutil cp random.txt gs://$BUCKET_NAME/random.txt

Wenn Sie die Logs des Cloud Run-Dienstes in der Cloud Console prüfen, sollten Sie das empfangene Ereignis sehen:

7be7859bcc8976f8.png

9. Eventarc-UI kennenlernen

In diesem Schritt machen Sie sich mit der Eventarc-UI in der Google Cloud Console vertraut. In der Eventarc-UI können Sie eine Übersicht aller Trigger abrufen, sie bearbeiten und löschen sowie neue Trigger in der Google Cloud Console erstellen.

Rufen Sie den Bereich „Eventarc“ von Google Cloud auf:

81e139f17e0d29bf.png

Sie sehen die Liste der Trigger, die Sie zuvor erstellt haben:

3240c7c830398718.png

Wenn Sie auf einen Trigger klicken, können Sie seine Details aufrufen und ihn bearbeiten oder löschen:

b4d8bbc6601a8b9e.png

Sie können auch einen neuen Trigger erstellen, indem Sie Create trigger auswählen und Details des Triggers eingeben:

Beispiel

10. Glückwunsch!

Herzlichen Glückwunsch zum Abschluss des Codelabs.

Behandelte Themen

  • Vision von Eventarc
  • Events in Eventarc entdecken
  • Cloud Run-Senke erstellen
  • Trigger für Pub/Sub erstellen
  • Trigger für Cloud Storage erstellen
  • Trigger für Cloud-Audit-Logs erstellen
  • Eventarc-UI kennenlernen