Flexible Vorlage erstellen und ausführen


Mit flexiblen Vorlagen lässt sich eine Dataflow-Pipeline für die Bereitstellung verpacken. In dieser Anleitung erfahren Sie, wie Sie eine flexible Dataflow-Vorlage erstellen und dann mit dieser Vorlage einen Dataflow-Job ausführen.

Ziele

  • Erstellen Sie eine flexible Dataflow-Vorlage.
  • Verwenden Sie die Vorlage, um einen Dataflow-Job auszuführen.

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.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
  7. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  8. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Make sure that billing is enabled for your Google Cloud project.

  13. Enable the Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build API:

    gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
  14. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

  15. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  16. Weisen Sie Ihrem Compute Engine-Standarddienstkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:

    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE

    Ersetzen Sie Folgendes:

    • PROJECT_ID: Ihre Projekt-ID.
    • PROJECT_NUMBER ihre Projektnummer
    • SERVICE_ACCOUNT_ROLE: Jede einzelne Rolle

Umgebung vorbereiten

Installieren Sie das SDK und alle erforderlichen Komponenten für Ihre Entwicklungsumgebung.

Java

  1. Laden Sie das Java Development Kit (JDK) Version 11 herunter und installieren Sie es. Prüfen Sie, ob die Umgebungsvariable JAVA_HOME festgelegt ist und auf Ihre JDK-Installation verweist.

  2. Laden Sie Apache Maven herunter und installieren Sie es entsprechend der Maven-Installationsanleitung für Ihr Betriebssystem.

Python

Installieren Sie das Apache Beam SDK für Python.

Go

Verwenden Sie die Anleitung zum Herunterladen und Installieren von Go, um Go für Ihr Betriebssystem herunterzuladen und zu installieren. Informationen dazu, welche Go-Laufzeitumgebungen von Apache Beam unterstützt werden, finden Sie unter Unterstützung von Apache Beam-Laufzeiten.

Laden Sie das Codebeispiel herunter.

Java

  1. Klonen Sie das java-docs-samples-Repository.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
  2. Rufen Sie das Codebeispiel für diese Anleitung auf.

    cd java-docs-samples/dataflow/flex-templates/getting_started
  3. Erstellen Sie das Java-Projekt in einer Uber-JAR-Datei.

    mvn clean package

    In dieser Uber-JAR-Datei sind alle Abhängigkeiten eingebettet. Sie können diese Datei als eigenständige Anwendung ausführen, in der andere Bibliotheken keine externen Abhängigkeiten haben.

Python

  1. Klonen Sie das python-docs-samples-Repository.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
  2. Rufen Sie das Codebeispiel für diese Anleitung auf.

    cd python-docs-samples/dataflow/flex-templates/getting_started

Go

  1. Klonen Sie das golang-samples-Repository.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
  2. Rufen Sie das Codebeispiel für diese Anleitung auf.

    cd golang-samples/dataflow/flex-templates/wordcount
  3. Kompilieren Sie das Go-Binärprogramm.

    CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .

Cloud Storage-Bucket erstellen

Verwenden Sie den Befehl gcloud storage buckets create, um einen Cloud Storage-Bucket zu erstellen:

gcloud storage buckets create gs://BUCKET_NAME

Ersetzen Sie BUCKET_NAME durch einen Namen für Ihr Cloud Storage-Bucket. Cloud Storage-Bucket-Namen müssen global einmalig sein und die Anforderungen für Bucket-Namen erfüllen.

Artifact Registry-Repository erstellen

