Cloud Run-Job mit Workflows ausführen


Mit Workflows können Sie Cloud Run-Jobs als Teil eines Workflows um eine komplexere Datenverarbeitung durchzuführen oder ein System vorhandener Jobs zu orchestrieren.

In dieser Anleitung wird gezeigt, wie Sie mit Workflows eine Cloud Run-Job, der als Umgebung übergebene Daten verarbeitet an den Job als Reaktion auf ein Ereignis aus Cloud Storage.

Sie können die Ereignisdaten auch in einem Bucket, mit dem Sie die Daten mithilfe von vom Kunden verwaltete Verschlüsselungsschlüssel Weitere Informationen finden Sie unter Cloud Run-Job ausführen, der in Cloud Storage gespeicherte Ereignisdaten verarbeitet

Lernziele

In dieser Anleitung werden Sie:

  1. Cloud Run-Job erstellen, der Datendateien in einem Cloud Storage-Bucket.
  2. Stellen Sie einen Workflow bereit, der Folgendes ausführt: <ph type="x-smartling-placeholder">
      </ph>
    1. Akzeptiert ein Cloud Storage-Ereignis als Argument.
    2. Prüft, ob der im Ereignis angegebene Cloud Storage-Bucket angegeben ist ist derselbe Bucket, der auch vom Cloud Run-Job verwendet wird.
    3. Wenn ja, verwenden Sie den Cloud Run Admin API-Connector. um den Cloud Run-Job auszuführen.
  3. Eventarc-Trigger erstellen, der den Workflow daraufhin ausführt auf Ereignisse, die sich auf den Cloud Storage-Bucket auswirken.
  4. Lösen Sie den Workflow aus, indem Sie eine Eingabedatendatei im Cloud Storage-Bucket.

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 Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweise

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.

Console

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch 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.

    Go to project selector

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.

    Aktivieren Sie die APIs

  5. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Workflows Invoker.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

    6. Click Continue.
    7. Click Done to finish creating the service account.

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

    Go to project selector

  7. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  8. Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs aktivieren.

    Aktivieren Sie die APIs

  9. Create a service account:

    1. In the Google Cloud console, go to the Create service account page.

      Go to Create service account
    2. Select your project.
    3. In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.

      In the Service account description field, enter a description. For example, Service account for quickstart.

    4. Click Create and continue.
    5. Grant the following roles to the service account: Cloud Run Admin, Eventarc Event Receiver, Logs Writer, Workflows Invoker.

      To grant a role, find the Select a role list, then select the role.

      To grant additional roles, click Add another role and add each additional role.

    6. Click Continue.
    7. Click Done to finish creating the service account.

  10. Bevor Sie einen Trigger für direkte Ereignisse aus Cloud Storage erstellen, gewähren Pub/Sub Publisher-Rolle (roles/pubsub.publisher) für den Cloud Storage-Dienst-Agent:
    1. Wechseln Sie in der Google Cloud Console zur IAM-Seite.

      IAM aufrufen

    2. Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.
    3. Suchen Sie in der Spalte Hauptkonto nach Cloud Storage Dienst-Agent mit dem Formular service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com, Klicken Sie dann auf Bearbeiten Hauptkonto in die entsprechende Zeile ein.
    4. Klicken Sie entweder auf Rolle hinzufügen. oder Weitere Rolle hinzufügen
    5. Filtern Sie in der Liste Rolle auswählen nach Pub/Sub-Publisher und wählen Sie die Rolle.
    6. Klicken Sie auf Speichern.
  11. Wenn Sie den Cloud Pub/Sub-Dienst-Agent auf oder vor dem 8. April 2021, um authentifizierte Pub/Sub-Push-Vorgänge zu unterstützen anfragen, gewähren Sie dem Service Rolle „Kontotoken-Ersteller“ (roles/iam.serviceAccountTokenCreator) an den Dienst-Agent gesendet. Andernfalls wird diese Rolle standardmäßig gewährt: <ph type="x-smartling-placeholder">
      </ph>
    1. Wechseln Sie in der Google Cloud Console zur IAM-Seite.

      IAM aufrufen

    2. Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.
    3. Suchen Sie in der Spalte Name nach der Cloud Pub/Sub-Dienstkonto Klicken Sie dann auf Bearbeiten Hauptkonto in die entsprechende Zeile ein.
    4. Klicken Sie entweder auf Rolle hinzufügen. oder Weitere Rolle hinzufügen
    5. Filtern Sie in der Liste Rolle auswählen nach Ersteller von Dienstkonto-Token und wählen Sie die Rolle aus.
    6. Klicken Sie auf Speichern.
  12. 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.

  13. Cloud Shell unterstützt die /dev/urandom-Befehle in zum Generieren von Pseudozufallszahlen.

