Creazione ed esecuzione di un modello flessibile


I modelli flessibili di Dataflow ti consentono per pacchettizzare una pipeline Dataflow per il deployment. Questo tutorial mostra come creare un modello flessibile Dataflow ed eseguire un job Dataflow utilizzando modello.

Obiettivi

  • Creare un modello flessibile Dataflow.
  • Utilizzare 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 basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

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

  1. 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.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    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. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. 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
  7. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  8. 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.
  9. Installa Google Cloud CLI.
  10. Per initialize gcloud CLI, esegui questo comando:

    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. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  13. 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
  14. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  15. 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.
  16. Concedi ruoli al tuo account di servizio predefinito Compute Engine. Esegui l' comando seguente 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 progetto
    • PROJECT_NUMBER il tuo numero progetto
    • SERVICE_ACCOUNT_ROLE: ogni ruolo individuale

prepara l'ambiente

Installa l'SDK ed eventuali requisiti per l'ambiente di sviluppo.

Java

  1. Scarica e installa Java Development Kit (JDK) versione 11. Verifica che JAVA_HOME è impostata e punta alla tua installazione JDK.

  2. Scarica e installa Apache Maven seguendo il corso di Maven guida all'installazione per il tuo sistema operativo specifico.

Python

Installa l'SDK Apache Beam per Python.

Vai

Utilizza la Guida di download e installazione di Go per scaricare e installare Go per il tuo sistema operativo specifico. Per sapere quali Gli ambienti di runtime Go sono supportati da Apache Beam, consulta Supporto per il runtime Apache Beam.

Scarica l'esempio di codice.

Java

  1. Clona il repository java-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  2. Vai all'esempio di codice per questo tutorial.

    cd java-docs-samples/dataflow/flex-templates/getting_started
    
  3. Crea il progetto Java in un file Uber JAR.

    mvn clean package

    Questo file JAR Uber ha tutte le dipendenze incorporate. Puoi eseguire il file come applicazione autonoma senza dipendenze esterne altre librerie.

Python

  1. Clona il repository python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Vai all'esempio di codice per questo tutorial.

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

Vai

  1. Clona il repository golang-samples.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    
  2. Vai all'esempio di codice per questo tutorial.

    cd golang-samples/dataflow/flex-templates/wordcount
    
  3. Compila il file binario Go.

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

Crea un bucket Cloud Storage

Usa 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 nel bucket Cloud Storage. I nomi dei bucket Cloud Storage devono essere è unico a livello globale e soddisfa le requisiti di denominazione dei bucket.

Crea un repository Artifact Registry

Crea un repository Artifact Registry in cui eseguirai il push del container Docker per il modello.

  1. Utilizza la 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 ed è univoco per ogni posizione del repository in un progetto.
    • LOCATION: a livello di una o più regioni location per repository Git.
  2. Utilizza la gcloud auth configure-docker per configurare Docker al fine di autenticare le richieste per Artifact Registry. Questo comando aggiorna la configurazione Docker per consentirti di connetterti Artifact Registry per eseguire il push delle immagini.

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

Modelli flessibili possono anche utilizzare immagini archiviate in registri privati. Per ulteriori informazioni, vedi Utilizza un'immagine di un registro privato.

Crea il modello flessibile

In questo passaggio, utilizzerai 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. Per Java e Python modelli flessibili, l'immagine Docker viene creata e ne viene eseguito il push su Artifact Registry repository Git quando esegui il comando gcloud dataflow flex-template build.
  • Un file di specifiche del modello. Questo file è un documento JSON che contiene posizione dell'immagine container e i metadati relativi al modello, ad esempio parametri della pipeline.

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 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 che che hai creato in precedenza
  • LOCATION: la località
  • PROJECT_ID: l'ID del progetto Google Cloud
  • REPOSITORY: il nome del repository Artifact Registry che hai 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 che che hai creato in precedenza
  • LOCATION: la località
  • PROJECT_ID: l'ID del progetto Google Cloud
  • REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza

Vai

  1. Usa 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 ad Artifact Registry repository Git.

    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 che hai creato in precedenza
  2. Utilizza la gcloud dataflow flex-template build per creare un modello flessibile denominato wordcount-go.json nel tuo 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 dell'istanza di Cloud Storage che hai creato in precedenza.

Esegui il modello flessibile

In questo passaggio, utilizzerai il modello per eseguire un job Dataflow.

Java

  1. Utilizza la Comando gcloud dataflow flex-template run per eseguire un job Dataflow che usa 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 che hai creato in precedenza
    • REGION: la regione
  2. Per visualizzare lo stato del job Dataflow in Nella console Google Cloud, vai alla pagina Job di Dataflow.

    Vai a Job

Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt in nel bucket Cloud Storage.

Python

  1. Utilizza la Comando gcloud dataflow flex-template run per eseguire un job Dataflow che usa 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 che che hai creato in precedenza
    • REGION: la regione
  2. Per visualizzare lo stato del job Dataflow in Nella console Google Cloud, vai alla pagina Job di Dataflow.

    Vai a Job

Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/output--00000-of-00001.txt in nel bucket Cloud Storage.

Vai

  1. Utilizza la 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" \
     --region "REGION"
    

    Sostituisci quanto segue:

    • BUCKET_NAME: il nome del bucket Cloud Storage che hai creato in precedenza
    • REGION: la regione
  2. Per visualizzare lo stato del job Dataflow in Nella console Google Cloud, vai alla pagina Job di Dataflow.

    Vai a Job

Se il job viene eseguito correttamente, scrive l'output in un file denominato gs://BUCKET_NAME/samples/dataflow/templates/count.txt pollici del 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

  1. Elimina il bucket Cloud Storage e tutti gli oggetti che contiene.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. Elimina il repository Artifact Registry.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. Revoca i ruoli che hai concesso all'impostazione predefinita di Compute Engine l'account di servizio. Esegui questo 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
  4. Facoltativo: revoca le credenziali di autenticazione che hai creato ed elimina il file delle credenziali locale.

    gcloud auth application-default revoke
  5. Facoltativo: revoca le credenziali dallgcloud CLI.

    gcloud auth revoke

Passaggi successivi