Saltar al contenido
Introducción a Apache Airflow

Creación y configuración de plugins en Airflow.

Introducción

En Apache Airflow, los plugins son herramientas poderosas que permiten a los usuarios extender y personalizar la plataforma para adaptarla a necesidades específicas. Aquí te explico con más detalle sobre los plugins en Airflow y cómo se utilizan:

Plugins en Apache Airflow

  1. Definición y Funcionalidad:

    • Los plugins en Airflow son módulos personalizados que agregan nuevas funcionalidades a la plataforma.
    • Pueden incluir nuevos sensores (sensors), operadores (operators), hooks, tipos de conexión y otras extensiones que no están disponibles en la configuración base de Airflow.
  2. Flexibilidad y Personalización:

    • Airflow permite a los usuarios definir sus flujos de trabajo como código, y los plugins amplían esta capacidad permitiendo integraciones personalizadas con sistemas externos y procesos específicos de la organización.
    • Esto hace que Airflow sea altamente flexible y adaptable a una amplia gama de requisitos de negocio y técnicos.
  3. Proceso de Creación y Configuración:

    • Creación: Los plugins pueden ser desarrollados por los usuarios o la comunidad de Airflow.
    • Configuración: Para habilitar un plugin, se añaden nuevos archivos Python al directorio de plugins de Airflow y se configura el archivo airflow.cfg para indicar su disponibilidad.
    • Una vez configurado, el plugin se integra perfectamente en la interfaz de usuario de Airflow y puede ser utilizado como cualquier otro componente estándar de Airflow, como operadores y sensores preexistentes.
  4. Beneficios y Aplicaciones:

    • Personalización: Los plugins permiten personalizar Airflow para satisfacer necesidades específicas, como integraciones con sistemas internos, servicios en la nube, APIs, entre otros.
    • Extensibilidad: Mejoran la capacidad de programación y ejecución de flujos de trabajo al introducir nuevas funcionalidades que no están disponibles de manera nativa en Airflow.
    • Comunidad y Colaboración: La comunidad de Airflow contribuye con una variedad de plugins que abarcan diferentes casos de uso, lo que amplía las capacidades de la plataforma de forma colaborativa y continua.

En resumen, los plugins en Apache Airflow son esenciales para la personalización y extensión de la plataforma, permitiendo a los usuarios agregar funcionalidades específicas que no están disponibles de serie. Esto facilita la adaptación de Airflow a entornos y requisitos únicos, mejorando así la eficiencia y la efectividad en la orquestación y programación de flujos de trabajo complejos.

Resumen

En Apache Airflow, los plugins

Los plugins son paquetes de código que proporcionan nuevas funcionalidades al sistema. Pueden incluir nuevos operadores, conexiones personalizadas, tipos de sensores, entre otras características. La creación y configuración de plugins en Airflow es un proceso sencillo pero que requiere un conocimiento técnico sólido.

Para crear un nuevo plugin en Airflow, primero debes crear un paquete de Python en el directorio de plugins. Dentro de este paquete, crearás un archivo Python que contendrá todo el código necesario para que funcione su plugin (como un nuevo operador, por ejemplo). Luego, debes agregar su paquete de plugins a la variable plugins_folder en su archivo de configuración de Airflow. Esta es una lista que enumera la ubicación de todos los directorios de plugins que Airflow debe buscar. Después de agregar su plugin a la carpeta de plugins y actualizar el archivo de configuración, puede probar su plugin. Si todo funciona según lo esperado, su plugin estará listo para implementarse en producción.

Para que Airflow reconozca su plugin, bien podría crear un directorio “plugins” en el directorio donde está instalado o lanzado Airflow. Después, coloca el código de tu plugin en el directorio y configura el siguiente parámetro en el archivo airflow.cfg:


[core] 
plugins_folder = /path/to/plugins_directory

