Trigger mit Terraform erstellen

In diesem Dokument wird beschrieben, wie Sie mit Terraform und der google_eventarc_trigger-Ressource Eventarc-Trigger für die folgenden Google Cloud-Ziele erstellen:

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

In den Codebeispielen in dieser Anleitung werden direkte Ereignisse aus Cloud Storage weitergeleitet. Sie können jedoch für jeden Ereignisanbieter angepasst werden. Ein Beispiel dafür, wie Sie direkte Ereignisse aus Pub/Sub an Cloud Run weiterleiten, finden Sie in der Terraform-Kurzanleitung.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch 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.
  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. Verify that billing is enabled for your Google Cloud project.

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

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

  6. Aktivieren Sie die Cloud Resource Manager API und die Identity and Access Management (IAM) API.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Weitere Informationen zum Zuweisen von Rollen

    APIs aktivieren

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

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

Terraform-Bereitstellung 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 mit der Terraform-Syntax definieren.

Cloud Shell vorbereiten

Legen Sie in Cloud Shell das Standardprojekt Google Cloud fest, auf das Sie Ihre Terraform-Konfigurationen 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.

Verzeichnis vorbereiten

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

Der Dateiname muss die Erweiterung .tf haben. In diesem Dokument wird die Datei beispielsweise als main.tf bezeichnet.

Terraform-Konfiguration definieren

Kopieren Sie die entsprechenden Terraform-Codebeispiele in die neu erstellte main.tf-Datei. Optional können Sie den Code aus GitHub kopieren. Dies wird empfohlen, wenn das Terraform-Snippet Teil einer End-to-End-Lösung ist.

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_trigger.default"

Beachten Sie, dass in den Terraform-Codebeispielen Interpolation für Substitutionen wie Referenzvariablen, Attribute von Ressourcen und Aufruffunktionen verwendet wird.

APIs aktivieren

Bei Terraform-Beispielen wird in der Regel davon ausgegangen, dass die erforderlichen APIs in Ihrem Projekt inGoogle Cloud aktiviert sind. Verwenden Sie den folgenden Code, um die APIs zu aktivieren:

Cloud Run