gcloud

  1. So verwenden Sie bereits ein Onlineterminal mit der gcloud CLI aktivieren Sie Cloud Shell:

    Unten auf dieser Seite wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Das Initialisieren der Sitzung kann einige Sekunden dauern.

    Cloud Shell unterstützt die /dev/urandom-Befehle in zum Generieren von Pseudozufallszahlen.

  2. Google Cloud-Projekt erstellen oder auswählen.
    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID
    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID
  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
  4. Aktivieren Sie die Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        storage.googleapis.com \
        workflows.googleapis.com
  5. Dienstkonto für Ihren Workflow zur Authentifizierung erstellen mit anderen Google Cloud-Diensten verknüpfen und ihm die entsprechenden Rollen zuweisen.
    1. Erstellen Sie das Dienstkonto:
      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
      

      Ersetzen Sie SERVICE_ACCOUNT_NAME durch einen Namen für das Dienstkonto.

    2. Weisen Sie dem nutzerverwalteten Dienstkonto Rollen zu, das Sie im vorherigen Schritt. Führen Sie den folgenden Befehl jeweils einmal aus: IAM-Rollen oder das Flag --role verwenden mehrere Male mit einem einzigen Befehl:
      • roles/eventarc.eventReceiver: zum Empfangen von Ereignissen
      • roles/logging.logWriter: zum Schreiben von Logs
      • roles/run.admin: zum Ausführen von Cloud Run Job
      • roles/workflows.invoker: zum Aufrufen von Workflows
      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
          --role=ROLE
      

      Ersetzen Sie Folgendes:

      • PROJECT_ID: die ID des Projekts, in dem Sie das Dokument erstellt haben das Dienstkonto
      • ROLE: die Rolle, die dem vom Nutzer verwalteten Konto zugewiesen werden soll Dienstkonto
  6. Bevor Sie einen Trigger für direkte Ereignisse aus Cloud Storage erstellen, Pub/Sub- Publisher-Rolle (roles/pubsub.publisher) für den Cloud Storage-Dienst-Agent:

    SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:${SERVICE_ACCOUNT}" \
        --role='roles/pubsub.publisher'
    
  7. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem von Google verwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zu. Andernfalls wird diese Rolle standardmäßig zugewiesen:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  8. Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

Terraform

  1. So verwenden Sie bereits ein Onlineterminal mit der gcloud CLI aktivieren Sie Cloud Shell:

    Unten auf dieser Seite wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Das Initialisieren der Sitzung kann einige Sekunden dauern.

    Cloud Shell unterstützt die /dev/urandom-Befehle in zum Generieren von Pseudozufallszahlen.

  2. Google Cloud-Projekt erstellen oder auswählen.
    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID
    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID
  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
  4. Aktivieren Sie die Artifact Registry, Cloud Build, Cloud Run, Cloud Storage, Eventarc, and Workflows APIs:
    gcloud services enable artifactregistry.googleapis.com \
        cloudbuild.googleapis.com \
        eventarc.googleapis.com \
        run.googleapis.com \
        storage.googleapis.com \
        workflows.googleapis.com
  5. Dienstkonto für Ihren Workflow zur Authentifizierung erstellen mit anderen Google Cloud-Diensten verknüpfen und ihm die entsprechenden Rollen zuweisen. Zur Unterstützung direkter Ereignisse aus Cloud Storage Pub/Sub- Publisher-Rolle (roles/pubsub.publisher) für den Cloud Storage-Dienst-Agent.

    Ändern Sie die Datei main.tf wie im folgenden Beispiel gezeigt. Weitere Informationen finden Sie in der Dokumentation zum Google-Anbieter für Terraform

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

    In einem typischen Terraform-Workflow wenden Sie den gesamten Plan einmal. In dieser Anleitung können Sie jedoch zu einer bestimmten Ressource. Beispiel:

    terraform apply -target="google_service_account.workflows"

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a dedicated service account
    resource "google_service_account" "workflows" {
      account_id   = "workflows-run-job-sa"
      display_name = "Workflows Cloud Run Job 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.workflows.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.workflows.email}"
    }
    
    # Grant permission to execute Cloud Run jobs
    resource "google_project_iam_member" "runadmin" {
      project = data.google_project.project.id
      role    = "roles/run.admin"
      member  = "serviceAccount:${google_service_account.workflows.email}"
    }
    
    # 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.workflows.email}"
    }
    
    # Grant the Cloud Storage service agent 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}"
    }
    
  6. Wenn Sie den Cloud Pub/Sub-Dienst-Agent am oder vor dem 8. April 2021 aktiviert haben, um authentifizierte Pub/Sub-Push-Anfragen zu unterstützen, weisen Sie dem von Google verwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zu. Andernfalls wird diese Rolle standardmäßig zugewiesen:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  7. Ersetzen Sie PROJECT_NUMBER durch Ihre Google Cloud-Projektnummer. Sie finden Ihre Projektnummer auf der Willkommensseite der Google Cloud Console oder durch Ausführen des folgenden Befehls:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