Este proceso permitirá que su plugin quede disponible para ser usado en Airflow. Además, es posible que debas agregar algunos scripts complementarios a tu aplicación Apache Airflow, con el fin de ajustar ciertas características propias de los plugins que vayas desarrollando. En general, la creación y configuración de plugins puede ser una forma poderosa de personalizar Airflow y agregar funcionalidades útiles al sistema. Sin embargo, debe tener en cuenta que el proceso de desarrollo y configuración puede ser complejo, y requerir de un conocimiento sólido en programación y en el funcionamiento de Airflow.

Aplicación teórica

Un ejemplo de creación y configuración de un plugin en Apache Airflow:

Supongamos que queremos crear un nuevo sensor para comprobar si un archivo ha sido actualizado en un directorio remoto. Primero, creamos una carpeta llamada my_plugin dentro del directorio de plugins de Airflow:

$ cd $AIRFLOW_HOME/plugins
$ mkdir my_plugin

Luego, creamos un archivo my_sensor.py dentro de la carpeta my_plugin:

from airflow.plugins_manager import AirflowPlugin
from airflow.sensors.base_sensor_operator import BaseSensorOperator
from airflow.utils.decorators import apply_defaults

class MySensor(BaseSensorOperator):
    @apply_defaults
    def __init__(self, filepath, *args, **kwargs):
        super(MySensor, self).__init__(*args, **kwargs)
        self.filepath = filepath

    def poke(self, context):
        self.log.info('Poking for file %s', self.filepath)
        # Aquí agregar una lógica para verificar si el archivo ha sido actualizado en el directorio remoto
        # Retornar verdadero si se actualiza, falso en otro caso
        return True

class MyPlugin(AirflowPlugin):
    name = "my_plugin"
    sensors = [MySensor]

En nuestro ejemplo, MySensor es la clase que implementa la lógica para verificar si el archivo ha sido actualizado en el directorio remoto. MyPlugin es la clase que declara el plugin y registra el sensor dentro de Airflow.

Por último, podemos configurar nuestro archivo airflow.cfg para agregar la ruta del plugin de la carpeta my_plugin:

... 
[core] 
plugins_folder = /path/to/plugins, /path/to/my_plugin 
...

Con esto, nuestro plugin y sensor estarán disponibles en Airflow. Ahora podremos utilizar nuestro sensor MySensor en nuestras tareas de DAGs como cualquier otro sensor de Airflow.

Aplicación práctica

Un ejemplo práctico de cómo crear y configurar un plugin en Airflow:

1. Primero, crea una carpeta llamada plugins en la raíz de tu proyecto de Airflow.

$ mkdir plugins

2. Dentro de la carpeta plugins, crea un archivo llamado my_plugin.py y escribe el siguiente código:

from airflow.plugins_manager import AirflowPlugin

class MyPlugin(AirflowPlugin):
    name = "my_plugin"
    operators = []
    hooks = []
    executors = []
    macros = []
    admin_views = []
    flask_blueprints = []
    menu_links = []

En este ejemplo, hemos creado un plugin llamado MyPlugin. En la definición de clase, hemos definido todas las posibles extensiones que un plugin puede tener. En este caso, todas están vacías.

3. Ahora que hemos creado nuestro plugin, necesitamos agregar el plugin a la lista de plugins de Airflow. Para hacer eso, podemos crear un archivo llamado airflow_plugins.py en la raíz de nuestro proyecto de Airflow y agregar la siguiente línea de código:

from plugins.my_plugin import MyPlugin

Con esto, estamos diciendo a Airflow que cargue el plugin MyPlugin.

4. Por último, necesitamos asegurarnos de que el archivo airflow_plugins.py se cargue cuando Airflow inicie. Para hacer eso, agrega el siguiente código en tu archivo airflow.cfg:

[core]
...
plugins_folder = plugins
load_examples = False

[webserver]
...
dag_default_view = graph_view

Aquí estamos configurando la carpeta de nuestros plugins y desactivando la carga de ejemplos para que Airflow no tenga problemas al iniciar.

¡Listo, hemos creado y configurado nuestro primer plugin en Airflow! A partir de aquí, podemos rescribir las diferentes partes del plugin (Operadores, Hooks, Macros, etc.) según las necesidades de nuestro proyecto.