CI/CD and Branching Strategies for Apache NiFi in Azure DevOps

Palabras clave: API,Git,CI/CD,Apache NIFI,Azure DevOps,GitHooks,DevOps,Git-Flows

Introducción

Apache NIFI se ha consolidado como una herramienta esencial para diseñar, automatizar y gestionar flujos de datos, especialmente en entornos donde la integración y el procesamiento eficiente son cruciales. Sin embargo, con el aumento de la complejidad en las implementaciones y el trabajo colaborativo entre equipos, surgen desafíos significativos que requieren atención para garantizar un uso eficiente y escalable de esta plataforma.

Uno de los principales retos se centra en la gestión de versiones de los flujos datos en NIFI, definidos mediante archivos JSON (Flow Definitions), los cuales, presentan un desafío intrínseco, ya que, no son fácilmente legibles ni comparables. Esto dificulta la revisión de cambios, algo crítico cuando varios desarrolladores trabajan simultáneamente en un flujo. Los conflictos derivados de esta colaboración, podrían ser complejos de resolver, y las inconsistencias resultantes impactarían directamente en la estabilidad y funcionalidad de los procesos.

Otro aspecto crítico es la integración de NIFI en entornos de desarrollo, pruebas y producción. La falta de separación clara entre estos ambientes puede llevar a que cambios destinados al desarrollo terminen accidentalmente en producción. Esto no solo compromete la estabilidad del sistema, sino que también pone en riesgo la integridad de los datos y los servicios dependientes. Aunque NIFI ofrece herramientas como los Parameter Contexts para gestionar variables por entorno, su configuración manual incrementa el riesgo de errores humanos y dificulta la trazabilidad.

Además, la ausencia de automatización y estandarización en la creación y configuración de flujos agrega un nivel de complejidad innecesario. Sin procesos automatizados, la replicación de flujos para nuevos proyectos o entornos requiere un esfuerzo considerable, lo que aumenta la posibilidad de inconsistencias y errores. Esto puede ser especialmente problemático en escenarios donde la gobernanza y la trazabilidad son requisitos clave.

La gobernanza misma se convierte en un desafío en NIFI, dado que el rastreo de cambios no es tan granular como podría esperarse. Aunque es posible auditar ciertas operaciones, la falta de un control detallado sobre quién realizó cambios y por qué dificulta cumplir con normativas y mantener un control estricto sobre las configuraciones. Esto se convierte en un obstáculo para implementar políticas de cumplimiento y mantener la seguridad y la estabilidad del sistema.

Por último, en implementaciones más complejas, como las que involucran clusters distribuidos, se evidencian retos adicionales. La gestión y sincronización de nodos dentro de un clúster pueden llevar a problemas como la distribución desigual de cargas de trabajo o fallos en la sincronización de configuraciones entre nodos. Estos desafíos no solo afectan el rendimiento, sino que también complican la escalabilidad y la resiliencia de la solución.

Objetivos.

Objetivo general

Diseñar e implementar una estrategia integral de gestión de flujos de datos en Apache NIFI que aborde los retos de colaboración, trazabilidad, automatización y escalabilidad, garantizando la estabilidad, eficiencia y gobernanza en entornos de desarrollo, pruebas y producción.

Objetivos específico

  • Optimizar la gestión de versiones de flujos:
    Establecer una estrategia de control de versiones basada en sistemas como GitHub o Azure Repos, que permita realizar revisiones efectivas, resolver conflictos de manera eficiente y mejorar la colaboración entre los desarrolladores.
  • Implementar automatización de configuración dee entornos:
    Configurar procesos y herramientas que permitan de manera automatizada aprovisionar los entornos de desarrollo, pruebas y producción.
  • Automatizar la creación y despliegue de flujos:
    Desarrollar pipelines de CI/CD que se integren con NIFI para tener automatizaciones en cada etapa del ciclo de vida de desarrollo de los flujos de datos.

Metodología.

1. Integración de Azure Repos con NIFI Registry

