Crea ed esegui un modello flessibile


I modelli flessibili di Dataflow ti consentono di pacchettizzare una pipeline Dataflow per il deployment. Questo tutorial mostra come creare un modello flessibile Dataflow ed 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 utilizzi 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.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

  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. Concedi i ruoli all'account di servizio predefinito di Compute Engine. 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 progetto
    • PROJECT_NUMBER il numero del progetto
    • SERVICE_ACCOUNT_ROLE: ogni singolo ruolo

Prepara l'ambiente

Installa l'SDK e tutti i requisiti per l'ambiente di sviluppo.

Java

  1. Scarica e installa la versione 11 del Java Development Kit (JDK). Verifica che la variabile di ambiente JAVA_HOME sia impostata e indichi l'installazione di JDK.

  2. 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.

Vai

Utilizza la guida per il download e l'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

  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. Compila il progetto Java in un file JAR Uber.

    mvn clean package

    Questo file JAR di Uber contiene tutte le dipendenze incorporate. Puoi eseguire questo file come applicazione autonoma senza dipendenze esterne da 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.

    CGO_ENABLED=0 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 tuo bucket Cloud Storage. I nomi dei bucket Cloud Storage devono essere globalmente univoci 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 del contenitore Docker per il modello.

  1. 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 del repository.
  2. Utilizza il comando gcloud auth configure-docker per configurare Docker in modo che autentichi le richieste per Artifact Registry. Questo comando aggiorna la configurazione di Docker in modo da poterti connettere ad Artifact Registry per eseguire il push delle immagini.

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

I modelli flessibili possono anche utilizzare le immagini archiviate in registry privati. Per maggiori informazioni, consulta Utilizzare un'immagine da un registry 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:

  • Un'immagine del contenitore Docker che pacchettizza il codice della pipeline. Per i modelli Flex Java e Python, l'immagine Docker viene creata ed eseguita 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 del contenitore, oltre ai metadati del modello, ad esempio i 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 hai creato in precedenza
  • LOCATION: la località
  • PROJECT_ID: l'ID 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 hai creato in precedenza
  • LOCATION: la località
  • PROJECT_ID: l'ID progetto Google Cloud
  • REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza

Vai

  1. Utilizza il comando gcloud builds submit per creare l'immagine Docker utilizzando un Dockerfile con Cloud Build. Questo comando crea il file e lo esegue 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 progetto Google Cloud
    • REPOSITORY: il nome del repository Artifact Registry che hai creato in precedenza
  2. Utilizza il comando gcloud dataflow flex-template build per creare un modello flessibile denominato wordcount-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.

Esegui il modello flessibile

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

Java

  1. 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 job, utilizzando il formato <key1>=<val1>,<key2>=<val2>,...
  2. Per visualizzare lo stato del job Dataflow 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 nel tuo bucket Cloud Storage.

Python

  1. 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 job, utilizzando il formato <key1>=<val1>,<key2>=<val2>,...
  2. Per visualizzare lo stato del job Dataflow 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 nel tuo bucket Cloud Storage.

Vai

  1. 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 job, utilizzando il formato <key1>=<val1>,<key2>=<val2>,...
  2. Per visualizzare lo stato del job Dataflow 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 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

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

  1. Elimina il bucket Cloud Storage e tutti gli oggetti al suo interno.
    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'account di servizio predefinito di Compute Engine. 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
  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

Passaggi successivi