Cloud Run-Job erstellen

In dieser Anleitung wird ein Cloud Run-Beispieljob aus GitHub verwendet. Der Job liest Daten aus einer Eingabedatei in Cloud Storage und führt einige jede Zeile in der Datei zu verarbeiten.

  1. Rufen Sie den Beispielcode ab, indem Sie das Repository der Beispiel-App in Ihr lokales Computer:

    git clone https://github.com/GoogleCloudPlatform/jobs-demos.git
    

    Alternativ können Sie Beispiel als ZIP-Datei herunterladen und extrahieren sie.

  2. Wechseln Sie zu dem Verzeichnis, das den Beispielcode enthält:

    cd jobs-demos/parallel-processing
    
  3. Cloud Storage-Bucket zum Speichern einer Eingabedatei erstellen, die in das geschrieben wird und ein Ereignis ausgelöst wird:

    Console

    1. Wechseln Sie in der Cloud Console zur Seite Cloud Storage-Buckets.

      Buckets aufrufen

    2. Klicken Sie auf Hinzufügen Erstellen.
    3. Geben Sie auf der Seite Bucket erstellen einen Namen für den Bucket ein:
      input-PROJECT_ID
      Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekt
    4. Behalten Sie die anderen Standardeinstellungen bei.
    5. Klicken Sie auf Erstellen.

    gcloud

    Führen Sie den gcloud storage buckets create-Befehl:

    gcloud storage buckets create gs://input-PROJECT_ID

    Wenn die Anfrage erfolgreich ist, gibt der Befehl die folgende Meldung zurück:

    Creating gs://input-PROJECT_ID/...

    Terraform

    Verwenden Sie zum Erstellen eines Cloud Storage-Bucket die Methode google_storage_bucket Ressource und ändern Sie die Datei main.tf wie in der folgenden Beispiel.

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

    In einem typischen Terraform-Workflow wird der gesamte Plan angewendet. auf einmal. In dieser Anleitung können Sie jedoch zu einer bestimmten Ressource. Beispiel:

    terraform apply -target="random_id.bucket_name_suffix"
    und
    terraform apply -target="google_storage_bucket.default"

    # 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                        = "input-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location                    = "us-central1"
      storage_class               = "STANDARD"
      force_destroy               = false
      uniform_bucket_level_access = true
    }
  4. Erstellen Sie ein Artifact Registry-Standard-Repository zum Speichern Ihrer Container-Image:

    Console

    1. Rufen Sie in der Google Cloud Console Artifact Registry auf Seite Repositories:

      Zu Repositories

    2. Klicken Sie auf . Repository erstellen

    3. Geben Sie einen Namen für das Repository ein, z. B. my-repo. Repository-Namen können für jeden Repository-Speicherort in einem Projekt nur einmal vorkommen.

    4. Behalten Sie das Standardformat bei. Dieses sollte Docker sein.

    5. Behalten Sie den Standardmodus bei. Dieser sollte Standard lauten.

    6. Wählen Sie als Region us-central1 (Iowa) aus.

    7. Behalten Sie alle anderen Standardeinstellungen bei.

    8. Klicken Sie auf Erstellen.

    gcloud

    Führen Sie diesen Befehl aus:

    gcloud artifacts repositories create REPOSITORY \
        --repository-format=docker \
        --location=us-central1

    Ersetzen Sie REPOSITORY durch einen eindeutigen Namen für die Repository, z. B. my-repo. Für jeden Repository-Speicherort in einem Projekt verwenden, müssen Repository-Namen eindeutig sein.

    Terraform

    Verwenden Sie zum Erstellen eines Artifact Registry-Repositorys die Methode google_artifact_registry_repository-Ressource und ändern Sie die Datei main.tf wie im folgenden Beispiel gezeigt.

    In einem typischen Terraform-Workflow wenden Sie den gesamten Plan einmal. In dieser Anleitung können Sie jedoch zu einer bestimmten Ressource. Beispiel:

    terraform apply -target="google_artifact_registry_repository.default"

    # Create an Artifact Registry repository
    resource "google_artifact_registry_repository" "default" {
      location      = "us-central1"
      repository_id = "my-repo"
      format        = "docker"
    }
  5. Erstellen Sie das Container-Image mit einem standardmäßigen Google Cloud-Buildpack:

    export SERVICE_NAME=parallel-job
    gcloud builds submit \
        --pack image=us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/${SERVICE_NAME}
    

    Ersetzen Sie REPOSITORY durch den Namen Ihres Artifact Registry-Repository.

    Es kann einige Minuten dauern, bis der Build abgeschlossen ist.

  6. Erstellen Sie einen Cloud Run-Job, der das Container-Image bereitstellt:

    Console

    1. Rufen Sie in der Google Cloud Console Cloud Run auf. Seite:

      Zu Cloud Run

    2. Klicken Sie auf Job erstellen, um das Formular Job erstellen aufzurufen.

      1. Wählen Sie im Formular us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest als Artifact Registry-Container-Image-URL.
      2. Optional: Geben Sie als Jobnamen parallel-job ein.
      3. Optional: Wählen Sie für die Region us-central1 (Iowa) aus.
      4. Geben Sie für die Anzahl der Tasks, die Sie in dem Job ausführen möchten, 10 Alle Aufgaben müssen erfolgreich sein, damit der Job erfolgreich sein kann. Von werden die Aufgaben parallel ausgeführt.
    3. Maximieren Sie den Bereich Container, Variablen und Secrets, Verbindungen, Sicherheit und behalten alle Standardeinstellungen bei, mit Ausnahme der folgenden: Einstellungen:

      1. Klicken Sie auf den Tab Allgemein.

        1. Geben Sie für den Containerbefehl python ein.
        2. Geben Sie für das Containerargument process.py ein.
      2. Klicken Sie auf den Tab Variablen und Secrets.

        1. Klicken Sie auf Variable hinzufügen und geben Sie INPUT_BUCKET für das Name und input-PROJECT_ID für den Wert.
        2. Klicken Sie auf Variable hinzufügen und geben Sie INPUT_FILE für das name und input_file.txt für den Wert.
    4. Klicken Sie auf Erstellen, um den Job zu erstellen.

    gcloud

    1. Legen Sie die Cloud Run-Standardregion fest:

      gcloud config set run/region us-central1
    2. Erstellen Sie den Cloud Run-Job:

      gcloud run jobs create parallel-job \
          --image us-central1-docker.pkg.dev/PROJECT_ID/REPOSITORY/parallel-job:latest \
          --command python \
          --args process.py \
          --tasks 10 \
          --set-env-vars=INPUT_BUCKET=input-PROJECT_ID,INPUT_FILE=input_file.txt

      Wenn Sie kein Tag für Image-Tag, Artifact Registry sucht nach dem Image mit dem Standard-latest-Tag.

      Eine vollständige Liste der beim Erstellen eines Jobs verfügbaren Optionen finden Sie unter den Befehl gcloud run Jobs create Befehlszeilendokumentation.

      Sobald der Job erstellt wurde, sollten Sie eine Meldung mit dem Hinweis sehen, Erfolg haben.

    Terraform

    Verwenden Sie zum Erstellen eines Cloud Run-Jobs die Methode google_cloud_run_v2_job-Ressource und ändern Sie die Datei main.tf wie im folgenden Beispiel gezeigt.

    In einem typischen Terraform-Workflow wenden Sie den gesamten Plan einmal. In dieser Anleitung können Sie jedoch zu einer bestimmten Ressource. Beispiel:

    terraform apply -target="google_cloud_run_v2_job.default"

    # Create a Cloud Run job
    resource "google_cloud_run_v2_job" "default" {
      name     = "parallel-job"
      location = "us-central1"
    
      template {
        task_count = 10
        template {
          containers {
            image   = "us-central1-docker.pkg.dev/${data.google_project.project.name}/${google_artifact_registry_repository.default.repository_id}/parallel-job:latest"
            command = ["python"]
            args    = ["process.py"]
            env {
              name  = "INPUT_BUCKET"
              value = google_storage_bucket.default.name
            }
            env {
              name  = "INPUT_FILE"
              value = "input_file.txt"
            }
          }
        }
      }
    }

