Ereignisse veröffentlichen und empfangen, indem Sie einen Bus und eine Anmeldung erstellen (Terraform)

In dieser Kurzanleitung erfahren Sie, wie Sie mit Terraform einen Eventarc Advanced-Bus und eine Anmeldung in Ihrem Google Cloud Projekt erstellen, so dass Sie Ereignisnachrichten veröffentlichen und empfangen können.

  • Ein Bus fungiert als zentraler Router, der Nachrichten von Ereignisquellen oder von Anbietern veröffentlichte Nachrichten empfängt.

  • Eine Anmeldung leitet Nachrichten, die vom Bus empfangen werden, über eine Verarbeitungspipeline an ein oder mehrere Ziele weiter.

In dieser Kurzanleitung werden folgende Schritte erläutert:

  1. Einen Ereignisempfängerdienst für Cloud Run bereitstellen

  2. Einen Eventarc Advanced-Bus erstellen

  3. Ereignisse aus Google-Quellen aktivieren

  4. Eine Eventarc Advanced-Pipeline und eine Anmeldung erstellen

  5. Eine Ereignisnachricht an den Bus senden, indem Sie einen Workflow erstellen

  6. Ereignisdaten in den Cloud Run-Logs ansehen

Die meisten Schritte in dieser Kurzanleitung können Sie mit Terraform ausführen. Eine Anleitung für alle Schritte mit der Google Cloud CLI finden Sie unter Ereignisse aus einer Google-Quelle veröffentlichen.

Weitere Informationen zur Verwendung von Terraform finden Sie in der Terraform- Google CloudDokumentation.

Hinweis

Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud Umgebung entwickeln.

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Google Cloud-Nutzer sind, erstellen Sie ein Konto, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  7. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

  8. Verify that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  10. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  11. Terraform ist in die Cloud Shell-Umgebung integriert. Sie können Cloud Shell verwenden, um Ihre Terraform-Ressourcen bereitzustellen, ohne Terraform installieren zu müssen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen der Kurzanleitung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Terraform-Bereitstellung vorbereiten

Bevor Sie Terraform-Ressourcen bereitstellen, müssen Sie eine Terraform-Konfigurationsdatei erstellen. In einer Terraform-Konfigurationsdatei können Sie mit der Terraform-Syntax den gewünschten Endzustand für Ihre Infrastruktur definieren.

  1. Legen Sie in Cloud Shell das Standard Google Cloud projekt fest, auf das Sie Ihre Terraform-Konfiguration anwenden möchten. Sie müssen diesen Befehl nur einmal pro Projekt ausführen und können ihn in einem beliebigen Verzeichnis ausführen:

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud Projekts.

    Beachten Sie, dass Umgebungsvariablen überschrieben werden, wenn Sie in der Terraform-Konfigurationsdatei explizite Werte festlegen.

  2. Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch Stammmodul genannt). Erstellen Sie in Cloud Shell ein Verzeichnis und eine neue Datei in diesem Verzeichnis:

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf

    Ersetzen Sie DIRECTORY durch den Namen Ihres Terraform-Verzeichnisses.

    Der Dateiname muss die .tf Erweiterung haben. In dieser Kurzanleitung ist die Konfigurationsdatei beispielsweise main.tf.

Terraform-Konfiguration definieren

Kopieren Sie die folgenden Terraform-Code-Snippets in Ihre Datei main.tf. Wenn Sie das gesamte Codebeispiel von GitHub kopieren möchten, klicken Sie rechts oben in einem Code-Snippet auf > Auf GitHub ansehen.

APIs aktivieren

Verwenden Sie die google_project_service Terraform-Ressource, um die APIs zu aktivieren, die zum Anwenden der Terraform Konfiguration erforderlich sind:

# Enable APIs
resource "google_project_service" "apis" {
  for_each = toset([
    "eventarc.googleapis.com",
    "eventarcpublishing.googleapis.com",
    "run.googleapis.com"
  ])
  service            = each.key
  disable_on_destroy = false
}

Dienstkonto erstellen

Erstellen Sie zu Testzwecken ein dediziertes Dienstkonto und weisen Sie ihm bestimmte IAM-Rollen zu.

Verwenden Sie die google_service_account und google_project_iam_member Terraform-Ressourcen, um das Dienstkonto zu erstellen und ihm die erforderlichen Rollen zum Veröffentlichen und Empfangen von Ereignissen zuzuweisen:

# Used to retrieve project information later
data "google_project" "project" {}

# Create a dedicated service account
resource "google_service_account" "default" {
  account_id   = "eventarc-advanced-sa"
  display_name = "Eventarc Advanced quickstart service account"
}

