In dieser Anleitung geht es um flexible Vorlagen. Sie erfahren, wie Sie eine containerisierte Datenpipeline in Dataflow erstellen und ausführen. Sie erfahren, wie Sie Ihre Pipelines mit einer Beispiel-Flex-Vorlage für eine effiziente Bereitstellung verpacken.
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.
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.
Hinweis
- 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.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die Dataflow API, die Compute Engine API, die Logging API, die Cloud Storage API, die Cloud Storage JSON API, die Resource Manager API und die Artifact Registry 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 Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
-
Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID.USER_IDENTIFIER: Die Kennung für Ihr Nutzerkonto . Beispiel:myemail@example.comROLE: Die IAM-Rolle, die Sie Ihrem Nutzerkonto zuweisen.
-
Installieren Sie die Google Cloud CLI.
-
Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.
-
Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init -
Erstellen Sie ein Google Cloud Projekt oder wählen Sie eines aus.
Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind
- Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können jedes Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
-
Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (
roles/resourcemanager.projectCreator), die die Berechtigungresourcemanager.projects.createenthält. Weitere Informationen zum Zuweisen von Rollen
-
So erstellen Sie ein Google Cloud -Projekt:
gcloud projects create PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch einen Namen für das Google Cloud -Projekt, das Sie erstellen. -
Wählen Sie das von Ihnen erstellte Google Cloud Projekt aus:
gcloud config set project PROJECT_ID
Ersetzen Sie
PROJECT_IDdurch den Namen Ihres Projekts in Google Cloud .
-
Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.
Aktivieren Sie die Dataflow API, die Compute Engine API, die Logging API, die Cloud Storage API, die Cloud Storage JSON API, die Resource Manager API und die Artifact Registry 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 Berechtigungserviceusage.services.enableenthält. Weitere Informationen zum Zuweisen von Rollengcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com
-
Wenn Sie eine lokale Shell verwenden, erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Nutzerkonto:
gcloud auth application-default login
Wenn Sie Cloud Shell verwenden, müssen Sie das nicht tun.
Wenn ein Authentifizierungsfehler zurückgegeben wird und Sie einen externen Identitätsanbieter (IdP) verwenden, prüfen Sie, ob Sie sich mit Ihrer föderierten Identität in der gcloud CLI angemeldet haben.
-
Weisen Sie Ihrem Nutzerkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus:
roles/iam.serviceAccountUsergcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Ersetzen Sie Folgendes:
PROJECT_ID: Ihre Projekt-ID.USER_IDENTIFIER: Die Kennung für Ihr Nutzerkonto . Beispiel:myemail@example.comROLE: Die IAM-Rolle, die Sie Ihrem Nutzerkonto zuweisen.
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.adminroles/dataflow.workerroles/storage.objectAdminroles/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_NUMBERIhre Google Cloud ProjektnummerSERVICE_ACCOUNT_ROLE: Jede einzelne Rolle
Umgebung für flexible Vorlagen vorbereiten
Installieren Sie das SDK und alle Anforderungen für Ihre Entwicklungsumgebung.
Java
Laden Sie das Java Development Kit (JDK) Version 17 herunter und installieren Sie es. Prüfen Sie, ob die Umgebungsvariable
JAVA_HOMEfestgelegt ist und auf Ihre JDK-Installation verweist.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
Klonen Sie das
java-docs-samples-Repository.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Rufen Sie das Codebeispiel für diese Anleitung auf.
cd java-docs-samples/dataflow/flex-templates/getting_started
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
Klonen Sie das
python-docs-samples-Repository.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Rufen Sie das Codebeispiel für diese Anleitung auf.
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
Klonen Sie das
golang-samples-Repository.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Rufen Sie das Codebeispiel für diese Anleitung auf.
cd golang-samples/dataflow/flex-templates/wordcount
Kompilieren Sie das Go-Binärprogramm.
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .
Cloud Storage-Bucket für Ihre Datenpipeline 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 übertragen.
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.
Verwenden Sie den Befehl
gcloud auth configure-docker, um Docker für die Authentifizierung von Anfragen für Artifact Registry zu konfigurieren. Durch diesen Befehl wird Ihre Docker-Konfiguration aktualisiert, sodass Sie eine Verbindung zu Artifact Registry herstellen können, um Images per Push zu übertragen.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.
Flexible Dataflow-Vorlage erstellen
In diesem Schritt verwenden Sie den Befehl gcloud dataflow flex-template build, um die flexible Vorlage zu erstellen.
Eine flexible Vorlage besteht aus folgenden Komponenten:
- Ein Docker-Container-Image, in dem Ihr Pipelinecode verpackt ist und das eine containerisierte Datenpipeline bildet. 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 buildausfü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 Datei metadata.json.
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 JAVA17 \ --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
gcloud dataflow flex-template build gs://BUCKET_NAME/samples/dataflow/templates/wordcount-go.json \ --image-gcr-path "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest" \ --sdk-language "GO" \ --flex-template-base-image "GO" \ --metadata-file "metadata.json" \ --go-binary-path="." \ --env "FLEX_TEMPLATE_GO_BINARY=wordcount"
Ersetzen Sie Folgendes:
- BUCKET_NAME: Der Name des Cloud Storage-Bucket, 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.
Flexible Vorlage ausführen
In diesem Schritt verwenden Sie die Vorlage, um einen Dataflow-Job auszuführen.
Java
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-" \ --region "REGION"
Ersetzen Sie Folgendes:
- BUCKET_NAME: der Name des Cloud Storage-Bucket, den Sie zuvor erstellt haben.
- REGION: Die Region.
Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in derGoogle Cloud Console anzusehen.
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
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-" \ --region "REGION"
Ersetzen Sie Folgendes:
- BUCKET_NAME: der Name des Cloud Storage-Buckets, den Sie zuvor erstellt haben.
- REGION: Die Region.
Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in derGoogle Cloud Console anzusehen.
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
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" \ --region "REGION"
Ersetzen Sie Folgendes:
- BUCKET_NAME: der Name des Cloud Storage-Bucket, den Sie zuvor erstellt haben.
- REGION: Die Region.
Rufen Sie die Dataflow-Seite Jobs auf, um den Status des Dataflow-Jobs in derGoogle Cloud Console anzusehen.
Wenn der Job erfolgreich ausgeführt wird, wird die Ausgabe in eine Datei mit dem Namen gs://BUCKET_NAME/samples/dataflow/templates/count.txt in Ihrem Cloud Storage-Bucket geschrieben.
Wenn Ihr Job nicht ausgeführt werden kann und Sie die folgende Fehlermeldung erhalten, lesen Sie die Informationen unter Fehlerbehebung bei Zeitüberschreitungen bei Flex-Vorlagen.
A Timeout in polling error message
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
Google Cloud -Projekt löschen:
gcloud projects delete PROJECT_ID
Einzelne Ressourcen löschen
-
Löschen Sie den Cloud Storage-Bucket und alle Objekte im Bucket.
gcloud storage rm gs://BUCKET_NAME --recursive
-
Löschen Sie das Artifact Registry-Repository.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
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.adminroles/dataflow.workerroles/storage.objectAdminroles/artifactregistry.writer
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
Optional: Widerrufen Sie die von Ihnen erstellten Anmeldedaten für die Authentifizierung und löschen Sie die lokale Datei mit den Anmeldedaten:
gcloud auth application-default revoke
-
Optional: Widerrufen Sie Anmeldedaten von der gcloud-CLI.
gcloud auth revoke
Nächste Schritte
- Flexible Vorlagen zum Verpacken einer Dataflow-Pipeline verwenden
- Von Google bereitgestellte Vorlagen für gängige Anwendungsfälle.