Erstellen Sie ein Artifact Registry-Repository, in das Sie das Docker-Container-Image für die Vorlage pushen.

  1. Verwenden Sie den Befehl gcloud artifacts repositories create, um ein neues Artifact Registry-Repository zu erstellen.

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

    Ersetzen Sie Folgendes:

    • REPOSITORY ist ein Name für Ihr Repository. Repository-Namen müssen für jeden Repository-Speicherort in einem Projekt einmalig sein.
    • LOCATION ist der regionale oder multiregionale Standort für das Repository.
  2. Konfigurieren Sie Docker mit dem Befehl gcloud auth configure-docker für die Authentifizierung von Anfragen für Artifact Registry. Mit diesem Befehl wird Ihre Docker-Konfiguration aktualisiert, damit Sie eine Verbindung zu Artifact Registry herstellen und Images per Push übertragen können.

    gcloud auth configure-docker LOCATION-docker.pkg.dev

Flex-Vorlagen können auch Images verwenden, die in privaten Registries gespeichert sind. Weitere Informationen finden Sie unter Image aus einer privaten Registry verwenden.

Erstellen Sie die flexible Vorlage

In diesem Schritt erstellen Sie die Flex-Vorlage mit dem Befehl gcloud dataflow flex-template build.

Eine flexible Vorlage besteht aus folgenden Komponenten:

  • Ein Docker-Container-Image, in dem Ihr Pipelinecode verpackt ist. Bei Java- und Python-Flex-Vorlagen wird das Docker-Image erstellt und in Ihr Artifact Registry-Repository übertragen, wenn Sie den Befehl gcloud dataflow flex-template build ausführen.
  • Eine Vorlagenspezifikationsdatei. Diese Datei ist ein JSON-Dokument, das den Speicherort des Container-Images sowie Metadaten zur Vorlage enthält, z. B. Pipelineparameter.

Das Beispiel-Repository auf GitHub enthält die metadata.json-Datei.

Wenn Sie Ihre Vorlage um zusätzliche Metadaten erweitern möchten, können Sie eine eigene metadata.json-Datei erstellen.

Java

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-java.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-java:latest" \
 --sdk-language "JAVA" \
 --flex-template-base-image JAVA11 \
 --metadata-file "metadata.json" \
 --jar "target/flex-template-getting-started-1.0.jar" \
 --env FLEX_TEMPLATE_JAVA_MAIN_CLASS="com.example.dataflow.FlexTemplateGettingStarted"

Ersetzen Sie Folgendes:

  • BUCKET_NAME: der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
  • LOCATION: der Standort
  • PROJECT_ID: die Google Cloud-Projekt-ID
  • REPOSITORY: Name des Artifact Registry-Repositorys, das Sie zuvor erstellt haben.

Python

gcloud dataflow flex-template build gs://BUCKET_NAME/getting_started-py.json \
 --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/getting-started-python:latest" \
 --sdk-language "PYTHON" \
 --flex-template-base-image "PYTHON3" \
 --metadata-file "metadata.json" \
 --py-path "." \
 --env "FLEX_TEMPLATE_PYTHON_PY_FILE=getting_started.py" \
 --env "FLEX_TEMPLATE_PYTHON_REQUIREMENTS_FILE=requirements.txt"

Ersetzen Sie Folgendes:

  • BUCKET_NAME: der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
  • LOCATION: der Standort
  • PROJECT_ID: die Google Cloud-Projekt-ID
  • REPOSITORY: Name des Artifact Registry-Repositorys, das Sie zuvor erstellt haben.

Go

  1. Verwenden Sie den Befehl gcloud builds submit, um das Docker-Image mithilfe eines Dockerfiles mit Cloud Build zu erstellen. Mit diesem Befehl wird die Datei erstellt und in Ihr Artifact Registry-Repository übertragen.

    gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .

    Ersetzen Sie Folgendes:

    • LOCATION: der Standort
    • PROJECT_ID: die Google Cloud-Projekt-ID
    • REPOSITORY: Name des Artifact Registry-Repositorys, das Sie zuvor erstellt haben.
  2. Verwenden Sie den Befehl gcloud dataflow flex-template build, um eine Flex-Vorlage mit dem Namen wordcount-go.json in Ihrem Cloud Storage-Bucket zu erstellen.

    gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \
      --image "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \
      --sdk-language "GO" \
      --metadata-file "metadata.json"

    Ersetzen Sie BUCKET_NAME durch den Namen des zuvor erstellten Cloud Storage-Buckets.