El primer paso para lograr un flujo CI/CD consiste en conectar Azure Repos con NIFI Registry para gestionar las versiones de los flujos de trabajo de NIFI. Esta integración permite que las definiciones de los flujos, almacenadas como templates en NIFI, sean versionadas y controladas dentro del repositorio de Azure Repos. Para lograr esto, se configura un Git Registry Client Provider en NIFI Registry, esto se logra modificando el archivo de configuración llamado Providers.xml y haciendo que dicha configuración apunte a un repositorio en Azure Repos donde se almacenarán los templates de NIFI. La autenticación y la configuración de acceso se gestionan utilizando claves SSH o tokens de acceso personales, según las políticas de seguridad de la organización. Posterior a la integración, asegurarse de tener las configuraciones de git diligenciadas para poder hacer commits ‘git config –global user.name «Tu Nombre» && git config –global user.email «tu.email@example.com«’.

Al finalizar la integración se espera tener la siguiente acción ante un commit hecho desde NIFI:

Diagrama 1. NIFI Commit y Git Commit

2. Uso de Git Hooks para Sincronizar Automáticamente Azure DevOps en múltiples repositorios

Dado que en proyectos basados en una arquitectura de microservicios es común dividir las funcionalidades en módulos independientes, se pueden tener múltiples repositorios asociados a diferentes Process Groups de NIFI. Suponga un escenario donde existan varios Process Groups en el root de NIFI, los cuales representan diferentes servicios o flujos. Independientemente del contenido de dichos Process Groups, se define un repositorio en Azure DevOps para cada uno de estos recursos, alineándose con la filosofía de microservicios de mantener la independencia y modularidad.

Para automatizar la sincronización entre NIFI y los múltiples repositorios en Azure DevOps, se emplean Git Hooks. Cada vez que se realiza un commit en NIFI, el hook ejecuta un script que automáticamente lleva los cambios hacia el repositorio correspondiente en Azure DevOps. Esta configuración en el repositorio de NIFI asegura que, tras cada cambio en el flujo o template, se ejecute el script de sincronización. Este proceso garantiza que todas las modificaciones se registren y envíen a los diferentes repositorios según corresponda, facilitando el control de versiones y la trazabilidad, al mismo tiempo que se promueve una integración continua acorde con la naturaleza de los microservicios.

Diagrama 2. Git Hooks Para Microservicios de NIFI

3. Estrategia de Ramificación en Azure DevOps e Integración con NiFi

En una integración con Azure DevOps y NIFI, es crucial considerar la versión de NIFI utilizada. Para versiones anteriores a la 2.0, la autenticación con access tokens está deshabilitada si se configuran métodos de autenticación como OIDC o LDAP, lo que obliga a utilizar autenticación basada en certificados. En estos casos, es importante ajustar los métodos de autenticación según las capacidades de la versión instalada

Una estrategia de ramificación efectiva para gestionar entornos de desarrollo, pruebas y producción se basa en el uso de ramas dedicadas para cada etapa del ciclo de vida del desarrollo. La rama develop centraliza el desarrollo activo, donde los equipos integran nuevas funcionalidades y correcciones. La rama qa sirve como un entorno intermedio, permitiendo al equipo de Testing validar los cambios antes de promoverlos. Finalmente, la rama main se reserva exclusivamente para el código listo para producción, garantizando estabilidad y control. Este flujo asegura una transición estructurada de los cambios, desde su desarrollo hasta su implementación en producción, minimizando errores y facilitando la trazabilidad..

Cuando se aprueba un pull request de develop a qa, un pipeline automatizado actualiza los flujos en el entorno de QA utilizando la API de NIFI. Este pipeline extrae la última versión registrada en NIFI Registry del Process Group en el entorno develop y la despliega en el entorno de QA.

Tras la validación en QA, hecha por equipo de Testing, un pull request aprobado de qa a main activa un nuevo pipeline que promueve los mismos cambios al entorno de producción, asegurando una implementación consistente y controlada en todos los entornos

Este enfoque automatizado no solo garantiza la trazabilidad y consistencia entre entornos, sino que también reduce errores y aumenta la eficiencia al sincronizar los flujos de NIFI directamente con el control de versiones en Git y las pruebas en Azure DevOps.

Diagrama 3. Nifi CI/CD con Azure DevOps

4. Configuración Inicial en Azure Repos y Creación de Template con la API de NIFI