Workflow bereitstellen, der den Cloud Run-Job ausführt

Workflow definieren und bereitstellen, der den Cloud Run-Job ausführt die Sie gerade erstellt haben. Eine Workflow-Definition besteht aus einer Reihe von Schritten mit der Workflows-Syntax:

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Workflows:

    Zur Seite "Workflows"

  2. Klicken Sie auf Erstellen.

  3. Geben Sie einen Namen für den neuen Workflow ein, z. B. cloud-run-job-workflow.

  4. Wählen Sie als Region us-central1 (Iowa) aus.

  5. Wählen Sie im Feld Dienstkonto das Dienstkonto aus, erstellt haben.

    Das Dienstkonto dient als Identität des Workflows. Sie sollten wurde dem Dienstkonto bereits die Rolle Cloud Run-Administrator zugewiesen. damit der Workflow den Cloud Run-Job ausführen kann.

  6. Klicken Sie auf Weiter.

  7. Geben Sie im Workflow-Editor die folgende Definition für Ihr Workflow:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${event.data.bucket}
                    - event_file: ${event.data.name}
                    - target_bucket: ${"input-" + project_id}
                    - job_name: parallel-job
                    - job_location: us-central1
            - check_input_file:
                switch:
                    - condition: ${event_bucket == target_bucket}
                      next: run_job
                    - condition: true
                      next: end
            - run_job:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  8. Klicken Sie auf Bereitstellen.