# Enable Cloud Run API
resource "google_project_service" "run" {
  service            = "run.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

GKE

# Enable GKE API
resource "google_project_service" "container" {
  service            = "container.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

Workflows

# Enable Workflows API
resource "google_project_service" "workflows" {
  service            = "workflows.googleapis.com"
  disable_on_destroy = false
}

# Enable Eventarc API
resource "google_project_service" "eventarc" {
  service            = "eventarc.googleapis.com"
  disable_on_destroy = false
}

# Enable Pub/Sub API
resource "google_project_service" "pubsub" {
  service            = "pubsub.googleapis.com"
  disable_on_destroy = false
}

Dienstkonto erstellen und Zugriff konfigurieren

Jeder Eventarc-Trigger ist zum Zeitpunkt der Erstellung des Triggers mit einem IAM-Dienstkonto verknüpft. Verwenden Sie den folgenden Code, um ein dediziertes Dienstkonto zu erstellen und dem vom Nutzer verwalteten Dienstkonto bestimmte Rollen für die Identitäts- und Zugriffsverwaltung zum Verwalten von Ereignissen zuzuweisen:

Cloud Run

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

# Create a dedicated service account
resource "google_service_account" "default" {
  account_id   = "eventarc-trigger-sa"
  display_name = "Eventarc Trigger 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}"
}

Der Pub/Sub-Dienst-Agent wird automatisch erstellt, wenn die Pub/Sub API aktiviert ist. Wenn der Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 erstellt wurde und das Dienstkonto nicht die Cloud Pub/Sub Service Agent-Rolle (roles/pubsub.serviceAgent) hat, weisen Sie dem Dienst-Agent die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zu. Weitere Informationen finden Sie unter Rollen erstellen und ihnen Dienst-Agents zuweisen.

resource "google_project_iam_member" "tokencreator" {
  project  = data.google_project.project.id
  role     = "roles/iam.serviceAccountTokenCreator"
  member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}

GKE

  1. Aktivieren Sie Eventarc, damit GKE-Cluster verwaltet werden können, bevor Sie das Dienstkonto erstellen:

    # Used to retrieve project_number later
    data "google_project" "project" {}
    
    # Enable Eventarc to manage GKE clusters
    # This is usually done with: gcloud eventarc gke-destinations init
    #
    # Eventarc creates a separate Event Forwarder pod for each trigger targeting a
    # GKE service, and  requires explicit permissions to make changes to the
    # cluster. This is done by granting permissions to a special service account
    # (the Eventarc P4SA) to manage resources in the cluster. This needs to be done
    # once per Google Cloud project.
    
    # This identity is created with: gcloud beta services identity create --service eventarc.googleapis.com
    # This local variable is used for convenience
    locals {
      eventarc_sa = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-eventarc.iam.gserviceaccount.com"
    }
    
    resource "google_project_iam_member" "computeViewer" {
      project = data.google_project.project.id
      role    = "roles/compute.viewer"
      member  = local.eventarc_sa
    }
    
    resource "google_project_iam_member" "containerDeveloper" {
      project = data.google_project.project.id
      role    = "roles/container.developer"
      member  = local.eventarc_sa
    }
    
    resource "google_project_iam_member" "serviceAccountAdmin" {
      project = data.google_project.project.id
      role    = "roles/iam.serviceAccountAdmin"
      member  = local.eventarc_sa
    }
  2. Erstellen Sie das Dienstkonto:

    # Create a service account to be used by GKE trigger
    resource "google_service_account" "eventarc_gke_trigger_sa" {
      account_id   = "eventarc-gke-trigger-sa"
      display_name = "Evenarc GKE Trigger 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.eventarc_gke_trigger_sa.email}"
    }
    
    # Grant permission to subscribe to Pub/Sub topics
    resource "google_project_iam_member" "pubsubscriber" {
      project = data.google_project.project.id
      role    = "roles/pubsub.subscriber"
      member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
    }
    

Workflows

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

# Create a service account for Eventarc trigger and Workflows
resource "google_service_account" "eventarc" {
  account_id   = "eventarc-workflows-sa"
  display_name = "Eventarc Workflows Service Account"
}

# Grant permission to invoke Workflows
resource "google_project_iam_member" "workflowsinvoker" {
  project = data.google_project.project.id
  role    = "roles/workflows.invoker"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

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

# Grant permission to write logs
resource "google_project_iam_member" "logwriter" {
  project = data.google_project.project.id
  role    = "roles/logging.logWriter"
  member  = "serviceAccount:${google_service_account.eventarc.email}"
}

Der Pub/Sub-Dienst-Agent wird automatisch erstellt, wenn die Pub/Sub API aktiviert ist. Wenn der Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 erstellt wurde und das Dienstkonto nicht die Cloud Pub/Sub-Dienst-Agent-Rolle (roles/pubsub.serviceAgent) hat, weisen Sie dem Dienst-Agent die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zu. Weitere Informationen finden Sie unter Rollen erstellen und ihnen Dienst-Agents zuweisen.

resource "google_project_iam_member" "tokencreator" {
  project  = data.google_project.project.id
  role     = "roles/iam.serviceAccountTokenCreator"
  member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
}

Cloud Storage-Bucket als Ereignisanbieter erstellen

Verwenden Sie den folgenden Code, um einen Cloud Storage-Bucket zu erstellen und dem Cloud Storage-Dienst-Agent die Pub/Sub-Publisher-Rolle (roles/pubsub.publisher) zuzuweisen.

Cloud Run

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-cloudrun-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_cloud_run_v2_service.default.location
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"

  depends_on = [data.google_storage_project_service_account.gcs_account]
}

GKE

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-gke-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = "us-central1"
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish pub/sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

Workflows

# Cloud Storage bucket names must be globally unique
resource "random_id" "bucket_name_suffix" {
  byte_length = 4
}

# Create a Cloud Storage bucket
resource "google_storage_bucket" "default" {
  name          = "trigger-workflows-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
  location      = google_workflows_workflow.default.region
  force_destroy = true

  uniform_bucket_level_access = true
}

# Grant the Cloud Storage service account permission to publish Pub/Sub topics
data "google_storage_project_service_account" "gcs_account" {}
resource "google_project_iam_member" "pubsubpublisher" {
  project = data.google_project.project.id
  role    = "roles/pubsub.publisher"
  member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
}

Ereignisempfänger als Ereignisziel erstellen

Erstellen Sie einen Ereignisempfänger mit einer der folgenden Terraform-Ressourcen:

Cloud Run

Cloud Run-Dienst als Ereignisziel für den Eventarc-Trigger erstellen:

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

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # This container will log received events
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.default.email
  }

  depends_on = [google_project_service.run]
}

GKE

