Slack + Airflow: integraciones personalizadas

Crea aplicaciones e integraciones para facilitar el trabajo diario.

Isra Mata
Nowports Tech and Product
5 min readMar 1, 2021

--

Si usted es usuario de Slack y amante de la productividad, probablemente ya conoce que esta plataforma permite la integración de aplicaciones que facilitan el trabajo diario.

Las aplicaciones disponibles cubren distintas necesidades, desde comunicación y diseño, hasta gestión de archivos y análisis de datos. Sin embargo, si la tuya en específico no está cubierta, siempre está la opción DIY.

Para los desarrolladores y entusiastas de la tecnología, Slack cuenta con una API que permite la construcción de aplicaciones personalizadas.

Si bien la capacidad de integración personalizada no es nueva, sí ha sufrido cambios. El 20 de febrero de 2020, Slack anunció a través de su página web que la creación de legacy tokens sería deprecada. Estos tokens conectaban aplicaciones propias para ampliar, extender y automatizar espacios de trabajo. Ahora, todo esto es posible mediante el uso de Slack Apps.

¿Cómo hacerte la vida más fácil?

Al proveer accesos de lectura, escritura y actualización de todo tipo de datos en Slack, las APIs empoderan a los desarrolladores con niveles profundos de personalización.

En esta ocasión, la funcionalidad demostrada será la de los Webhooks. El uso de esta herramienta es bastante sencilla ya que, con la generación de un URL único, nos permite enviar mensajes dentro de Slack. Estos inclusive tienen la capacidad de usar todos los bloques de diseño y formato habituales.

Pero bueno, pasemos de la teoría a la práctica, que a eso vinimos.

Tutorial: Integrando Slack con Apache Airflow

En este siguiente tutorial se aborda de forma íntegra la integración de Apache Airflow con Slack. Como contexto, Airflow es una plataforma que permite la creación, programación y monitoreo de flujos de trabajo. Su valor agregado radica en sus 4 principios:

— Dinámico

— Extensible

— Elegante

— Escalable.

Dado sus características, Airflow puede ser usado para crear pipelines de datos sofisticados que se conecten a distintos servicios de backend y permitan flujos de trabajo complejos.

Si bien la estructura de esta plataforma permite el monitoreo modular de las tareas, es clave estar al tanto del estatus (fallo o éxito) de las tareas más cruciales para nosotros. Es por esta necesidad de alertas que surge la ya explorada idea de integrar Slack con Airflow.

Parte 1. Crea tu Slack App

Para enviar notificaciones a Slack, primero se debe crear una Slack App. Esta aplicación es la que provee un Webhook con el que es posible enviar notificaciones personalizadas a cualquier espacio de trabajo dentro de Slack.

La creación de una Slack App se hace en el portal oficial de Slack API. Inicia sesión si aún no lo has hecho. Entra al enlace de nuevo y verás la siguiente pantalla:

Al dar clic en ‘Create New App’ se desplegará una ventana en donde se nombra la aplicación y se asigna a un Workspace de Slack.

La URL del Webhook tendrá el siguiente formato:

Recuerda mantener tu URL privado, ya que cualquiera que tenga acceso a esta información puede enviar mensajes al canal de Slack conectado con tu App.

Parte 2. Configurar conexión en Airflow

Paso 1. Ir a la sección de conexiones.
Paso 2. Crear una nueva conexión.
Paso 3. Llenar la información de la conexión. Los campos obligatorios son Conn Id y Host.

Una vez que hayamos salvado la nueva conexión, estamos listos para volver a nuestro código de Python y terminar de configurar esta integración.

Generando la notificación

Una vez agregada la conexión a Airflow, lo que sigue es generar el script que dispare la alerta cuando un evento ocurre. En este caso tenemos dos funciones diferentes para notificar, una cuando un DAG falla y otra cuando el proceso finaliza de manera exitosa. En esta ocasión, así lucen nuestras funciones:

Las alertas de error y éxito utilizan el mismo Webhook, solamente cambian el mensaje de notificación.

Este script lo nombraremos slack_airflow_notification.py y lo guardaremos en una carpeta llamada tools.

Para facilitar el orden y acceso a los archivo, las carpeta tools debe estar al mismo nivel que nuestros DAGs.

Configurando el disparo de la alerta

Por último, iremos al script de nuestro DAG, importaremos las funciones que creamos y las agregaremos a su parámetro correspondiente. En este caso, solo importamos la alerta de falla; por ende, usaremos el parámetro llamado on_failure_callback dentro del objeto PythonOperator y le asignaremos nuestra función task_fail_slack_alert.

En la documentación de Airflow puedes consultar los diferentes parámetros disponibles para enviar mensajes dado un evento.

Organizando alertas (aka. Cómo conciliar el sueño)

Una vez que nuestro DAG esté andando, las alertas comenzarán a llegar a nuestro canal de Slack. Siempre es muy importante tener bien organizados los canales de notificaciones. Esto nos permitirá visualizar fácilmente las alertas y estar al pendiente de evento importantes.

Asimismo, no perdamos de vista que Airflow nos deja visualizar el status y log (entre otras cosas) de las tareas desde su interfaz; de forma que, si solo creamos alertas de emergencia, nos evitaremos despertar a medianoche por una notificación que realmente no era tan importante.

Foto por Isabella and Louisa Fischer en Unsplash

--

--