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 tale modello.
Obiettivi
- Creare 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.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build.
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
Crea credenziali di autenticazione locali per il tuo Account Google:
gcloud auth application-default login
-
Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Sostituisci
PROJECT_ID
con l'ID progetto. - Sostituisci
EMAIL_ADDRESS
con il tuo indirizzo email. - Sostituisci
ROLE
con ogni singolo ruolo.
- Sostituisci
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
Crea o seleziona un progetto Google Cloud.
-
Crea un progetto Google Cloud:
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_ID
con un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con il nome del tuo progetto Google Cloud.
-
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Dataflow, Compute Engine, Logging, Cloud Storage, Cloud Storage JSON, Resource Manager, Artifact Registry, and Cloud Build.
gcloud services enable dataflow compute_component logging storage_component storage_api cloudresourcemanager.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com
-
Crea credenziali di autenticazione locali per il tuo Account Google:
gcloud auth application-default login
-
Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM:
roles/iam.serviceAccountUser
gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
- Sostituisci
PROJECT_ID
con l'ID progetto. - Sostituisci
EMAIL_ADDRESS
con il tuo indirizzo email. - Sostituisci
ROLE
con ogni singolo ruolo.
- Sostituisci
Concedi i ruoli all'account di servizio predefinito di Compute Engine. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
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
: l'ID progettoPROJECT_NUMBER
il numero di progettoSERVICE_ACCOUNT_ROLE
: ogni singolo ruolo
Prepara l'ambiente
Installa l'SDK e tutti i requisiti per il tuo ambiente di sviluppo.
Java
Scarica e installa la versione 11 del Java Development Kit (JDK). Verifica che la variabile di ambiente
JAVA_HOME
sia impostata e punti alla tua installazione JDK.Scarica e installa Apache Maven seguendo la guida all'installazione di Maven per il tuo sistema operativo specifico.
Python
Installa l'SDK Apache Beam per Python.
Go
Utilizza la guida al download e all'installazione di Go per scaricare e installare Go per il tuo sistema operativo specifico. Per sapere quali ambienti di runtime Go sono supportati da Apache Beam, consulta Assistenza per il runtime di Apache Beam.
Scarica l'esempio di codice.
Java
Clona il repository
java-docs-samples
.git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Vai all'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 contiene tutte le dipendenze. Puoi eseguire questo file come applicazione autonoma senza dipendenze esterne da altre librerie.
Python
Clona il repository
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Vai all'esempio di codice per questo tutorial.
cd python-docs-samples/dataflow/flex-templates/getting_started
Go
Clona il repository
golang-samples
.git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Vai all'esempio di codice per questo tutorial.
cd golang-samples/dataflow/flex-templates/wordcount
Compila il programma binario Go.
GOOS=linux GOARCH=amd64 go build -o wordcount .
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 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 eseguirai il push dell'immagine container Docker per il modello.
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 località del repository in un progetto.
- LOCATION: la località a livello di una o più regioni per il repository.
Utilizza il comando
gcloud auth configure-docker
per configurare Docker per autenticare le richieste per Artifact Registry. Questo comando aggiorna la configurazione Docker, in modo che tu possa connetterti ad Artifact Registry per il push delle immagini.gcloud auth configure-docker LOCATION-docker.pkg.dev
I modelli flessibili possono anche utilizzare immagini archiviate in registri privati. Per ulteriori informazioni, consulta Utilizzare un'immagine da un registro privato.
Crea il modello flessibile
In questo passaggio, utilizzerai il comando gcloud dataflow flex-template build
per creare il modello flessibile.
Un modello flessibile è costituito dai seguenti componenti:
- Un'immagine container Docker che pacchettizza il codice della pipeline.
Un file di specifica del modello. Questo file è un documento JSON che contiene la posizione dell'immagine container, oltre ai metadati sul modello, come i parametri della pipeline.
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"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage creato in precedenza
- LOCATION: la località
- PROJECT_ID: l'ID del progetto Google Cloud
- REPOSITORY: il nome del repository Artifact Registry creato in precedenza
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:
- BUCKET_NAME: il nome del bucket Cloud Storage creato in precedenza
- LOCATION: la località
- PROJECT_ID: l'ID del progetto Google Cloud
- REPOSITORY: il nome del repository Artifact Registry creato in precedenza
Go
Usa il comando
gcloud builds submit
per creare l'immagine Docker utilizzando un Dockerfile con Cloud Build. Questo comando crea il file ed ne 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 località
- PROJECT_ID: l'ID del progetto Google Cloud
- REPOSITORY: il nome del repository Artifact Registry creato in precedenza
Utilizza il comando
gcloud dataflow flex-template build
per creare un modello flessibile denominatowordcount-go.json
nel 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 creato in precedenza.
Esegui il modello flessibile
In questo passaggio, utilizzerai il modello per eseguire un job Dataflow.
Java
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizzi 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-" \ --region "REGION"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage creato in precedenza
- REGION: la regione
Per visualizzare lo stato del job Dataflow nella console Google Cloud, vai alla pagina Job di Dataflow.
Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt
nel tuo bucket Cloud Storage.
Python
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizzi 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-" \ --region "REGION"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage creato in precedenza
- REGION: la regione
Per visualizzare lo stato del job Dataflow nella console Google Cloud, vai alla pagina Job di Dataflow.
Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt
nel tuo bucket Cloud Storage.
Go
Utilizza il comando
gcloud dataflow flex-template run
per eseguire un job Dataflow che utilizzi 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" \ --region "REGION"
Sostituisci quanto segue:
- BUCKET_NAME: il nome del bucket Cloud Storage creato in precedenza
- REGION: la regione
Per visualizzare lo stato del job Dataflow nella console Google Cloud, vai alla pagina Job di Dataflow.
Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/samples/dataflow/templates/count.txt
nel tuo 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
Elimina un progetto Google Cloud:
gcloud projects delete PROJECT_ID
Elimina singole risorse
-
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 predefinito di Compute Engine. Esegui questo comando una volta per ciascuno dei seguenti
ruoli IAM:
roles/dataflow.admin
roles/dataflow.worker
roles/storage.objectAdmin
roles/artifactregistry.reader
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role=SERVICE_ACCOUNT_ROLE
-
Facoltativo: revoca le credenziali di autenticazione che hai creato ed elimina il file delle credenziali locale.
gcloud auth application-default revoke
-
Facoltativo: revoca le credenziali dallgcloud CLI.
gcloud auth revoke
Passaggi successivi
- Scopri come configurare i modelli flessibili.
- Consulta l'elenco dei modelli forniti da Google.