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

In dieser Kurzanleitung wird gezeigt, wie Sie mit Terraform einen Eventarc Advanced-Bus und eine Registrierung in Ihrem Google Cloud -Projekt erstellen, damit Sie Ereignisnachrichten veröffentlichen und empfangen können.

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

  • Bei einer Registrierung werden Nachrichten, die über den Bus empfangen werden, über eine Verarbeitungspipeline an ein oder mehrere Ziele weitergeleitet.

In dieser Kurzanleitung werden folgende Schritte erläutert:

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

  2. Eventarc Advanced-Bus erstellen

  3. Aktivieren Sie Ereignisse aus Google-Quellen.

  4. Eventarc Advanced-Pipeline und Registrierung erstellen

  5. Veröffentlichen Sie eine Ereignisnachricht im Bus, indem Sie einen Workflow erstellen.

  6. Rufen Sie die Ereignisdaten in den Cloud Run-Logs auf.

Sie können die meisten Schritte in dieser Kurzanleitung mit Terraform ausführen. Wenn Sie alle Schritte mit der Google Cloud CLI ausführen möchten, lesen Sie den Abschnitt Ereignisse aus einer Google-Quelle veröffentlichen.

Weitere Informationen zur Verwendung von Terraform finden Sie in der Dokumentation Terraform auf Google Cloud.

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 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. 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, if any are not already enabled.

    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, if any are not already enabled.

    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 eingebunden. 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.

Bereitstellung von Terraform vorbereiten

Bevor Sie Terraform-Ressourcen bereitstellen, müssen Sie eine Terraform-Konfigurationsdatei erstellen. Mit einer Terraform-Konfigurationsdatei können Sie den bevorzugten Endzustand für Ihre Infrastruktur mithilfe der Terraform-Syntax definieren.

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts von Google Cloud .

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

  2. Jede Terraform-Konfigurationsdatei muss ein eigenes Verzeichnis haben (auch als Stammmodul bezeichnet). 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 Erweiterung .tf haben. In diesem Schnellstart ist die Konfigurationsdatei beispielsweise main.tf.

Terraform-Konfiguration definieren

Kopieren Sie die folgenden Terraform-Code-Snippets in Ihre main.tf-Datei. 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 Terraform-Ressource google_project_service, 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 für Testzwecke ein dediziertes Dienstkonto und weisen Sie ihm bestimmte IAM-Rollen zu.

Verwenden Sie die Terraform-Ressourcen google_service_account und google_project_iam_member, 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 Terraform-Ressource google_cloud_run_v2_service, um einen Cloud Run-Dienst als Ereignisziel zu erstellen, der den Inhalt eines Ereignisses protokolliert:

# 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 von einer Nachrichtenquelle oder die von einem Anbieter veröffentlicht wurden, und fungiert als Nachrichtenrouter. Weitere Informationen finden Sie unter Bus zum Weiterleiten von Nachrichten erstellen.

Verwenden Sie die Terraform-Ressource google_eventarc_message_bus, 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 Terraform-Ressource google_eventarc_google_api_source, 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 haben außerdem die Möglichkeit, alle übereinstimmenden Ereignisse vor ihrer Übermittlung an das Ziel umzuwandeln.

Verwenden Sie die Terraform-Ressource google_eventarc_pipeline, 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 Dienstkontos wird verwendet, um ein OIDC-Token zu generieren.

Eventarc Advanced-Registrierung erstellen

Eine Anmeldung bestimmt, welche Nachrichten an ein Ziel weitergeleitet werden, und gibt auch die Pipeline an, die zum Konfigurieren eines Ziels für die Ereignisnachrichten verwendet wird. Weitere Informationen finden Sie unter Registrierung erstellen, um Ereignisse zu empfangen.

Verwenden Sie die Terraform-Ressource google_eventarc_enrollment, um eine Registrierung 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 Abgleichsausdruck für die Registrierung verwendet die Common Expression Language (CEL), um Ereignismeldungen zu veröffentlichen, wenn ein Workflow erstellt wird. In einem späteren Schritt erstellen Sie einen Workflow.

Wenden Sie die Terraform-Konfiguration an:

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

  1. Initialisieren Sie Terraform. Dies ist nur einmal pro Verzeichnis erforderlich.

    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 yes an der Eingabeaufforderung ein:

    terraform apply

    Normalerweise wenden Sie die gesamte Konfiguration auf einmal an. Sie können aber auch eine bestimmte Ressource als Ziel festlegen. Beispiel:

    terraform apply -target="google_eventarc_message_bus.default"

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

Ereignisnachricht über einen Workflow im Bus veröffentlichen

Workflows ist eine vollständig verwaltete Orchestrierungsplattform, die Dienste in einer von Ihnen definierten Reihenfolge ausführt: einem 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]}'
    

    In diesem Workflow wird die Region, in der der Workflow bereitgestellt wird, an die Wikipedia API übergeben und eine Liste ähnlicher Wikipedia-Artikel zurückgegeben.

  3. Stellen Sie den Workflow mit dem Befehl gcloud workflows deploy 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. So filtern Sie die von Ihrem Dienst erstellten Logeinträge:

    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 Registrierung erstellt, die Veröffentlichung von Ereignissen aus Google-Quellen aktiviert, einen Workflow zum Generieren eines unterstützten Ereignistyps von einem Google-Anbieter erstellt und 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 yes an der Eingabeaufforderung 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 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.

Nächste Schritte