Flexible Vorlage ausführen

In diesem Schritt führen Sie mit der Vorlage einen Dataflow-Job aus.

Java

  1. Verwenden Sie den Befehl gcloud dataflow flex-template run, um einen Dataflow-Job auszuführen, der die flexible Vorlage verwendet.

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-java.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --additional-user-labels "LABELS" \
     --region "REGION"

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Cloud Storage-Bucket, den Sie zuvor erstellt haben.
    • REGION: Die Region.
    • LABELS: Optional. Labels, die dem Job im Format <key1>=<val1>,<key2>=<val2>,... hinzugefügt wurden
  2. Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in der Google Cloud Console anzuzeigen.

    Zu Jobs

Wenn der Job erfolgreich ausgeführt wird, wird die Ausgabe in eine Datei mit dem Namen gs://BUCKET_NAME/output--00000-of-00001.txt in Ihrem Cloud Storage-Bucket geschrieben.

Python

  1. Verwenden Sie den Befehl gcloud dataflow flex-template run, um einen Dataflow-Job auszuführen, der die flexible Vorlage verwendet.

    gcloud dataflow flex-template run "getting-started-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/getting_started-py.json" \
     --parameters output="gs://BUCKET_NAME/output-" \
     --additional-user-labels "LABELS" \
     --region "REGION"

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
    • REGION: Die Region.
    • LABELS: Optional. Labels, die dem Job im Format <key1>=<val1>,<key2>=<val2>,... hinzugefügt wurden
  2. Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in der Google Cloud Console anzuzeigen.

    Zu Jobs

Wenn der Job erfolgreich ausgeführt wird, wird die Ausgabe in eine Datei mit dem Namen gs://BUCKET_NAME/output--00000-of-00001.txt in Ihrem Cloud Storage-Bucket geschrieben.

Go

  1. Verwenden Sie den Befehl gcloud dataflow flex-template run, um einen Dataflow-Job auszuführen, der die flexible Vorlage verwendet.

    gcloud dataflow flex-template run "wordcount-go-`date +%Y%m%d-%H%M%S`" \
     --template-file-gcs-location "gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json" \
     --parameters output="gs://BUCKET_NAME/samples/dataflow/templates/counts.txt" \
     --additional-user-labels "LABELS" \
     --region "REGION"

    Ersetzen Sie Folgendes:

    • BUCKET_NAME: der Name des Cloud Storage-Bucket, den Sie zuvor erstellt haben.
    • REGION: Die Region.
    • LABELS: Optional. Labels, die dem Job im Format <key1>=<val1>,<key2>=<val2>,... hinzugefügt wurden
  2. Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in der Google Cloud Console anzuzeigen.

    Zu Jobs

Wenn der Job erfolgreich ausgeführt wird, wird die Ausgabe in eine Datei namens gs://BUCKET_NAME/samples/dataflow/templates/count.txt in Ihrem Cloud Storage-Bucket geschrieben.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

  1. Löschen Sie den Cloud Storage-Bucket und alle Objekte im Bucket.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. Löschen Sie das Artifact Registry-Repository.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. Widerrufen Sie die Rollen, die Sie dem Compute Engine-Standarddienstkonto zugewiesen haben. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
    • roles/dataflow.admin
    • roles/dataflow.worker
    • roles/storage.objectAdmin
    • roles/artifactregistry.writer
    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=SERVICE_ACCOUNT_ROLE
  4. Optional: Revoke the authentication credentials that you created, and delete the local credential file.

    gcloud auth application-default revoke
  5. Optional: Revoke credentials from the gcloud CLI.

    gcloud auth revoke

Wie geht es weiter?