Plantillas de Dataflow

Las plantillas de Dataflow te permiten empaquetar una canalización de Dataflow para su implementación. Cualquier persona con los permisos correctos puede usar la plantilla para implementar la canalización empaquetada. Puedes crear tus propias plantillas de Dataflow personalizadas y Google proporciona plantillas compiladas con anterioridad para situaciones comunes.

Beneficios

Las plantillas tienen varias ventajas sobre la implementación directa de una canalización en Dataflow:

  • Las plantillas separan el diseño de canalización de la implementación. Por ejemplo, un desarrollador puede crear una plantilla y un científico de datos puede implementarla más adelante.
  • Las plantillas pueden tener parámetros que te permitan personalizar la canalización cuando implementas la plantilla.
  • Puedes implementar una plantilla mediante la consola de Google Cloud, la CLI de Google Cloud o las llamadas a la API de REST. No necesitas un entorno de desarrollo ni dependencias de canalización instaladas en tu máquina local.
  • Una plantilla es un artefacto de código que se puede almacenar en un repositorio de control de código fuente y se puede usar en canalizaciones de integración continua (CI/CD).

Plantillas proporcionadas por Google

Google proporciona una variedad de plantillas de Dataflow compiladas de código abierto previamente que puedes usar para situaciones comunes. Para obtener más información sobre las plantillas disponibles, consulta las plantillas que proporciona Google.

Comparación entre las plantillas de Flex y las clásicas

Dataflow admite dos tipos de plantillas: plantillas de Flex, que son más recientes, y plantillas clásicas. Si creas una plantilla de Dataflow nueva, te recomendamos que la crees como plantilla de Flex.

Con una plantilla flexible, la canalización se empaqueta como una imagen de Docker en Artifact Registry, junto con un archivo de especificación de plantilla en Cloud Storage. La especificación de la plantilla contiene un puntero a la imagen de Docker. Cuando ejecutas la plantilla, el servicio de Dataflow inicia una VM de selector, extrae la imagen de Docker y ejecuta la canalización. El grafo de ejecución se compila de forma dinámica según los parámetros del entorno de ejecución que proporciona el usuario. Si deseas usar la API para iniciar un trabajo que use una plantilla de Flex, usa el método projects.locations.flexTemplates.launch.

Una plantilla clásica contiene la serialización de JSON de un grafo de trabajo de Dataflow. El código de la canalización debe unir cualquier parámetro de entorno de ejecución en la interfaz ValueProvider. Esta interfaz permite a los usuarios especificar los valores de los parámetros cuando implementan la plantilla. Si quieres usar la API para trabajar con plantillas clásicas, consulta la documentación de referencia de la API de projects.locations.templates.

Las plantillas de Flex tienen las siguientes ventajas sobre las plantillas clásicas:

  • A diferencia de las plantillas clásicas, las plantillas de Flex no requieren la interfaz ValueProvider para los parámetros de entrada. No todas las fuentes y receptores de Dataflow admiten ValueProvider.
  • Si bien las plantillas clásicas tienen un grafo de trabajo estático, las plantillas flexibles pueden construir el grafo de trabajo de forma dinámica. Por ejemplo, la plantilla puede seleccionar un conector de E/S diferente según los parámetros de entrada.
  • Una plantilla flexible puede realizar un procesamiento previo en una máquina virtual (VM) durante la construcción de la canalización. Por ejemplo, puede validar valores de parámetros de entrada.

Flujo de trabajo de la plantilla

El uso de plantillas de Dataflow implica los siguientes pasos de alto nivel:

  1. Los desarrolladores configuran un entorno de desarrollo y desarrollan su canalización. El entorno incluye el SDK de Apache Beam y otras dependencias.
  2. Según el tipo de plantilla (Flex o clásica), haz lo siguiente:
    • Para las plantillas flexibles, los desarrolladores empaquetan la canalización en una imagen de Docker, lan envían a Artifact Registry y suben un archivo de especificación de plantilla a Cloud Storage.
    • En el caso de las plantillas clásicas, los desarrolladores ejecutan la canalización, crean un archivo de plantilla y la almacenan en etapa intermedia en Cloud Storage.
  3. Otros usuarios envían una solicitud al servicio de Dataflow para ejecutar la plantilla.
  4. Dataflow crea una canalización a partir de la plantilla. La canalización puede tardar entre cinco y siete minutos en comenzar a ejecutarse.

Configura los permisos de IAM

Los trabajos de Dataflow, incluidos los trabajos que se ejecutan desde plantillas, usan dos cuentas de servicio de IAM:

  • El servicio de Dataflow usa una cuenta de servicio de Dataflow para manipular los recursos de Google Cloud, como la creación de VMs.
  • Las VM de trabajador de Dataflow usan una cuenta de servicio de trabajador para acceder a los archivos y a otros recursos de la canalización. Esta cuenta de servicio necesita acceder a cualquier recurso al que haga referencia el trabajo de canalización, incluidos el receptor y la fuente que usa la plantilla. Para obtener más información, consulta Accede a los recursos de Google Cloud.

Asegúrate de que estas dos cuentas de servicio tengan los roles adecuados. Para obtener más información, consulta Seguridad y permisos de Dataflow.

Requisitos de la versión del SDK de Apache Beam

Para crear tus propias plantillas, asegúrate de que la versión del SDK de Apache Beam admita la creación de plantillas.

Java

Si quieres crear plantillas con el SDK 2.x de Apache Beam para Java, debes tener la versión 2.0.0-beta3 o superior.

Python

Si quieres crear plantillas con el SDK 2.x de Apache Beam para Python, debes tener la versión 2.0.0 o superior.

Para ejecutar plantillas con Google Cloud CLI, debes tener la versión 138.0.0 o posterior de Google Cloud CLI.

Extender plantillas

Puedes compilar tus propias canalizaciones si extiendes las plantillas de Dataflow de código abierto. Por ejemplo, en el caso de una plantilla que usa una duración de ventana fija, los datos que llegan fuera de la ventana podrían descartarse. A fin de evitar este comportamiento, usa el código de la plantilla como base y modifícalo para invocar la operación .withAllowedLateness.

¿Qué sigue?