Programación declarativa frente a programación imperativa para la infraestructura como código (IaC)
La Infraestructura como Código, o IaC, es una práctica DevOps que consiste en convertir las configuraciones de infraestructura en scripts de software. Esto permite aprovisionar y parchear automáticamente nuevos recursos, lo que ahorra tiempo y reduce los errores de configuración. Las herramientas IaC utilizan un lenguaje de programación declarativo o imperativo para ejecutar los scripts de configuración. Definamos estos dos paradigmas de programación antes de comparar la programación declarativa frente a la imperativa para la infraestructura DevOps como código, de modo que pueda ver las ventajas y desventajas de cada uno.
Programación declarativa para IaC: Definir qué
En la programación declarativa, se especifica el nombre y las propiedades de los recursos de infraestructura que se desea aprovisionar y, a continuación, la herramienta IaC averigua por sí misma cómo lograr ese resultado final. Declaras a tu herramienta IaC lo que quieres, pero no cómo llegar a ello. Algunos ejemplos de herramientas de IaC populares que utilizan el paradigma de programación declarativa son Terraform, Puppet, Ansible, Salt y CloudFormation.
Programación imperativa para IaC: Definir cómo
En la programación imperativa, se especifica una lista de pasos que la herramienta IaC debe seguir para aprovisionar un nuevo recurso. Le dices a tu herramienta IaC cómo crear cada entorno utilizando una secuencia de comandos imperativos. Chef es una popular herramienta IaC imperativa, y tanto Ansible como Salt también tienen soporte para programación imperativa.
Programación declarativa vs imperativa
Cuando se compara la programación declarativa frente a la imperativa, se observa que cada paradigma presenta ventajas y desventajas que hay que tener en cuenta antes de elegir el enfoque de la IaC.
Ventajas e inconvenientes de la programación declarativa
La programación declarativa es un enfoque popular de la infraestructura como código. Usted define el estado final deseado de la configuración final y la solución IaC calcula cómo llegar a él. La programación declarativa es altamente idempotente o repetible, lo que significa que se pueden ejecutar los comandos de IaC una y otra vez y obtener el mismo resultado. El paradigma declarativo también se adapta bien a la deriva de la configuración -los inevitables y lentos cambios en la infraestructura a lo largo del tiempo- porque los pasos de aprovisionamiento de la herramienta IaC no están definidos explícitamente.
El mayor inconveniente del enfoque declarativo es que se renuncia a un gran control sobre los pasos individuales del proceso de aprovisionamiento. Tampoco es la mejor opción para pequeñas correcciones y actualizaciones que puedan gestionarse con un simple script CLI (interfaz de línea de comandos): la programación declarativa puede complicar demasiado las cosas y ralentizar el proceso.
Pros y contras de la programación imperativa
La programación imperativa, por otro lado, requiere más conocimientos de scripting porque debes escribir comandos para cada paso del aprovisionamiento. Esto te da el control sobre cómo llevar a cabo las tareas de infraestructura, lo que es ideal cuando necesitas hacer pequeños cambios, optimizar para un propósito específico, o tener en cuenta las peculiaridades del software.
El mayor desafío inicial para el enfoque imperativo es que requiere un alto nivel de habilidad con el lenguaje de programación, que los equipos de infraestructura en las etapas iniciales del viaje DevOps pueden no tener todavía. Los scripts de IaC imperativos también suelen ser menos idempotentes: sus pasos predefinidos pueden conducir a resultados diferentes dependiendo del entorno. Además, los scripts de IaC imperativos son tan explícitos que un error en un paso puede hacer que todo falle.
Comparación entre programación declarativa e imperativa:
Ventajas de la programación declarativa
- Requiere menos habilidades de codificación
- Control de cada paso del proceso
- Altamente repetible
Ventajas de la programación imperativa
- Ideal para tareas sencillas o puntuales
- Se adapta bien a los cambios de configuración
- Sigue un enfoque familiar, paso a paso
Desventajas de la programación declarativa
- Menos control sobre el proceso
- Requiere muchos conocimientos de programación
- Puede complicar en exceso tareas sencillas
Desventajas de la programación imperativa
- Menos idempotente
- Puede ser más difícil de conceptualizar
- La explicitud lo hace propenso a errores
En general, muchas organizaciones que buscan automatizar y orquestar completamente su infraestructura DevOps prefieren el enfoque declarativo. Puede utilizar herramientas de IaC declarativas para crear scripts de configuración altamente repetibles y adaptables sin años de experiencia en codificación. Sin embargo, si se está iniciando en la automatización de la infraestructura con unos pocos scripts CLI, o si no necesita una plataforma de orquestación completa, el enfoque imperativo suele ser más sencillo y fácil de gestionar.
Comparar la programación declarativa frente a la imperativa para IaC es sólo un paso en el proceso de automatización de infraestructuras DevOps.