Una introducción a la infraestructura como código

Según la encuesta del informe Accelerate State of DevOps 2019, el 80 % de los encuestados dijo que la aplicación o el servicio principal que admitían estaba alojado en algún tipo de plataforma en la nube. El 50% de los encuestados dijo que su aplicación principal estaba alojada en la nube pública.

¿Por qué la infraestructura como código?

Tradicionalmente, si miramos hacia atrás cuando quería un servidor, generaría un ticket y alguien del equipo de operaciones crearía una instancia de VM o pediría un servidor físico. Esto podría ser mediante scripts, señalar y hacer clic o incluso una instalación manual.

Y luego, con cada solicitud, habría más máquinas virtuales, para DNS, correo, bases de datos, etc. Y luego, hubo actualizaciones continuas de los sistemas operativos, servidores web, JVM y todo lo demás. Con el tiempo, tenían configuraciones ligeramente diferentes entre sí (desviación de la configuración), lo que resultó en servidores de copos de nieve. Y cuando algo se estropeaba, era un reto hacer un seguimiento de los cambios que se hacían.

Esto seguía siendo aceptable siempre que los servidores fueran pocos y de larga duración.

Se produjo un gran cambio con la llegada de empresas de servicios en la nube como AWS. Muchas empresas, en lugar de invertir en hardware y centros de datos, comenzaron a trasladar sus aplicaciones a la nube. Y en la nube, podría implementar un servidor en minutos, lo que antes llevaría horas o incluso días.

Para mantener un rendimiento y una disponibilidad óptimos, es posible que deba implementar más instancias para satisfacer la demanda. Y luego, es posible que tenga que cancelarlos para ahorrar costos. Como paga por hora, es posible que deba aumentar o reducir todos los días. Hacer esto manualmente, muchas veces al día, es claramente un desafío.

La captura de los pasos necesarios para implementar o terminar instancias y otros componentes de la infraestructura en el código permite la automatización. La automatización en la nube y el aprovisionamiento de infraestructura puede ayudar a generar valor de manera más rápida y confiable.

¿Qué es la infraestructura como código?

Infraestructura como código (IaC) es la automatización de la infraestructura utilizando principios y prácticas de desarrollo de software.

La idea es que trate su infraestructura como software y luego escriba, pruebe y ejecute código para definir, implementar, actualizar y destruir su infraestructura. Usted escribe código para administrar sus servidores, bases de datos, redes, registros, implementación y configuración de aplicaciones. Cuando desee realizar cambios en su infraestructura, realice cambios en el código, pruébelo y luego aplíquelo a sus sistemas.

Beneficios

La infraestructura como código ofrece beneficios significativos sobre el aprovisionamiento manual:

Autoservicio

Dado que la infraestructura se define como código, todo el proceso y la implementación se pueden automatizar y cualquier miembro del equipo de DevOps puede iniciarlos. Los usuarios de la infraestructura obtienen los recursos que necesitan cuando los necesitan.

idempotencia

Ser idempotente significa que define el estado deseado, y no importa cuántas veces ejecute el script, el resultado es el mismo. Comprueba el estado actual y el estado deseado y solo aplica los cambios que son necesarios. Esto puede ser extremadamente difícil de lograr con scripts de bash.

Herramientas como Ansible y Terraform tienen funciones integradas para hacer que su código sea idempotente.

Costos reducidos

Reduce el tiempo y el esfuerzo necesarios para el aprovisionamiento, mucho menos que el aprovisionamiento manual.

Entrega de software más rápida

El aprovisionamiento rápido de infraestructura para desarrollo, pruebas y producción da como resultado su capacidad para entregar software mucho más rápido. Dado que el proceso de implementación está automatizado, también es consistente y repetible.

autodocumentado

El estado de la infraestructura se define en un código que cualquiera puede leer fácilmente.

Versión controlada

Tradicionalmente, los cambios en los sistemas de producción se consideran riesgosos. Pero entonces, el cambio es inevitable. Es posible que deba agregar una nueva base de datos cuando agregue una nueva característica. Es posible que deba agregar nuevos servidores o almacenamiento al clúster. La infraestructura como código reduce el esfuerzo y el riesgo de realizar cambios en la infraestructura.

