Compila y ejecuta una plantilla de Flex


Las plantillas de Flex te permiten empaquetar una canalización de Dataflow para implementarla. En este instructivo, se muestra cómo compilar una plantilla de Flex de Dataflow y, luego, ejecutar un trabajo de Dataflow con ella.

Objetivos

  • Compilar una plantilla de Flex de Dataflow
  • Usa la plantilla para ejecutar un trabajo de Dataflow.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. Instala Google Cloud CLI.
  3. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  4. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  5. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  6. Habilita la API de 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 credenciales de autenticación locales para tu Cuenta de Google:

    gcloud auth application-default login
  8. Otorga roles a tu Cuenta de Google. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza EMAIL_ADDRESS por tu dirección de correo electrónico.
    • Reemplaza ROLE por cada rol individual.
  9. Instala Google Cloud CLI.
  10. Para inicializar la CLI de gcloud, ejecuta el siguiente comando:

    gcloud init
  11. Crea o selecciona un proyecto de Google Cloud.

    • Crea un proyecto de Google Cloud:

      gcloud projects create PROJECT_ID

      Reemplaza PROJECT_ID por un nombre para el proyecto de Google Cloud que estás creando.

    • Selecciona el proyecto de Google Cloud que creaste:

      gcloud config set project PROJECT_ID

      Reemplaza PROJECT_ID por el nombre del proyecto de Google Cloud.

  12. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  13. Habilita la API de 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 credenciales de autenticación locales para tu Cuenta de Google:

    gcloud auth application-default login
  15. Otorga roles a tu Cuenta de Google. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza EMAIL_ADDRESS por tu dirección de correo electrónico.
    • Reemplaza ROLE por cada rol individual.
  16. Otorga roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de 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

    Reemplaza lo siguiente:

    • PROJECT_ID: el ID de tu proyecto
    • PROJECT_NUMBER: Es el número de tu proyecto.
    • SERVICE_ACCOUNT_ROLE: Es cada rol individual.

Prepara el entorno

Instala el SDK y cualquier requisito para tu entorno de desarrollo.

Java

  1. Descarga e instala la versión 11 del Java Development Kit (JDK). Verifica que la variable de entorno JAVA_HOME esté establecida y que apunte a la instalación del JDK.

  2. Descarga e instala Apache Maven siguiendo los pasos de la guía de instalación para tu sistema operativo específico.

Python

Usa el SDK de Apache Beam para Python.

Go

Usa la guía de descarga e instalación de Go para descargarlo e instalarlo en tu sistema operativo específico. Para obtener información sobre qué entornos de ejecución de Go son compatibles con Apache Beam, consulta Compatibilidad con el entorno de ejecución de Apache Beam.

Descarga la muestra de código.

Java

  1. Clona el repositorio java-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    
  2. Navega a la muestra de código para este instructivo.

    cd java-docs-samples/dataflow/flex-templates/getting_started
    
  3. Compila el proyecto de Java en un archivo Uber JAR.

    mvn clean package

    Este archivo Uber JAR tiene todas las dependencias incorporadas. Puedes ejecutar el archivo como una aplicación independiente sin dependencias externas en otras bibliotecas.

Python

  1. Clona el repositorio python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Navega a la muestra de código para este instructivo.

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

Go

  1. Clona el repositorio golang-samples.

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    
  2. Navega a la muestra de código para este instructivo.

    cd golang-samples/dataflow/flex-templates/wordcount
    
  3. Compila el objeto binario de Go.

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

Crea un bucket de Cloud Storage

Usa el comando gcloud storage buckets create para crear un bucket de Cloud Storage:

gcloud storage buckets create gs://BUCKET_NAME

Reemplaza BUCKET_NAME por un nombre para tu bucket de Cloud Storage. Los nombres de los buckets de Cloud Storage deben ser únicos a nivel global y cumplir con los requisitos de nombres de buckets.

Crea un repositorio de Artifact Registry

Crea un repositorio de Artifact Registry en el que enviarás la imagen de contenedor de Docker de la plantilla.

  1. Usa el comando gcloud artifacts repositories create para crear un nuevo repositorio de Artifact Registry.

    gcloud artifacts repositories create REPOSITORY \
     --repository-format=docker \
     --location=LOCATION
    

    Reemplaza lo siguiente:

    • REPOSITORY: un nombre para tu repositorio. Los nombres de los repositorios deben ser únicos para cada ubicación de un proyecto.
    • LOCATION es la ubicación regional o multirregional del repositorio.
  2. Usa el comando gcloud auth configure-docker para configurar Docker para autenticar solicitudes de Artifact Registry. Este comando actualiza tu configuración de Docker para que puedas conectarte con Artifact Registry a fin de enviar imágenes.

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