Um diesen Leitfaden zu vereinfachen, erstellen Sie einen Google Kubernetes Engine-Dienst als Ereignisziel außerhalb von Terraform, zwischen dem Anwenden von Terraform-Konfigurationen.

  1. Wenn Sie noch keinen Trigger in diesem Google Cloud -Projekt erstellt haben, führen Sie den folgenden Befehl aus, um den Eventarc-Dienst-Agent zu erstellen:

    gcloud beta services identity create --service eventarc.googleapis.com
  2. Erstellen Sie einen GKE-Cluster.

    # Create an auto-pilot GKE cluster
    resource "google_container_cluster" "gke_cluster" {
      name     = "eventarc-cluster"
      location = "us-central1"
    
      enable_autopilot = true
    
      depends_on = [
        google_project_service.container
      ]
    }
  3. Kubernetes-Dienst in GKE bereitstellen, der HTTP-Anfragen und Log-Ereignisse mit einem vordefinierten Cloud Run-Image empfängt: us-docker.pkg.dev/cloudrun/container/hello:

    1. Rufen Sie die Anmeldedaten für die Authentifizierung ab, um mit dem Cluster zu interagieren:

      gcloud container clusters get-credentials eventarc-cluster \
         --region=us-central1
      
    2. Erstellen Sie ein Deployment mit dem Namen hello-gke:

      kubectl create deployment hello-gke \
         --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Geben Sie das Deployment als Kubernetes-Dienst frei:

      kubectl expose deployment hello-gke \
         --type ClusterIP --port 80 --target-port 8080
      
    4. Prüfen Sie, ob der Pod ausgeführt wird:

      kubectl get pods
      

      Die Ausgabe sollte in etwa so aussehen:

      NAME                         READY   STATUS    RESTARTS   AGE
      hello-gke-5b6574b4db-rzzcr   1/1     Running   0          2m45s
      

      Wenn STATUS Pending oder ContainerCreating ist, wird der Pod bereitgestellt. Warten Sie eine Minute, bis die Bereitstellung abgeschlossen ist, und prüfen Sie den Status noch einmal.

    5. Prüfen Sie, ob der Dienst ausgeführt wird:

      kubectl get svc
      

      Die Ausgabe sollte in etwa so aussehen:

      NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
      hello-gke    ClusterIP   34.118.230.123   <none>        80/TCP    4m46s
      kubernetes   ClusterIP   34.118.224.1     <none>        443/TCP   14m
      

Workflows

Workflow bereitstellen, der ausgeführt wird, wenn ein Objekt im Cloud Storage-Bucket aktualisiert wird:

# Create a workflow
resource "google_workflows_workflow" "default" {
  name            = "storage-workflow-tf"
  region          = "us-central1"
  description     = "Workflow that returns information about storage events"
  service_account = google_service_account.eventarc.email

  deletion_protection = false # set to "true" in production

  # Note that $$ is needed for Terraform
  source_contents = <<EOF
  main:
    params: [event]
    steps:
      - log_event:
          call: sys.log
          args:
            text: $${event}
            severity: INFO
      - gather_data:
          assign:
            - bucket: $${event.data.bucket}
            - name: $${event.data.name}
            - message: $${"Received event " + event.type + " - " + bucket + ", " + name}
      - return_data:
          return: $${message}
  EOF

  depends_on = [
    google_project_service.workflows
  ]
}

Eventarc-Trigger definieren

Ein Eventarc-Trigger leitet Ereignisse von einem Ereignisanbieter an ein Ereignisziel weiter. Verwenden Sie die google_eventarc_trigger-Ressource, um CloudEvents-Attribute in matching_criteria anzugeben und die Ereignisse zu filtern. Weitere Informationen finden Sie in der Anleitung zum Erstellen eines Triggers für einen bestimmten Anbieter und Ereignistyp und ein bestimmtes Ziel. Ereignisse, die mit allen Filtern übereinstimmen, werden an das Ziel gesendet.

Cloud Run

Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den Cloud Run-Dienst hello-event weiterleitet.

# Create an Eventarc trigger, routing Cloud Storage events to Cloud Run
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-cloudrun-tf"
  location = google_cloud_run_v2_service.default.location

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Cloud Run
  destination {
    cloud_run_service {
      service = google_cloud_run_v2_service.default.name
      region  = google_cloud_run_v2_service.default.location
    }
  }

  # Specify a single delivery attempt with no retries
  retry_policy {
    max_attempts = 1
  }

  service_account = google_service_account.default.email
  depends_on = [
    google_project_service.eventarc,
    google_storage_bucket.default,
    google_project_iam_member.pubsubpublisher
  ]
}

GKE

Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den GKE-Dienst hello-gke weiterleitet.

# Create an Eventarc trigger, routing Storage events to GKE
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-gke-tf"
  location = "us-central1"

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to GKE service
  destination {
    gke {
      cluster   = "eventarc-cluster"
      location  = "us-central1"
      namespace = "default"
      path      = "/"
      service   = "hello-gke"
    }
  }

  service_account = google_service_account.eventarc_gke_trigger_sa.email
}

Workflows

Erstellen Sie einen Eventarc-Trigger, der Cloud Storage-Ereignisse an den Workflow mit dem Namen storage-workflow-tf weiterleitet.