Para flujos iniciales, la parte más importante es mantener un estándar de nombramiento, de forma tal que el Flow dentro del Bucket en NIFI Registry tenga el mismo nombre del repositorio en Azure DevOps, de esta manera el script de automatización deberá ser más sencillo de mantener. Con el uso de Azure pipelines se puede configurar template inicial de forma que se permita que el equipo de desarrollo comience a trabajar con una base consistente de flujos de datos, desde el inicio del proyecto hasta llevarlo a producción.

Otra opción viable es la integración de NIFI event Hooks para activar un CREATE_BUCKET script el cual reacciona ante la creación de un bucket y permite que el entorno inicial de NIFI y Azure Devops esté configurado ante cualquier commit inicial.

4. Resultados

  • Control de cambios centralizado y trazabilidad mejorada

Es posible el control de cambios gestionado desde Azure DevOps, lo que permite que los equipos revisen, auditen y aprueben modificaciones a través de pull requests, proporcionando trazabilidad completa sobre las alteraciones realizadas en los flujos de datos, fortaleciendo la gobernanza y asegurando que los cambios promovidos cumplen con los estándares establecidos. Ver imagen 1.

  • Automatización de configuraciones iniciales

La API de NiFi es bastante amplia y fácil de utilizar en scripts que pueden ser ejecutables desde un pipeline y lograr, entre otras cosas, implementar templates base para nuevos proyectos de manera automatizada, permitiendo una configuración estándar y homogénea en todos los entornos. Implementaciones como estas, minimizan los tiempos de inicio de nuevos desarrollos y asegura la consistencia en las prácticas de los equipos.

  • Eficiencia en integración y entrega continua

El sistema de CI/CD establecido garantiza despliegues consistentes y auditables en los entornos de QA y producción. Este modelo asegura un control riguroso sobre las versiones, se alinea con las políticas de seguridad y gobernanza, y proporciona un marco estable para los flujos de datos críticos en producción.

Imagen 1. Control de cambios en flujos de datos

Conclusiones

En conclusión, es posible la integración de Apache NIFI con Azure DevOps mediante las configuraciones de NIFI Registry y la automatización de pipelines.

La sincronización automática de cambios mediante Git Hooks asegura que cada modificación en NIFI se refleje inmediatamente en los repositorios de Azure Repos , lo que garantiza la coherencia y trazabilidad de las versiones.

Se pueden tener pipelines que automatizan la configuración inicial de entornos y la creación de flujos de datos nuevos mediante templates.

De esta forma, se implementó el esquema CI/CD en Azure DevOps para flujos de NiFi reforzando la gobernanza, trazabilidad y asegurando que los despliegues en entornos de QA y Producción sean siempre aprobados por los grupos correspondientes.

Bibliografía

[1] Apache NiFi, «NiFi Components.» [Online]. Available: https://nifi.apache.org/components/. [Accessed: Dec. 30, 2024].

[2] Apache NiFi, «NiFi Documentation.» [Online]. Available: https://nifi.apache.org/nifi-docs/overview.html. [Accessed: Dec. 30, 2024].

[3] Apache NiFi, «NiFi Getting Started.» [Online]. Available: https://nifi.apache.org/nifi-docs/getting-started.html. [Accessed: Dec. 30, 2024].

[4] Apache NiFi, «NiFi Administration Guide.» [Online]. Available: https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html. [Accessed: Dec. 30, 2024].

[5] Apache NiFi, «NiFi User Guide.» [Online]. Available: https://nifi.apache.org/docs/nifi-docs/html/user-guide.html. [Accessed: Dec. 30, 2024].

[6] Apache NiFi, «NiFi Toolkit Guide.» [Online]. Available: https://nifi.apache.org/nifi-docs/toolkit-guide.html. [Accessed: Dec. 30, 2024].

[7] Apache NiFi, «NiFi API Documentation.» [Online]. Available: https://nifi.apache.org/docs/nifi-docs/rest-api/index.html. [Accessed: Dec. 30, 2024].

[8] Apache NiFi, «NiFi Registry.» [Online]. Available: https://nifi.apache.org/projects/registry/. [Accessed: Dec. 30, 2024].

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Abrir chat
Hola 👋
¿En qué podemos ayudarte?