Las plantillas de Flex también pueden usar imágenes almacenadas en registros privados compiladas previamente. Para obtener más información, consulta Usa una imagen de un registro privado.

Compila la plantilla de Flex

En este paso, usarás el comando gcloud dataflow flex-template build para compilar la plantilla de Flex.

Una plantilla de Flex consta de los siguientes componentes:

  • Una imagen de contenedor de Docker que empaqueta tu código de canalización.
  • Un archivo de especificación de plantilla. Este es un documento JSON que contiene la ubicación de la imagen del contenedor y los metadatos sobre la plantilla, como los parámetros de canalización.

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"

Reemplaza lo siguiente:

  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste.
  • LOCATION: la ubicación
  • PROJECT_ID: El ID del proyecto de Google Cloud
  • REPOSITORY: Es el nombre del repositorio de Artifact Registry que creaste.

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"

Reemplaza lo siguiente:

  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste.
  • LOCATION: la ubicación
  • PROJECT_ID: El ID del proyecto de Google Cloud
  • REPOSITORY: Es el nombre del repositorio de Artifact Registry que creaste.

Go

  1. Usa el comando gcloud builds submit para compilar la imagen de Docker mediante un Dockerfile con Cloud Build. Este comando compila el archivo y lo envía a tu repositorio de Artifact Registry.

    gcloud builds submit --tag LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/dataflow/wordcount-go:latest .
    

    Reemplaza lo siguiente:

    • LOCATION: la ubicación
    • PROJECT_ID: El ID del proyecto de Google Cloud
    • REPOSITORY: Es el nombre del repositorio de Artifact Registry que creaste.
  2. Usa el comando gcloud dataflow flex-template build para crear una plantilla de Flex llamada wordcount-go.json en tu bucket de 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"

    Reemplaza BUCKET_NAME por el nombre del bucket de Cloud Storage que creaste.

Ejecuta la plantilla de Flex

En este paso, usarás la plantilla para ejecutar un trabajo de Dataflow.

Java

  1. Usa el comando gcloud dataflow flex-template run para ejecutar un trabajo de Dataflow que use la plantilla de Flex.

    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"

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste.
    • REGION: la región
  2. Para ver el estado del trabajo de Dataflow en la consola de Google Cloud, ve a la página Trabajos de Dataflow.

    Ir a Trabajos

Si el trabajo se ejecuta de forma correcta, escribe el resultado en un archivo llamado gs://BUCKET_NAME/output--00000-of-00001.txt en el bucket de Cloud Storage.

Python

  1. Usa el comando gcloud dataflow flex-template run para ejecutar un trabajo de Dataflow que use la plantilla de Flex.

    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"
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste.
    • REGION: la región
  2. Para ver el estado del trabajo de Dataflow en la consola de Google Cloud, ve a la página Trabajos de Dataflow.

    Ir a Trabajos

Si el trabajo se ejecuta de forma correcta, escribe el resultado en un archivo llamado gs://BUCKET_NAME/output--00000-of-00001.txt en el bucket de Cloud Storage.

Go

  1. Usa el comando gcloud dataflow flex-template run para ejecutar un trabajo de Dataflow que use la plantilla de Flex.

    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"
    

    Reemplaza lo siguiente:

    • BUCKET_NAME: Es el nombre del bucket de Cloud Storage que creaste.
    • REGION: la región
  2. Para ver el estado del trabajo de Dataflow en la consola de Google Cloud, ve a la página Trabajos de Dataflow.

    Ir a Trabajos

Si el trabajo se ejecuta de forma correcta, escribe el resultado en un archivo llamado gs://BUCKET_NAME/samples/dataflow/templates/count.txt en el bucket de Cloud Storage.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

    Borra un proyecto de Google Cloud:

    gcloud projects delete PROJECT_ID

Borra los recursos individuales

  1. Borra el bucket de Cloud Storage y todos los objetos que contiene.
    gcloud storage rm gs://BUCKET_NAME --recursive
  2. Borra el repositorio de Artifact Registry.
    gcloud artifacts repositories delete REPOSITORY \
        --location=LOCATION
  3. Revoca los roles que otorgaste a la cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de 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
  4. Opcional: Revoca las credenciales de autenticación que creaste y borra el archivo local de credenciales.

    gcloud auth application-default revoke
  5. Opcional: Revoca credenciales desde gcloud CLI.

    gcloud auth revoke

Próximos pasos