La infraestructura como código (IaC) es un poderoso paradigma para imaginar, configurar y desplegar un entorno de TI. En el modelo de IaC, un sistema informático no se construye manualmente, sino que se describe en un archivo mediante un lenguaje especializado. A continuación, una herramienta de automatización lee el archivo y construye el sistema según las especificaciones del usuario. La eficiencia y versatilidad de la IaC la han convertido en un complemento popular de DevOps y de la revolución de la computación en la nube.
Varias plataformas de automatización son compatibles con la IaC, cada una de ellas con muchas características y ventajas diferentes. Cuando empiece a imaginar una solución de la IaC, tendrá que considerar cuáles de esas características se adaptarán mejor a sus necesidades. Una consideración importante a tener en cuenta al comparar las plataformas de automatización de la IaC es si la herramienta soporta operaciones imperativas o declarativas.
Los términos imperativos y declarativos aparecen con frecuencia en los debates sobre la IaC. Ambos términos se refieren a la forma en que el usuario proporciona la dirección a la plataforma de automatización. Con una herramienta imperativa, se definen los pasos a ejecutar para llegar a la solución deseada. Con una herramienta declarativa, usted define el estado deseado de la solución final, mientras que la plataforma de automatización determina cómo alcanzar ese estado.
Los sistemas imperativos suelen ser inicialmente más fáciles. Se podría decir que un sistema imperativo está organizado de forma más parecida a como piensa un humano. Los sistemas imperativos le permiten seguir pensando en la configuración como una serie de acciones o pasos, cada uno de los cuales le acerca al objetivo. Otra ventaja del lenguaje imperativo es que permite automatizar configuraciones muy detalladas y complejas mediante la construcción de múltiples capas de comandos. Y, como un sistema imperativo da al usuario más control sobre cómo realizar una tarea, suele ser más eficiente y más fácil de optimizar para un propósito específico que un sistema declarativo.
Con todas las ventajas de los lenguajes imperativos, quizá se pregunte por qué los lenguajes declarativos están tan en boga. Las herramientas declarativas han ido ganando popularidad desde hace varios años y podría decirse que son el formato dominante para la automatización de la IaC. Una de las razones de la popularidad de las herramientas declarativas es que requieren menos conocimientos por parte del usuario, al menos una vez que se entiende su funcionamiento.
Con una herramienta imperativa, el usuario debe tener suficientes conocimientos para decirle a la plataforma de automatización lo que debe hacer. Con un sistema declarativo, el usuario solo tiene que definir el estado de la configuración final, mientras que la plataforma determina cómo llegar a ella. La complejidad de la ejecución paso a paso se oculta al usuario.
Otra ventaja de un lenguaje declarativo es que es más idempotente. El concepto de idempotencia se refiere a un proceso que puede ejecutarse varias veces con el mismo resultado. Como un lenguaje declarativo solo define el estado final, siempre se termina en el mismo lugar, sin importar dónde se comience. Por otro lado, un lenguaje imperativo concibe una tarea como una serie de pasos predefinidos que pueden llevarle a un punto final diferente dependiendo del punto de partida.
Las principales plataformas de automatización de la IaC ocupan diversos lugares en el espectro que va de lo imperativo a lo declarativo, aunque muchas herramientas tienen al menos cierta capacidad para soportar ambos enfoques. Chef es generalmente conocida como una herramienta imperativa. Terraform y Puppet se consideran declarativas. Ansible y Salt son mayoritariamente declarativas, pero ofrecen cierto soporte para comandos imperativos.
Tendrá que tener en cuenta muchos factores cuando busque una plataforma de automatización de IaC. La elección de imperativo frente a declarativo es solo un criterio en una matriz mayor de opciones. Sin embargo, cuando empiece a diseñar su futuro entorno de IaC, es importante que dedique algún tiempo a visualizar si una solución imperativa o declarativa sería mejor para su organización.
Comentarios