# Create an Eventarc trigger, routing Cloud Storage events to Workflows
resource "google_eventarc_trigger" "default" {
  name     = "trigger-storage-workflows-tf"
  location = google_workflows_workflow.default.region

  # Capture objects changed in the bucket
  matching_criteria {
    attribute = "type"
    value     = "google.cloud.storage.object.v1.finalized"
  }
  matching_criteria {
    attribute = "bucket"
    value     = google_storage_bucket.default.name
  }

  # Send events to Workflows
  destination {
    workflow = google_workflows_workflow.default.id
  }

  service_account = google_service_account.eventarc.email

  depends_on = [
    google_project_service.eventarc,
    google_project_service.workflows,
  ]
}

Terraform anwenden

Verwenden Sie die Terraform-Befehlszeile, um Infrastruktur basierend auf der Konfigurationsdatei bereitzustellen.

Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.

  1. Initialisieren Sie Terraform. Dies ist nur einmal für jedes 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

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

Erstellung von Ressourcen prüfen

Cloud Run

  1. Prüfen Sie, ob der Dienst erstellt wurde:

    gcloud run services list --region us-central1
    
  2. Prüfen Sie, ob der Trigger erstellt wurde:

    gcloud eventarc triggers list --location us-central1
    

    Die Ausgabe sollte in etwa so aussehen:

    NAME: trigger-storage-cloudrun-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Cloud Run service: hello-events
    ACTIVE: Yes
    LOCATION: us-central1
    

GKE

  1. Prüfen Sie, ob der Dienst erstellt wurde:

    kubectl get service hello-gke
    
  2. Prüfen Sie, ob der Trigger erstellt wurde:

    gcloud eventarc triggers list --location us-central1
    

    Die Ausgabe sollte in etwa so aussehen:

    NAME: trigger-storage-gke-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: GKE: hello-gke
    ACTIVE: Yes
    LOCATION: us-central1
    

Workflows

  1. Prüfen Sie, ob der Workflow erstellt wurde:

    gcloud workflows list --location us-central1
    
  2. Prüfen Sie, ob der Eventarc-Trigger erstellt wurde:

    gcloud eventarc triggers list --location us-central1
    

    Die Ausgabe sollte in etwa so aussehen:

    NAME: trigger-storage-workflows-tf
    TYPE: google.cloud.storage.object.v1.finalized
    DESTINATION: Workflows: storage-workflow-tf
    ACTIVE: Yes
    LOCATION: us-central1
    

Ereignis erstellen und abrufen

Sie können ein Ereignis generieren und prüfen, ob der Eventarc-Trigger wie erwartet funktioniert.

  1. Rufen Sie den Namen des Cloud Storage-Bucket ab, den Sie zuvor erstellt haben:

    gcloud storage ls
    
  2. Laden Sie eine Textdatei in den Cloud Storage-Bucket hoch:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
    

    Ersetzen Sie BUCKET_NAME durch den Namen des Cloud Storage-Buckets, den Sie im vorherigen Schritt abgerufen haben. Beispiel:

    gcloud storage cp random.txt gs://BUCKET_NAME/random.txt

    Beim Upload wird ein Ereignis erstellt und der Ereignisempfängerdienst protokolliert die Nachricht des Ereignisses.

  3. Prüfen Sie, ob ein Ereignis empfangen wurde:

    Cloud Run

    1. So filtern Sie die von Ihrem Dienst erstellten Logeinträge:

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

      Received event of type google.cloud.storage.object.v1.finalized.
      Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
      

    GKE

    1. Suchen Sie die Pod-ID:

      POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
      

      Dieser Befehl verwendet die formatierte Ausgabe von kubectl.

    2. Prüfen Sie die Logs des Pods:

      kubectl logs $POD_NAME
      
    3. Suchen Sie nach einem Logeintrag wie dem Folgenden:

      {"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message":
      "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
      

    Workflows

    1. Prüfen Sie, ob eine Workflowausführung ausgelöst wird, indem Sie die letzten fünf Ausführungen auflisten lassen:

      gcloud workflows executions list storage-workflow-tf --limit=5
      

      Die Ausgabe sollte eine Liste der Ausführungen mit NAME, STATE, START_TIME und END_TIME enthalten.

    2. So rufen Sie die Ergebnisse der letzten Ausführung ab:

      EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)")
      gcloud workflows executions describe $EXECUTION_NAME
      
    3. Die Ausgabe sollte etwa so aussehen:

      ...
      result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"'
      startTime: '2024-12-13T17:23:50.451316533Z'
      state: SUCCEEDED
      ...
      

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. Durch das Löschen des Google Cloud -Projekts 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