gcloud

  1. Erstellen Sie eine Quellcodedatei für Ihren Workflow:

    touch cloud-run-job-workflow.yaml
    
  2. Kopieren Sie die folgende Workflowdefinition in Ihre Quellcodedatei:

    main:
        params: [event]
        steps:
            - init:
                assign:
                    - project_id: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                    - event_bucket: ${event.data.bucket}
                    - event_file: ${event.data.name}
                    - target_bucket: ${"input-" + project_id}
                    - job_name: parallel-job
                    - job_location: us-central1
            - check_input_file:
                switch:
                    - condition: ${event_bucket == target_bucket}
                      next: run_job
                    - condition: true
                      next: end
            - run_job:
                call: googleapis.run.v1.namespaces.jobs.run
                args:
                    name: ${"namespaces/" + project_id + "/jobs/" + job_name}
                    location: ${job_location}
                    body:
                        overrides:
                            containerOverrides:
                                env:
                                    - name: INPUT_BUCKET
                                      value: ${event_bucket}
                                    - name: INPUT_FILE
                                      value: ${event_file}
                result: job_execution
            - finish:
                return: ${job_execution}
  3. Stellen Sie den Workflow bereit. Geben Sie hierzu den folgenden Befehl ein:

    gcloud workflows deploy cloud-run-job-workflow \
        --location=us-central1 \
        --source=cloud-run-job-workflow.yaml \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    

    Ersetzen Sie Folgendes:

    • SERVICE_ACCOUNT_NAME: der Name von das zuvor erstellte Dienstkonto
    • PROJECT_ID: die ID Ihres Google Cloud-Projekt

    Das Dienstkonto dient als Identität des Workflows. Sie sollten dem Dienstkonto bereits die Rolle roles/run.admin zugewiesen, sodass damit der Workflow den Cloud Run-Job ausführen kann.