# Grant permission to receive Eventarc events
resource "google_project_iam_member" "eventreceiver" {
  project = data.google_project.project.id
  role    = "roles/eventarc.eventReceiver"
  member  = "serviceAccount:${google_service_account.default.email}"
}

# Grant permission to invoke Cloud Run services
resource "google_project_iam_member" "runinvoker" {
  project = data.google_project.project.id
  role    = "roles/run.invoker"
  member  = "serviceAccount:${google_service_account.default.email}"
}

Ereignisziel erstellen

Verwenden Sie die google_cloud_run_v2_service Terraform-Ressource, um einen Cloud Run-Dienst als Ereignisziel zu erstellen, in dem der Inhalt eines Ereignisses protokolliert wird:

# Deploy Cloud Run service
resource "google_cloud_run_v2_service" "default" {
  name     = "example-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # This sample container listens to HTTP requests and logs received events
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.default.email
  }

  depends_on = [google_project_service.apis]
}

Eventarc Advanced-Bus erstellen

Ein Bus empfängt Ereignisnachrichten aus einer Nachrichtenquelle oder von einem Anbieter veröffentlichte Nachrichten und fungiert als Nachrichtenrouter. Weitere Informationen finden Sie unter Bus erstellen, um Nachrichten weiterzuleiten.

Verwenden Sie die google_eventarc_message_bus Terraform-Ressource, um einen Eventarc Advanced-Bus zu erstellen:

# Create an Eventarc Advanced bus
resource "google_eventarc_message_bus" "default" {
  location       = "us-central1"
  message_bus_id = "example-bus"
}

Ereignisse aus Google-Quellen aktivieren

Wenn Sie Ereignisse aus Google-Quellen veröffentlichen möchten, müssen Sie eine GoogleApiSource Ressource erstellen, die ein Abo für Google API-Ereignisse für einen bestimmten Eventarc Advanced-Bus darstellt. Weitere Informationen finden Sie unter Ereignisse aus Google-Quellen veröffentlichen.

Verwenden Sie die google_eventarc_google_api_source Terraform-Ressource, um Ereignisse aus Google-Quellen zu aktivieren:

# Enable events from Google API sources
resource "google_eventarc_google_api_source" "default" {
  location             = "us-central1"
  google_api_source_id = "example-google-api-source"
  destination          = google_eventarc_message_bus.default.id
}

Alle unterstützten Google-Ereignistypen die direkt von einer Google-Quelle gesendet werden, werden jetzt erfasst und in Ihrem Bus veröffentlicht.

Eventarc Advanced-Pipeline erstellen

In einer Pipeline können Sie ein Ziel konfigurieren und außerdem alle übereinstimmenden Ereignisse vor ihrer Übermittlung an das Ziel umwandeln.

Verwenden Sie die google_eventarc_pipeline Terraform-Ressource, um eine Pipeline zu erstellen:

# Create an Eventarc Advanced pipeline
resource "google_eventarc_pipeline" "default" {
  location    = "us-central1"
  pipeline_id = "example-pipeline"
  destinations {
    http_endpoint {
      uri = google_cloud_run_v2_service.default.uri
    }
    authentication_config {
      google_oidc {
        service_account = google_service_account.default.email
      }
    }
  }
}

Das Ereignisziel ist die vollständig qualifizierte URL Ihres Cloud Run Dienstes, z. B. https://SERVICE_NAME-abcdef-uc.a.run.app. Die E-Mail-Adresse des Dienst kontos wird verwendet, um ein OIDC-Token zu generieren.

Eventarc Advanced-Anmeldung erstellen

Eine Anmeldung bestimmt, welche Nachrichten an ein Ziel weitergeleitet werden, und gibt auch die Pipeline an, mit der ein Ziel für die Ereignisnachrichten konfiguriert wird. Weitere Informationen finden Sie unter Anmeldung erstellen, um Ereignisse zu empfangen.

Verwenden Sie die google_eventarc_enrollment Terraform-Ressource, um eine Anmeldung zu erstellen:

# Create an Eventarc Advanced enrollment
resource "google_eventarc_enrollment" "default" {
  location      = "us-central1"
  enrollment_id = "example-enrollment"
  message_bus   = google_eventarc_message_bus.default.id
  destination   = google_eventarc_pipeline.default.id
  cel_match     = "message.type == 'google.cloud.workflows.workflow.v1.created'"
}

Der Abgleichausdruck für die Anmeldung verwendet die Common Expression Language (CEL) , um Ereignisnachrichten zu veröffentlichen, wenn ein Workflow erstellt wird. In einem späteren Schritt, werden Sie einen Workflow erstellen.

Terraform-Konfiguration anwenden

