¿Utiliza Terraform para activar Dataflow?

¿Utiliza Terraform para activar Dataflow? A continuación, se explica cómo pasar cualquier opción de corredor de Dataflow a su trabajo usando Plantillas Flex

Foto de SpaceX en Unsplash

Entre los muchos métodos diferentes que puede utilizar para activar trabajos de Dataflow, Terraform cuenta con cierta popularidad. Terraform usa la API de Dataflow para activar trabajos de Dataflow. Esto significa que solo puede lanzar plantillas. Pero gracias a las plantillas de Dataflow Flex , esto en realidad no impone un límite en el tipo de trabajo que puede iniciar. Si su código no es una plantilla, simplemente envuélvalo con un contenedor de lanzamiento y use Flex Templates.

Sin embargo, no todo el panorama es tan optimista. Si compara las opciones para implementar una canalización de Dataflow con lo que ofrecen los recursos de Terraform ( para plantillas regulares , para plantillas flexibles ), notará que existe una brecha entre lo que el corredor de Dataflow puede aceptar como opciones y lo que puede pasar usando Terraform.

¿Cómo podemos cerrar esta brecha?

Hay varias formas de pasar opciones a su canalización de Dataflow. La línea de comando no es la única forma. Siempre puede configurar las opciones del corredor de manera programática. Para eso, puede usar la clase DataflowPipelineOptions (en Java) o GooogleCloudOptions (en Python).

¿Cómo usas esas clases para configurar las opciones de Dataflow? El problema es que muchas de esas opciones de Dataflow no se exponen mediante el recurso Terraform. Pero puede configurarlos desde su código usandoDataflowPipelineOptions o GoogleCloudOptions.

En Python, podemos usar view_as para hacer un "casting" a GoogleCloudOptions:

En Java, necesitamos hacer algunos cambios más.

Primero, si está utilizando el archivo pom.xml predeterminado proporcionado por Apache Beam Quickstart , deberá asegurarse de que la dependencia de Dataflow esté disponible en el momento de la compilación. Asegúrese de incluirlo en su sección:


org.apache.beam
beam-runners-google-cloud-dataflow-java
$ {beam.version}

Una vez que tenga esa dependencia, debería poder usar DataflowPipelineOptions en su canalización. Puede convertir sus PipelineOptions habituales en DataflowPipelineOptions y establecer los parámetros de Dataflow:

Con esos ejemplos, puede configurar cualquiera de las opciones de ejecución de Dataflow incluidas en esta tabla: https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline- opciones

Sí, genial, pero todos los fragmentos de código tienen las opciones de Dataflow codificadas, y se pregunta cómo configurarlas en tiempo de ejecución.

Si está escribiendo una plantilla normal, no puede hacerlo .

Con una plantilla normal, sus opciones de canalización serán ValueProviders y deberá intentar "obtenerlas" (llamando al método get ) antes de que se cree la canalización. Eso le dará un error, get solo funciona cuando su canalización ya se está ejecutando.

Pero no se preocupe, ya que puede resolver este problema con Dataflow Flex Templates .

En una plantilla Flex puede tener opciones de tiempo de ejecución "normales" (no ValueProvider), y puede escribir su código como un trabajo "normal", sin tener que lidiar con nada relacionado con las plantillas. Una vez que haya escrito su código, debe envolverlo con un contenedor lanzador .

La documentación de Dataflow tiene un ejemplo de cómo transformar su código en una Plantilla Flex, con todos los detalles sobre los contenedores proporcionados por Google: https://cloud.google.com/dataflow/docs/guides/templates/using-flex- plantillas

Con una plantilla flexible, puede exponer una opción personalizada, como --i-want-streaming-engine, obtener su valor y luego pasarlo al objeto de opciones de Dataflow.

Luego, en Terraform, especificaría esa opción en su sección de parámetros:

Puede actualizar sus opciones para leer su opción personalizada y luego transmitir sus valores a la opción de flujo de datos correspondiente.

Por ejemplo, en Python, podríamos hacer algo como lo siguiente:

Y el equivalente en Java sería:

El flujo de datos cambia rápidamente, con nuevas funciones y opciones disponibles con cierta frecuencia. No todas estas opciones están disponibles inmediatamente en los recursos y módulos de Terraform para usar con sus plantillas de Dataflow. Sin embargo, siempre puede configurar esas opciones mediante programación desde su código.

Si utiliza plantillas de Dataflow normales, estas opciones de ejecución deben estar codificadas en su código fuente. Eso se debe a que las opciones de canalización están disponibles solo a través de proveedores de valor , que no se pueden recuperar en tiempo de ejecución, solo después de que la canalización ya se haya lanzado.

Pero esto no es un problema si usa Dataflow Flex Templates. Simplemente agregue una opción personalizada normal a su canalización y escriba un código para transmitir esos valores a los objetos de opciones de Dataflow. Luego, configure sus opciones personalizadas en la sección de parámetros de su google_dataflow_flex_template_job y podrá usar cualquier opción de Dataflow, sin importar si están disponibles a través de Terraform o no.


¿Utiliza Terraform para activar Dataflow? se publicó originalmente en Google Cloud - Community on Medium, donde las personas continúan la conversación destacando y respondiendo a esta historia.