• ¡Obtenga la seguridad de la aplicación de la manera correcta! Detectar, proteger, monitorear, acelerar y más ...
  • 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 deseaba un servidor, levantaría un ticket y alguien del equipo de operaciones crearía una instancia de VM u ordenaría un servidor físico. Esto podría ser mediante scripts, apuntar y hacer clic o incluso instalar manualmente.

    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, tuvieron configuraciones ligeramente diferentes entre sí (deriva de la configuración), lo que resultó en servidores de copos de nieve. Y cuando algo se rompió, fue un desafío realizar un seguimiento de los cambios realizados.

    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 servicio de almacenamiento en la nube empresas 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 deba cancelarlos para ahorrar costos. Como paga por hora, es posible que deba aumentar o disminuir 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 finalizar instancias y otros componentes de infraestructura en el código permite la automatización. La automatización en el aprovisionamiento de infraestructura y nube puede ayudar a generar valor de manera más rápida y confiable.

    ¿Qué es la infraestructura como código?

    La infraestructura como código (IaC) es la automatización de la infraestructura que utiliza 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. 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, lo pruebe y luego lo aplique a sus sistemas.

    Beneficios

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

    Autoservicio

    Como la infraestructura se define como código, todo el proceso y la implementación se pueden automatizar y cualquier persona en el DevOps equipo. 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 necesarios. Esto puede ser extremadamente difícil de lograr con scripts bash.

    Herramientas como Ansible y Terraform tienen funciones integradas para 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 coherente 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 función. 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 se rompe.

    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 buscar errores mediante análisis estático 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 con la que trabajar puede no ser fácil. Las siguientes son algunas de las consideraciones que pueden resultarle útiles:

    Gestión de la 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 gestión de la configuración están diseñadas para gestionar usuarios, instalar y gestionar software y herramientas en servidores existentes. Cocinero, Marioneta, Ansibley 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 la 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, cortafuegos 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 versus 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 cambios en la configuración. Por ejemplo, algunos cambios que funcionan bien en servidores de prueba pueden no funcionar en servidores de producción.

    Herramientas como Terraform y CloudFormation están diseñados 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, reemplácelos por servidores nuevos. Cuando los nuevos servidores estén activos, puede cancelar los antiguos. Cada implementación utiliza una imagen inmutable para crear un servidor, evitando así 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 elabora 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 imperativas como declarativas.

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

    Usando múltiples herramientas juntas

    Aunque cada una de estas herramientas se puede usar por sí sola, un enfoque común es usarlas juntas. Por ejemplo, puede utilizar 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: puede controlarse la versión, probarse, conduce a un aprovisionamiento y entrega de software más rápidos. Muchas organizaciones ya han comenzado a adoptar el enfoque de IaC para construir y administrar su infraestructura.