Terraform

Verwenden Sie zum Erstellen eines Workflows die Methode google_workflows_workflow-Ressource und ändern Sie die Datei main.tf wie im folgenden Beispiel gezeigt.

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

In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. In dieser Anleitung können Sie jedoch . Beispiel:

terraform apply -target="google_workflows_workflow.default"

# Create a workflow
resource "google_workflows_workflow" "default" {
  name        = "cloud-run-job-workflow"
  region      = "us-central1"
  description = "Workflow that routes a Cloud Storage event and executes a Cloud Run job"

  # Note that $$ is needed for Terraform
  source_contents = <<EOF
  main:
      params: [event]
      steps:
          - init:
              assign:
                  - project_id: $${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                  - event_bucket: $${event.data.bucket}
                  - event_file: $${event.data.name}
                  - target_bucket: "${google_storage_bucket.default.name}"
                  - job_name: parallel-job
                  - job_location: us-central1
          - check_input_file:
              switch:
                  - condition: $${event_bucket == target_bucket}
                    next: run_job
                  - condition: true
                    next: end
          - run_job:
              call: googleapis.run.v1.namespaces.jobs.run
              args:
                  name: $${"namespaces/" + project_id + "/jobs/" + job_name}
                  location: $${job_location}
                  body:
                      overrides:
                          containerOverrides:
                              env:
                                  - name: INPUT_BUCKET
                                    value: $${event_bucket}
                                  - name: INPUT_FILE
                                    value: $${event_file}
              result: job_execution
          - finish:
              return: $${job_execution}
  EOF
}

Der Workflow umfasst folgende Schritte:

  1. Schritt init: Akzeptiert ein Cloud Storage-Ereignis als Argument und dann legt die notwendigen Variablen fest.

  2. Schritt check_input_file: Prüft, ob der Cloud Storage-Bucket Der im Ereignis angegebene Bucket ist der vom Cloud Run-Job verwendete Bucket.

    • Wenn ja, fährt der Workflow mit Schritt run_job fort.
    • Falls nein, wird der Workflow beendet und die weitere Verarbeitung wird angehalten.
  3. Schritt run_job: Verwendet die Methode des Cloud Run Admin API-Connectors Methode googleapis.run.v1.namespaces.jobs.run um den Job auszuführen. Die Namen des Cloud Storage-Bucket und der Datendatei lauten: werden als Überschreibungsvariablen vom Workflow an den Job übergeben.

  4. Schritt finish: Gibt Informationen zur Jobausführung als Ergebnis von für den Workflow.

Eventarc-Trigger für den Workflow erstellen

Damit der Workflow automatisch ausgeführt wird und Cloud Run wird bei jeder Aktualisierung der Eingabedatendatei ein Eventarc erstellt. Trigger, der auf Cloud Storage-Ereignisse im Bucket reagiert mit der Eingabedatendatei.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Workflows:

    Zur Seite "Workflows"

  2. Klicken Sie auf den Namen des Workflows, z. B. cloud-run-job-workflow.

  3. Klicken Sie auf der Seite Workflowdetails auf Bearbeiten:

  4. Gehen Sie auf der Seite Workflow bearbeiten im Bereich Trigger so vor: Klicken Sie auf Neuen Trigger hinzufügen > Eventarc

    Der Bereich Eventarc-Trigger wird geöffnet.

  5. Geben Sie im Feld Triggername einen Namen für den Trigger ein, z. B. cloud-run-job-workflow-trigger

  6. Wählen Sie in der Liste Ereignisanbieter die Option Cloud Storage aus.

  7. Wählen Sie in der Liste Ereignis google.cloud.storage.object.v1.finalized

  8. Wählen Sie im Feld Bucket den Bucket mit den Eingabedaten aus. -Datei. Der Bucket-Name hat das Format input-PROJECT_ID

  9. Wählen Sie im Feld Dienstkonto das Dienstkonto aus, erstellt haben.

    Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:

    • Eventarc Event Receiver (Empfänger von Eventarc-Ereignissen): zum Empfangen von Ereignissen
    • Workflows-Aufrufer: zum Ausführen von Workflows
  10. Klicken Sie auf Trigger speichern.

    Der Eventarc-Trigger wird jetzt unter Trigger angezeigt. auf der Seite Workflow bearbeiten.

  11. Klicken Sie auf Weiter.

  12. Klicken Sie auf Bereitstellen.

gcloud

Erstellen Sie einen Eventarc-Trigger mit dem folgenden Befehl:

gcloud eventarc triggers create cloud-run-job-workflow-trigger \
    --location=us \
    --destination-workflow=cloud-run-job-workflow  \
    --destination-workflow-location=us-central1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=input-PROJECT_ID" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Ersetzen Sie Folgendes:

  • PROJECT_ID ist die ID Ihres Google Cloud-Projekts
  • SERVICE_ACCOUNT_NAME: der Name des Dienstes das Sie zuvor erstellt haben.

Das Dienstkonto dient als Identität des Triggers. Sie sollten dem Dienstkonto bereits die folgenden Rollen zugewiesen:

  • roles/eventarc.eventReceiver: zum Empfangen von Ereignissen
  • roles/workflows.invoker: Zum Ausführen von Workflows

Terraform

Verwenden Sie zum Erstellen eines Triggers die Methode google_eventarc_trigger-Ressource und ändern Sie die Datei main.tf wie im folgenden Beispiel gezeigt.

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

In einem typischen Terraform-Workflow wird der gesamte Plan auf einmal angewendet. In dieser Anleitung können Sie jedoch . Beispiel:

terraform apply -target="google_eventarc_trigger.default"

# Create an Eventarc trigger that routes Cloud Storage events to Workflows
resource "google_eventarc_trigger" "default" {
  name     = "cloud-run-job-trigger"
  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.workflows.email

}

Immer wenn eine Datei in den Cloud Storage hochgeladen oder überschrieben wird Bucket mit der Eingabedatendatei enthält, wird der Workflow mit der Methode entsprechendes Cloud Storage-Ereignis als Argument.

Workflow auslösen

Testen Sie das End-to-End-System, indem Sie die Eingabedatendatei in Cloud Storage

  1. Neue Daten für die Eingabedatei generieren und in Cloud Storage hochladen an dem vom Cloud Run-Job erwarteten Standort:

    base64 /dev/urandom | head -c 100000 >input_file.txt
    gsutil cp input_file.txt gs://input-PROJECT_ID/input_file.txt
    

    Wenn Sie einen Cloud Storage-Bucket mit Terraform erstellt haben, können Sie Rufen Sie den Namen des Buckets ab, indem Sie den folgenden Befehl ausführen:

    gcloud storage buckets list gs://input*
    

    Die Ausführung des Cloud Run-Jobs kann einige Minuten dauern.

  2. Prüfen Sie, ob der Cloud Run-Job wie erwartet ausgeführt wurde, indem Sie die Jobausführungen:

    gcloud config set run/region us-central1
    gcloud run jobs executions list --job=parallel-job
    

    In der Ausgabe sollte eine erfolgreiche Jobausführung angezeigt werden, die darauf hinweist, dass 10/10 Aufgaben wurden abgeschlossen.

Weitere Informationen zu Einen Workflow mit Ereignissen oder Pub/Sub-Nachrichten auslösen

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.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  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.

Anleitungsressourcen löschen

Löschen Sie die Ressourcen, die Sie in dieser Anleitung erstellt haben:

  1. Löschen Sie den Eventarc-Trigger:

    gcloud eventarc triggers delete cloud-run-job-workflow-trigger --location=us
    
  2. Löschen Sie den Workflow:

    gcloud workflows delete cloud-run-job-workflow --location=us-central1
    
  3. Löschen Sie den Cloud Run-Job:

    gcloud run jobs delete parallel-job
    
  4. Löschen Sie den Cloud Storage-Bucket, der für die Eingabedaten erstellt wurde:

    gcloud storage rm --recursive gs://input-PROJECT_ID/
    
  5. Löschen Sie das Artifact Registry-Repository:

    gcloud artifacts repositories delete REPOSITORY --location=us-central1
    

Nächste Schritte