Resumen
Un webhook es una función de devolución de llamada que se basa en el protocolo HTTP, la cual permite que dos interfaces de programación de aplicaciones (API) se comuniquen a partir de eventos de forma ligera. Muchas aplicaciones web utilizan esta función para recibir pequeñas cantidades de datos de otras aplicaciones, pero también sirve para activar flujos de trabajo de automatización en los entornos de GitOps.
Dado que conectan las fuentes de eventos con las soluciones de automatización, son una forma de iniciar la automatización basada en eventos para llevar a cabo acciones de TI cuando se produce un evento específico.
Webhooks para el desarrollo de aplicaciones
¿Qué es una API?
Una API es un conjunto de definiciones y protocolos que se utiliza para desarrollar e integrar los sistemas de software de las aplicaciones. La comunicación entre ellas suele considerarse como un contrato entre el usuario y el proveedor de la información, en el cual se establece el contenido que necesita el consumidor (la llamada) y el que requiere el productor (la respuesta). También puede definirse como una relación en la cual la aplicación cliente llama a la aplicación servidor, pero estas funciones pueden invertirse según la aplicación que solicite los datos en determinada situación.
Por lo general, las API web utilizan el protocolo HTTP para solicitar datos de otras aplicaciones y definir la estructura de los mensajes de respuesta, que suelen ser archivos XML o JSON. Estos son los formatos preferidos porque presentan los datos de una manera fácil de manejar para otras aplicaciones.
Cuando la API cliente llama a la API servidor para solicitarle datos, busca comprobar si se ha producido un evento determinado, es decir, si los datos del servidor se modificaron de manera que puedan ser útiles para el cliente. En este proceso (conocido como consulta), el cliente envía solicitudes de HTTP de forma regular hasta que la API del servidor le devuelve los datos correspondientes, que suelen denominarse carga útil.
Dado que la aplicación cliente no conoce el estado de la aplicación servidor, envía una consulta a la API de este último para obtener actualizaciones, y continúa haciéndolo hasta que se produzca el evento específico. Sin embargo, el servidor solo envía los datos solicitados una vez que la información está disponible.
¿Cuáles son los aspectos característicos de los webhooks?
Para configurar un webhook, el cliente proporciona una URL única a la API servidor y especifica el evento sobre el cual desea obtener información. Luego de configurarlo, el cliente ya no tendrá que hacerle más consultas al servidor, dado que este le enviará automáticamente la carga útil correspondiente a la URL del webhook cuando se produzca el evento específico.
Los webhooks también se conocen como API inversas o API push porque, al usarlos, quien debe encargarse de la comunicación es el servidor, en vez del cliente. Es decir, el servidor le envía al cliente una solicitud POST única de HTTP cuando los datos están disponibles, en lugar de que el cliente le envíe solicitudes de HTTP hasta obtener una respuesta. A pesar de las denominaciones que se utilizan para los webhooks, no son API, sino que ambos funcionan en conjunto. Las aplicaciones deben tener una API para usar un webhook.
El nombre webhook es tan solo la combinación entre la palabra web, en referencia a su comunicación basada en el protocolo HTTP, y la función de programación de enlaces (hooking) que permite a las aplicaciones interceptar llamadas u otros eventos que podrían ser útiles. Los webhooks enlazan el evento que se produce en la aplicación servidor y le solicitan que envíe la carga útil al cliente a través de la web. En 2007, Jeff Lindsay realizó una publicación en su blog que ayudó a popularizar el concepto: "Web hooks to revolutionize the web".
Los equipos de TI utilizan diversos métodos para proteger las aplicaciones que se comunican mediante webhooks. La mayoría de ellas agrega una clave secreta en el encabezado de la solicitud de la carga útil para que el cliente pueda confirmar la identidad del servidor. Los webhooks suelen estar protegidos con la función de seguridad de la capa de transporte (mTLS) de autenticación mutua, que verifica tanto al cliente como al servidor antes de enviar la carga útil. También es habitual que las aplicaciones cliente utilicen el cifrado SSL para la URL del webhook, a modo de garantizar la privacidad de los datos que se transfieren.
Webhooks:
- Eliminan la necesidad de efectuar consultas, por lo que la aplicación cliente puede ahorrar recursos.
- Se configuran rápidamente. Si una aplicación es compatible con los webhooks, se pueden configurar fácilmente a través de la interfaz de usuario de la aplicación servidor. Aquí es donde el cliente introduce la URL del webhook de su aplicación y establece algunos parámetros básicos, como el evento que le interesa.
- Automatizan la transferencia de los datos. La carga útil se envía ni bien se produce el evento específico en la aplicación servidor, por lo que es el evento el que inicia el intercambio, el cual se produce de manera casi instantánea, al igual que las transferencias de datos del servidor al cliente.
- Son ideales para cargas útiles ligeras y específicas. Los webhooks confían en que el servidor determinará la cantidad de datos que debe enviar y que el cliente interpretará la carga útil y la utilizará de forma productiva. Dado que el cliente no controla el momento exacto en que se realiza la transferencia de datos ni su tamaño, los webhooks se ocupan de pequeñas cantidades de información entre dos extremos, por lo general a través de notificaciones.
Webhooks para la automatización de la infraestructura
La función más común de los webhooks consiste en simplificar la comunicación entre dos aplicaciones, pero también pueden utilizarse para automatizar los flujos de trabajo de la infraestructura como código (IaC) y posibilitar las prácticas de GitOps.
¿Qué es la infraestructura como código (IaC)?
La infraestructura como código (IaC) permite gestionar y preparar la infraestructura a través del código, en lugar de hacerlo mediante procesos manuales. El control de versiones es un aspecto importante de la IaC, el cual debería aplicarse tanto a los archivos de configuración como a cualquier otro archivo de código fuente del software. La implementación de esta infraestructura también permite dividirla en elementos modulares que pueden combinarse de distintas maneras mediante la automatización.
Si utiliza la IaC para automatizar la implementación de la infraestructura, los desarrolladores no tendrán que preparar ni gestionar manualmente los servidores, los sistemas operativos, el almacenamiento ni ningún otro elemento cada vez que desarrollen o implementen una aplicación. La codificación de la infraestructura le proporciona una plantilla que puede seguir durante el proceso de preparación. Si bien estos procesos aún se pueden realizar de forma manual, también es posible automatizarlos con un motor empresarial de estado deseado, como Red Hat® Ansible® Automation Platform.
¿Qué es GitOps?
GitOps es un enfoque estratégico para la gestión de los ajustes de la infraestructura y las aplicaciones por medio de Git, un sistema de control de versiones open source. Teniendo en cuenta estas prácticas, los desarrolladores utilizan Git como una fuente única de información para la infraestructura declarativa y las aplicaciones, y utilizan las solicitudes de incorporación de cambios de Git para gestionar la preparación y la implementación de la infraestructura de forma automática. El repositorio de Git contiene el estado completo del sistema, lo cual le permitirá ver y auditar el registro de modificaciones.
¿Cuál es la función de los webhooks?
Los webhooks simplifican el proceso de instalación y gestión de los canales de implementación pensados para Git, y pueden utilizarse para iniciar automáticamente flujos de trabajo completos de la IaC. En un entorno de GitOps, que tiene un repositorio de Git como fuente de información, un webhook funciona de la misma manera que lo hace entre dos aplicaciones: cuando un evento específico lo activa, una API envía una carga útil a otra API. Sin embargo, la diferencia radica en el tipo de evento que lo activa y el uso que el destinatario le da a la carga útil.
En este contexto, el repositorio de Git funciona como la aplicación servidor; y el motor de estado deseado, que gestiona el estado de la infraestructura, como la aplicación cliente. Los webhooks pueden utilizarse para notificar al motor de estado deseado cada vez que se realiza un cambio en el repositorio. Si se actualiza un fragmento de código y se envía al repositorio, se activará el webhook. Luego, el repositorio enviará la carga útil a la dirección del webhook del motor de estado deseado de forma automática y le informará sobre dicha modificación.
Si el motor de estado deseado admite la automatización, estos webhooks también podrán iniciar flujos de trabajo de la IaC, lo cual convierte un cambio en el código en una acción automatizada. Por ejemplo, los administradores de sistemas pueden configurar la automatización que se ejecuta cuando se recibe la carga útil de un webhook para que aplique los nuevos cambios de código en los hosts gestionados y los restaure a su estado predeterminado automáticamente. Este método se puede trasladar al ámbito de la automatización basada en eventos, es decir, para que lleve a cabo otras acciones de la TI sin la intervención del personal.
La única diferencia es la fuente de los eventos: en lugar de conectar un motor de estado deseado a un repositorio de Git, el cual depende de las personas para enviar las actualizaciones de código, un webhook puede conectarlo a una herramienta de terceros que supervise una fuente para detectar eventos específicos. Una vez que se detecta un evento determinado y se activa el webhook, la carga útil puede iniciar la automatización para resolver de inmediato el evento en cualquier momento del día, sin que sea necesaria ninguna acción por parte del personal de TI.
Webhooks para la automatización basada en eventos
La automatización basada en eventos es el proceso que permite responder automáticamente a las condiciones cambiantes en un entorno de TI, con el fin de resolver los problemas con mayor rapidez y reducir las tareas repetitivas o rutinarias. Gracias a este proceso, los equipos de TI pueden codificar las respuestas a cualquier evento, como los problemas de hardware, los ataques distribuidos de denegación de servicio (DDoS), la falta de memoria o las fallas de las aplicaciones, de manera que se ejecuten las acciones necesarias de forma automática cuando se produzca el evento.
Las soluciones basadas en eventos dependen de las herramientas o los plugins de terceros, como ServiceNow, Kafka, Prometheus, Sensu, Dynatrace y Appdynamics, para supervisar una fuente de eventos. Los webhooks se pueden utilizar para conectar estas fuentes de eventos a una plataforma de automatización, para que cuando se detecte un evento, el webhook active la respuesta automática correspondiente.
Los equipos de TI pueden adoptar la automatización basada en eventos de forma progresiva para reducir el tiempo medio de resolución (MTTR) y llevar a cabo funciones que aún requieren la intervención manual, como la creación automática de una solicitud de seguimiento de incidentes, y avanzar de forma progresiva hacia la resolución de problemas completamente automática para poder responder de inmediato ante un evento específico.
Comience a generar innovaciones y resistencia en las operaciones de TI con la automatización basada en eventos
La solución de Red Hat
Red Hat Ansible Automation Platform es una plataforma de automatización integral diseñada para ayudar a los equipos de TI a implementar la automatización, gestionarla y extenderla a toda la empresa. Puede usar los webhooks para integrar Ansible Automation Platform a un repositorio de Git a través de un servicio como GitHub o GitLab y respaldar las prácticas de IaC y GitOps. Una vez que se configura un enlace al repositorio, Ansible Automation Platform detecta los cambios confirmados del sistema de Git y utiliza esos eventos para activar trabajos de automatización que permiten actualizar proyectos, gestionar inventarios y realizar implementaciones.
Los webhooks permiten activar la automatización de forma automática cuando se producen eventos en el sistema de control de versiones. Gracias a ello, no es necesario utilizar herramientas adicionales de CI/CD, como Jenkins, para supervisar los repositorios e iniciar trabajos de automatización cuando se producen cambios, lo cual simplifica el flujo de trabajo de GitOps y agiliza las operaciones. Por otro lado, gracias a que Ansible Automation Platform funciona con varias herramientas de desarrollo e implementación, usted mismo puede personalizar el flujo de trabajo de GitOps con sus herramientas y procesos preferidos.
La automatización esencial con Event-Driven Ansible
Event-Driven Ansible forma parte de Ansible Automation Platform y ofrece la función de gestión de eventos necesaria para automatizar las tareas que consumen mucho tiempo y responder a las condiciones cambiantes de cualquier área de la TI. Esta función procesa los eventos que contienen información específica sobre las condiciones de los entornos de TI, determina la respuesta adecuada y ejecuta las acciones automatizadas para abordar o corregir el evento.
Event-Driven Ansible se puede utilizar para automatizar las tareas de gestión de los servicios de TI, como la mejora de las solicitudes de seguimiento de incidentes, la resolución de los problemas y la gestión de los usuarios, así como muchos otros procesos de TI. Además, esta función conecta las fuentes de eventos con las acciones correspondientes a través de reglas. Los rulebooks de Ansible definen las fuentes y explican las acciones que se deben llevar a cabo ante algún evento utilizando instrucciones condicionales "si sucede esto, se hace aquello" (if-this-then-that). Según el rulebook que diseñe, Event-Driven Ansible reconocerá el evento en particular, lo asociará con la acción adecuada y la ejecutará automáticamente.
Puede utilizar los webhooks genéricos totalmente compatibles para conectar Event-Driven Ansible a las fuentes de eventos, pero esta función también ofrece una biblioteca de ecosistemas con plugins de fuentes de eventos diseñados por los partners para sus tecnologías específicas. Estos plugins le permiten generar automatizaciones basadas en eventos sin tener que escribir código ni programar webhooks para todos los eventos nuevos. Solo debe identificar los eventos que le interesan y las acciones que se deben llevar a cabo. Luego, debe escribir estas instrucciones en un rulebook de Ansible, el cual permite que cualquier evento ejecute automáticamente un playbook de Ansible que ya utiliza o el flujo de trabajo de automatización que usted desea.