Puede registrar sus archivos de origen en el control de versiones, lo que significa que puede realizar un seguimiento de todos los cambios realizados en la infraestructura y volver rápidamente a la versión anterior si algo falla.

Validación y prueba

La infraestructura como código permite probar y aplicar pequeños cambios de forma continua. Como todo es código, puede comprobar si hay errores mediante análisis estáticos y pruebas automatizadas.

Seguridad mejorada

El cambio a la infraestructura como código le permite integrar la seguridad desde el principio y luego puede aplicar los cambios de manera confiable y segura.

Infraestructura como herramientas de código

Si bien hay muchas herramientas disponibles, elegir una para trabajar puede no ser fácil. Las siguientes son algunas de las consideraciones que pueden resultarle útiles:

Gestión de configuración frente a herramientas de aprovisionamiento

En términos generales, las herramientas disponibles se dividen en dos categorías:

Herramientas de gestión de la configuración. Herramientas de aprovisionamiento

Herramientas de gestión de la configuración

Las herramientas de administración de configuración están diseñadas para administrar usuarios, instalar y administrar software y herramientas en servidores existentes. Chef, Puppet, Ansible y SaltStack son principalmente herramientas de configuración.

Infraestructura como herramientas de gestión de configuración de código

Puede utilizar herramientas de gestión de configuración para instalar y actualizar el software en los servidores.

Herramientas de aprovisionamiento

Terraform, CloudFormation, OpenStack Heat, por otro lado, son herramientas de aprovisionamiento, es decir, se utilizan para crear servidores, servidores de bases de datos, balanceadores de carga, colas, subredes, firewalls y todos los demás componentes de su infraestructura. Estas herramientas realizan llamadas API a los proveedores para crear la infraestructura necesaria.

Infraestructura como herramientas de aprovisionamiento de código

Infraestructura mutable frente a inmutable

La infraestructura mutable es aquella que se puede modificar después de haber sido aprovisionada. Chef, Ansible, Puppet y SaltStack están diseñados para instalar o actualizar el software en servidores existentes. Esto puede suceder muchas veces durante la vida útil de un servidor. Después de muchas actualizaciones, es probable que cada servidor sea un poco diferente de los demás, lo que lleva a una desviación de la configuración. Por ejemplo, algunos cambios que funcionan bien en los servidores de prueba pueden no funcionar en los servidores de producción.

Herramientas como Terraform y CloudFormation están diseñadas para crear un nuevo servidor a partir de una imagen de máquina o una imagen de contenedor cada vez. Si es necesario actualizar los servidores, los reemplaza con servidores nuevos. Cuando los nuevos servidores estén activos, puede cancelar los antiguos. Cada implementación utiliza una imagen inmutable para crear un servidor y, por lo tanto, evita la desviación de la configuración. Sin embargo, esto puede ser un poco lento.

Herramientas imperativas frente a declarativas

Las herramientas imperativas son similares a las secuencias de comandos. Enumera los pasos a seguir para llegar al estado deseado. Las herramientas declarativas le permiten especificar el estado final y la herramienta determina los pasos para lograr ese estado.

Si bien Chef es principalmente una herramienta imperativa, Ansible utiliza un enfoque híbrido y admite técnicas tanto imperativa como declarativa.

Terraform, CloudFormation, Puppet, OpenStack Heat y SaltStack pertenecen a la categoría de herramientas declarativas donde declara el estado final deseado.

Usar varias herramientas juntas

Aunque cada una de estas herramientas se puede usar por sí sola, un enfoque común es usarlas juntas. Por ejemplo, puede usar Terraform para crear VPC, subredes, puertas de enlace de Internet, balanceadores de carga y máquinas virtuales y luego usar Ansible para configurar e implementar servicios en estas instancias.

Conclusión

La infraestructura definida como código ofrece muchas ventajas sobre el aprovisionamiento manual: se puede controlar la versión, probar, conduce a un aprovisionamiento y una entrega de software más rápidos. Muchas organizaciones ya han comenzado a adoptar el enfoque IaC para construir y administrar su infraestructura.

Publicaciones relacionadas

Botón volver arriba