Verwenden Sie die Terraform-Befehlszeile, um Infrastruktur basierend auf der Konfigurationsdatei bereitzustellen. Weitere Informationen finden Sie unter Grundlegende Terraform-Befehle.

  1. Initialisieren Sie Terraform. Sie müssen dies nur einmal pro Verzeichnis tun.

    terraform init

    Fügen Sie optional die Option -upgrade ein, um die neueste Google-Anbieterversion zu verwenden:

    terraform init -upgrade
  2. Prüfen Sie die Konfiguration und prüfen Sie, ob die Ressourcen, die Terraform erstellen oder aktualisieren wird, Ihren Erwartungen entsprechen:

    terraform plan

    Korrigieren Sie die Konfiguration nach Bedarf.

  3. Wenden Sie die Terraform-Konfiguration an. Führen Sie dazu den folgenden Befehl aus und geben Sie an der Eingabeaufforderung yes ein:

    terraform apply

    Normalerweise wenden Sie die gesamte Konfiguration auf einmal an. Sie können aber auch eine bestimmte Ressource auswählen. Beispiel:

    terraform apply -target="google_eventarc_message_bus.default"

    Warten Sie, bis Terraform die Meldung „Apply complete“ anzeigt.

Ereignisnachricht an den Bus senden, indem Sie einen Workflow erstellen

Workflows ist eine vollständig verwaltete Orchestrierungsplattform, die Dienste in einer von Ihnen definierten Reihenfolge ausführt: ein Workflow. Erstellen Sie einen Workflow, um einen unterstützten Ereignistyp aus einer Google-Quelle zu generieren.

  1. Erstellen Sie in Ihrem Basisverzeichnis eine neue Datei mit dem Namen myWorkflow.yaml.

  2. Kopieren Sie den folgenden Workflow, fügen Sie ihn in die neue Datei ein und speichern Sie ihn:

    main:
        params: [input]
        steps:
        - checkSearchTermInInput:
            switch:
                - condition: '${"searchTerm" in input}'
                  assign:
                    - searchTerm: '${input.searchTerm}'
                  next: readWikipedia
        - getLocation:
            call: sys.get_env
            args:
                name: GOOGLE_CLOUD_LOCATION
            result: location
        - setFromCallResult:
            assign:
                - searchTerm: '${text.split(location, "-")[0]}'
        - readWikipedia:
            call: http.get
            args:
                url: 'https://en.wikipedia.org/w/api.php'
                query:
                    action: opensearch
                    search: '${searchTerm}'
            result: wikiResult
        - returnOutput:
                return: '${wikiResult.body[1]}'
    

    Dieser Workflow übergibt die Region, in der der Workflow bereitgestellt wird, an die Wikipedia API und gibt eine Liste von ähnlichen Wikipedia-Artikeln zurück.

  3. Stellen Sie den Workflow mit dem gcloud workflows deploy Befehl bereit:

    gcloud workflows deploy example-workflow --source=myWorkflow.yaml \
        --service-account=eventarc-advanced-sa@PROJECT_ID.iam.gserviceaccount.com \
        --location=us-central1

Ereignisdaten in den Cloud Run-Logs ansehen

Nachdem Sie ein Ereignis in Ihrem Eventarc Advanced-Bus veröffentlicht haben, können Sie in den Logs Ihres Cloud Run-Dienstes prüfen, ob das Ereignis wie erwartet empfangen wurde.

  1. Filtern Sie die Logeinträge, die von Ihrem Dienst erstellt wurden:

    gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.workflows.workflow.v1.created."'
    
  2. Suchen Sie nach einem Logeintrag wie dem Folgenden:

    message: 'Received event of type google.cloud.workflows.workflow.v1.created.
    Event data: {"@type":"type.googleapis.com/google.events.cloud.workflows.v1.WorkflowEventData","payload":{"name":"projects/PROJECT_ID/locations/us-central1/workflows/example-workflow","state":"ACTIVE"...
    

Sie haben einen Eventarc Advanced-Bus und eine Anmeldung erstellt, die Veröffentlichung von Ereignissen aus Google-Quellen aktiviert, einen Workflow erstellt, um einen unterstützten Ereignistyp von einem Google-Anbieter zu generieren, und dann das erwartete Ergebnis in den Logs des Ereignisempfängerdienstes überprüft.

Bereinigen

Entfernen Sie Ressourcen, die zuvor mit Ihrer Terraform-Konfiguration angewendet wurden, indem Sie den folgenden Befehl ausführen und an der Eingabeaufforderung yes eingeben:

terraform destroy

Sie können auch Ihr Google Cloud Projekt löschen, um wiederkehrende Gebühren zu vermeiden. Wenn Sie Ihr Google Cloud Projekt löschen, wird die Abrechnung für alle in diesem Projekt verwendeten Ressourcen beendet.

  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 auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Herunterfahren), um das Projekt zu löschen.

Nächste Schritte