I modelli flessibili di Dataflow consentono di pacchettizzare una pipeline Dataflow per il deployment. Questo tutorial mostra come creare un modello flessibile Dataflow e quindi eseguire un job Dataflow utilizzando questo modello.
Obiettivi
- Crea un modello flessibile Dataflow.
- Utilizza il modello per eseguire un job Dataflow.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.
Prima di iniziare
- 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.
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
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.
-
-
Verify that billing is enabled for your Google Cloud project.
-
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
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
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 the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
-
Install the Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init
-
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.
-
-
Verify that billing is enabled for your Google Cloud project.
-
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
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
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 the following:
PROJECT_ID
: your project ID.USER_IDENTIFIER
: the identifier for your user account—for example,myemail@example.com
.ROLE
: the IAM role that you grant to your user account.
Concedi ruoli al account di servizio Compute Engine predefinito. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM:
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
Sostituisci quanto segue:
PROJECT_ID
: il tuo ID progettoPROJECT_NUMBER
il tuo numero di progettoSERVICE_ACCOUNT_ROLE
: ogni singolo ruolo
Scarica e installa la versione 17 del Java Development Kit (JDK). Verifica che la variabile di ambiente
JAVA_HOME
sia impostata e punti all'installazione di JDK.Scarica e installa Apache Maven seguendo la guida all'installazione di Maven per il tuo sistema operativo specifico.
Clona il repository
java-docs-samples
.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vai al esempio di codice per questo tutorial.
cd java-docs-samples/dataflow/flex-templates/getting_started
Crea il progetto Java in un file Uber JAR.
mvn clean package
Questo file Uber JAR ha tutte le dipendenze incorporate. Puoi eseguire questo file come applicazione autonoma senza dipendenze esterne da altre librerie.
Clona il repository
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vai al esempio di codice per questo tutorial.
cd python-docs-samples/dataflow/flex-templates/getting_started
Clona il repository
golang-samples
.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vai al esempio di codice per questo tutorial.
cd golang-samples/dataflow/flex-templates/wordcount
Compila il binario Go.
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o wordcount .
Utilizza il comando
gcloud artifacts repositories create
per creare un nuovo repository Artifact Registry.gcloud artifacts repositories create REPOSITORY \ --repository-format=docker \ --location=LOCATION
Sostituisci quanto segue:
- REPOSITORY: un nome per il repository. I nomi dei repository devono essere univoci per ogni posizione del repository in un progetto.
- LOCATION: la posizione regionale o multiregionale per il repository.
Utilizza il comando
gcloud auth configure-docker
per configurare Docker in modo da autenticare le richieste per Artifact Registry. Questo comando aggiorna la configurazione Docker, in modo da poterti connettere ad Artifact Registry per eseguire il push delle immagini.gcloud auth configure-docker LOCATION-docker.pkg.dev
- Un'immagine container Docker che contiene il codice della pipeline. Per i modelli flessibili Java e Python, l'immagine Docker viene creata e ne viene eseguito il push nel repository Artifact Registry quando esegui il comando
gcloud dataflow flex-template build
. - Un file di specifica del modello. Questo file è un documento JSON che contiene la posizione dell'immagine container e i metadati relativi al modello, ad esempio i parametri della pipeline.
- BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
- LOCATION: la posizione
- PROJECT_ID: l' Google Cloud ID progetto
- REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza
- BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
- LOCATION: la posizione
- PROJECT_ID: l' Google Cloud ID progetto
- REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza
Utilizza il comando
gcloud builds submit
per creare l'immagine Docker utilizzando un Dockerfile con Cloud Build. Questo comando crea il file ed esegue il push nel repository Artifact Registry.gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .
Sostituisci quanto segue:
- LOCATION: la posizione
- PROJECT_ID: l' Google Cloud ID progetto
- REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza
Utilizza il comando
gcloud dataflow flex-template build
per creare un modello flessibile denominatowordcount-go.json
nel tuo bucket Cloud Storage.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"
Sostituisci BUCKET_NAME con il nome del bucket Cloud Storage che hai creato in precedenza.
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizza il modello flessibile.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"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
- REGION: la regione
- LABELS: (Facoltativo) Etichette associate al tuo lavoro, utilizzando il formato
<key1>=<val1>,<key2>=<val2>,...
Per visualizzare lo stato del job Dataflow nella consoleGoogle Cloud , vai alla pagina Job di Dataflow.
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizza il modello flessibile.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"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
- REGION: la regione
- LABELS: (Facoltativo) Etichette associate al tuo lavoro, utilizzando il formato
<key1>=<val1>,<key2>=<val2>,...
Per visualizzare lo stato del job Dataflow nella consoleGoogle Cloud , vai alla pagina Job di Dataflow.
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizza il modello flessibile.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"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
- REGION: la regione
- LABELS: (Facoltativo) Etichette associate al tuo lavoro, utilizzando il formato
<key1>=<val1>,<key2>=<val2>,...
Per visualizzare lo stato del job Dataflow nella consoleGoogle Cloud , vai alla pagina Job di Dataflow.
-
Elimina il bucket Cloud Storage e tutti gli oggetti al suo interno.
gcloud storage rm gs://BUCKET_NAME --recursive
-
Elimina il repository Artifact Registry.
gcloud artifacts repositories delete REPOSITORY \ --location=LOCATION
-
Revoca i ruoli che hai concesso all'account di servizio Compute Engine predefinito. Esegui il seguente comando una volta per ciascuno dei seguenti
ruoli IAM:
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
-
Optional: Revoke the authentication credentials that you created, and delete the local credential file.
gcloud auth application-default revoke
-
Optional: Revoke credentials from the gcloud CLI.
gcloud auth revoke
- Scopri come configurare i modelli flessibili.
- Consulta l'elenco dei modelli forniti da Google.
Prepara l'ambiente
Installa l'SDK e tutti i requisiti per l'ambiente di sviluppo.
Java
Python
Installa l'SDK Apache Beam per Python.
Vai
Utilizza la guida al download e all'installazione di Go per scaricare e installare Go per il tuo sistema operativo specifico. Per scoprire quali ambienti di runtime Go sono supportati da Apache Beam, consulta Supporto del runtime Apache Beam.
Scarica il esempio di codice.
Java
Python
Vai
Crea un bucket Cloud Storage
Utilizza il comando gcloud storage buckets create
per creare un bucket Cloud Storage:
gcloud storage buckets create gs://BUCKET_NAME
Sostituisci BUCKET_NAME
con un nome per il tuo bucket Cloud Storage. I nomi dei bucket Cloud Storage devono essere
univoci a livello globale e soddisfare i
requisiti di denominazione dei bucket.
Crea un repository Artifact Registry
Crea un repository Artifact Registry in cui eseguire il push dell'immagine del container Docker per il modello.
I modelli flessibili possono utilizzare anche immagini archiviate in registri privati. Per saperne di più, vedi Utilizzare un'immagine di un registro privato.
Crea il modello flessibile
In questo passaggio, utilizzi il comando
gcloud dataflow flex-template build
per creare il modello flessibile.
Un modello flessibile è costituito dai seguenti componenti:
Il repository di esempio in GitHub contiene il file metadata.json
.
Per estendere il modello con metadati aggiuntivi,
puoi creare il tuo file metadata.json
.
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"
Sostituisci quanto segue:
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"
Sostituisci quanto segue:
Vai
Esegui il modello flessibile
In questo passaggio, utilizzi il modello per eseguire un job Dataflow.
Java
Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt
nel bucket Cloud Storage.
Python
Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt
nel bucket Cloud Storage.
Vai
Se il job viene eseguito correttamente, scrive l'output in un file denominato
gs://BUCKET_NAME/samples/dataflow/templates/count.txt
nel
bucket Cloud Storage.
Esegui la pulizia
Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.
Elimina il progetto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID