¿Qué es la infraestructura como código (IaC)?

Mujer sentada frente a una pantalla con códigos, trabajando en una PC de escritorio

Autores

Jim Holdsworth

Staff Writer

IBM Think

Annie Badman

Staff Writer

IBM Think

¿Qué es la infraestructura como código (IaC)?

La infraestructura como código (IaC) es una práctica de DevOps que automatiza el aprovisionamiento y la gestión de la infraestructura de TI mediante el uso de archivos de configuración en lugar de procesos manuales.

IaC trata la infraestructura como software. Los equipos utilizan IaC para versionar, probar y desplegar la infraestructura utilizando las mismas prácticas que utilizan para el código de la aplicación. 

Este enfoque permite a los equipos eludir la configuración manual tradicional, que puede ser engorrosa y propensa a errores. La configuración manual a menudo implica el ajuste de servidores individuales, la gestión basada en consolas y cambios no documentados.

En su lugar, los equipos definen los requisitos de infraestructura en archivos de configuración que especifican los recursos necesarios (servidores, redes, bases de datos, políticas de seguridad) y cómo configurarlos. Estos archivos se almacenan en sistemas de control de versiones, lo que proporciona capacidades de seguimiento, revisión y reversión.

IaC es un elemento importante de la práctica más amplia de automatización de infraestructura, que utiliza código y automatización para gestionar la infraestructura de TI a lo largo de su ciclo de vida. Con IaC, los desarrolladores ya no necesitan aprovisionar manualmente los componentes de la infraestructura cada vez que desarrollan, prueban o despliegan aplicaciones. Esta automatización ayuda a las organizaciones a controlar los costos, reducir los riesgos y responder rápidamente a las nuevas oportunidades de negocio.

A medida que las organizaciones adoptan arquitecturas nativas de la nube, IaC es cada vez más esencial. Los entornos de TI ahora abarcan múltiples nubes, miles de contenedores y microservicios distribuidos. Los procesos manuales que antes gestionaban unos cuantos servidores no pueden manejar estas arquitecturas, donde los equipos despliegan con frecuencia cientos de aplicaciones diariamente y aprovisionan, escalan y desmantelan constantemente la infraestructura.

IaC ayuda a gestionar estos entornos complejos de tres maneras críticas:

  • Operar a escala: configurar y mantener miles de servidores, contenedores y recursos en la nube en múltiples entornos.

  • Acelerar los ciclos de despliegue: escalar la infraestructura al instante para satisfacer la demanda sin una configuración manual que requiere mucho tiempo.

  • Garantizar la coherencia: eliminar el error humano y la desviación de la configuración que pueden ayudar a generar vulnerabilidades de seguridad, violaciones del cumplimiento e interrupciones del servicio.

Por ejemplo, una empresa de venta minorista que se prepara para el Black Friday podría necesitar escalar 100 a 1000 servidores en cuestión de horas. Con IaC, este escalamiento ocurre automáticamente en la infraestructura on premises y en la nube, en función de plantillas predefinidas. Esta capacidad de escalar ayuda a garantizar que cada nuevo servidor mantenga configuraciones idénticas de seguridad y cumplimiento.

Según el IBM Institute for Business Value, el 65 % de los ejecutivos informan que las tecnologías de automatización, como IaC, están mejorando la productividad de sus equipos de TI.

Las últimas noticias tecnológicas, respaldadas por los insights de expertos

Manténgase al día sobre las tendencias más importantes e intrigantes de la industria sobre IA, automatización, datos y más con el boletín Think. Consulte la Declaración de privacidad de IBM.

¡Gracias! Ya está suscrito.

Su suscripción se entregará en inglés. En cada boletín, encontrará un enlace para darse de baja. Puede gestionar sus suscripciones o darse de baja aquí. Consulte nuestra Declaración de privacidad de IBM para obtener más información.

Cómo funciona la infraestructura como código

IaC combina un flujo de trabajo repetible con herramientas automatizadas. El flujo de trabajo (escribir, versionar, aprovisionar y desplegar) define cómo los equipos se mueven de los requisitos de infraestructura a los recursos desplegados. Las herramientas (archivos de configuración, sistemas de control de versiones y motores de automatización) proporcionan los mecanismos para definir, rastrear y crear infraestructura.

Juntos, estos elementos transforman la gestión de la infraestructura de un proceso manual y propenso a errores a una función automatizada y repetible. Los equipos escriben la infraestructura como código, con versiones únicas como con el software, y despliegan entornos idénticos bajo demanda.

Flujo de trabajo de IaC

El flujo de trabajo de IaC sigue cuatro etapas:

1. Escribir

Los desarrolladores crean scripts de IaC utilizando lenguajes como HCL, YAML o JSON, de forma similar a como escriben código de aplicación en Java™ o Python. Los equipos escriben definiciones de infraestructura que especifican qué recursos necesitan y cómo configurarlos. A menudo escriben estos archivos en entornos de desarrollo integrados (IDE), que proporcionan características de comprobación de errores y autocompletado.

2. Versión 

El código se almacena en sistemas de control de versiones, también conocidos como control de código fuente o repositorios de código fuente, como Git o GitHub. El control de versiones realiza un seguimiento de los cambios, mantiene versiones alternativas y permite a los equipos volver a versiones anteriores cuando surgen problemas.

3. Provisión

Un motor de automatización lee los archivos de configuración y aprovisiona los recursos de infraestructura especificados. Esta etapa transforma el código en infraestructura real: crea máquinas virtuales (VM), configura redes, configura bases de datos y establece grupos de seguridad. El proceso de aprovisionamiento es idempotente, lo que significa que puede ejecutarse varias veces sin crear recursos duplicados.

4. Despliegue

Los equipos ejecutan scripts para desplegar la infraestructura en varios entornos, donde IaC ayuda a garantizar configuraciones coherentes en todos los entornos. La coherencia de los scripts ayuda más cuando se utiliza el despliegue continuo, donde los cambios de software en una aplicación se liberan automáticamente en el entorno de producción. 

Herramientas automatizadas

Las herramientas automatizadas proporcionan mecanismos para definir, rastrear y crear infraestructura a través del código.

Archivos de configuración

Los archivos de configuración definen la infraestructura. Se pueden escribir en HCL, JSON, YAML o lenguajes específicos de dominio. Estos archivos son proyectos técnicos que describen exactamente qué infraestructura necesita (cuántos servidores, qué tamaño, qué configuración de red) en un formato que las herramientas de automatización pueden leer y ejecutar.

Estos archivos se convierten en la única fuente de información para los equipos, lo que ayuda a garantizar la coherencia en múltiples entornos. Se pueden actualizar, reutilizar o variar para nuevas instalaciones a medida que los equipos agregan más activos. 

Sistemas de control de versiones

Los sistemas de control de versiones almacenan el historial de cada archivo. Realizan un seguimiento del código original y de cualquier alteración en él, incluido lo que se cambió, por quién y cuándo. Este seguimiento permite a los equipos comprender los cambios, recuperar eliminaciones y revertir cuando surgen problemas.

El control de versiones permite a las organizaciones dividir la infraestructura en módulos que se combinan a través de la automatización. Este enfoque modular ayuda a crear, actualizar y crear versiones de entornos complejos, al tiempo que reduce la duplicación y facilita la prueba y la reutilización de scripts.

Motores de automatización

Los motores de automatización automatizan el aprovisionamiento y la configuración mediante el uso de código predefinido. Ejecutan las definiciones de infraestructura en archivos de configuración, convirtiendo el código en recursos de TI reales, como servidores, redes y bases de datos.

Algunos motores son específicos de la nube, como AWS CloudFormation, Azure Resource Manager o Google Cloud Deployment Manager. Otros se ejecutan en todas las nubes, como Terraform, OpenTofu (una bifurcación de código abierto de Terraform) o Pulumi (que utiliza lenguajes de programación de propósito general como Python).

Estos motores de automatización a menudo se combinan con herramientas de orquestación, como Kubernetes, para coordinar recursos y cargas de trabajo a escala.

Integración de API y plataformas

Las herramientas de IaC a menudo se integran con plataformas en la nube a través de interfaces de programación de aplicaciones (API). Estas conexiones API permiten que las herramientas de IaC se comuniquen directamente con los servicios en la nube, creando y gestionando recursos mediante programación en lugar de a través de interacciones manuales de la consola.

IaC también incorpora prácticas estándar de desarrollo de software para ayudar a garantizar la confiabilidad. Las pruebas automatizadas pueden ayudar a verificar las configuraciones de la infraestructura antes del despliegue, identificando errores que de otro modo podrían causar interrupciones o vulnerabilidades de seguridad. Algunos sistemas de control de versiones pueden activar estas pruebas automáticamente cuando se producen cambios en el código, lo que ayuda a garantizar que cada modificación se valide antes de que llegue a producción.

Mixture of Experts | 28 de agosto, episodio 70

Decodificación de la IA: Resumen semanal de noticias

Únase a nuestro panel de ingenieros, investigadores, responsables de producto y otros profesionales de talla mundial que se abren paso entre el revuelo de la IA para ofrecerle las últimas noticias e insights al respecto.

Enfoques básicos de IaC

Al implementar IaC, las organizaciones toman dos decisiones principales: cómo definir una infraestructura (declarativa frente a imperativa) y si una infraestructura se puede modificar después del despliegue (mutable frente a inmutable).

Enfoque declarativo frente a imperativo

Los enfoques declarativo e imperativo difieren en la forma de escribir el código de infraestructura.

El enfoque declarativo, también conocido como enfoque funcional o IaC declarativo, es el método más común. El usuario describe el estado deseado (“Necesito 3 servidores con estas especificaciones”) e IaC se encarga de la implementación. Crea los recursos, instala el software necesario, resuelve las interdependencias y gestiona el control de versiones automáticamente.

El enfoque imperativo, también conocido como enfoque procedimental, requiere que el usuario escriba instrucciones paso a paso para aprovisionar la infraestructura. Los comandos exactos se especifican en un orden preciso: “Primero cree un servidor, luego instale este software y configure estos ajustes”. Este enfoque requiere más experiencia y puede dificultar el mantenimiento de la coherencia.

Infraestructura mutable frente a inmutable

La infraestructura mutable se puede modificar después del aprovisionamiento, mientras que la infraestructura inmutable no se puede modificar después del aprovisionamiento.

La infraestructura mutable proporciona flexibilidad para cambios ad hoc, como abordar requisitos específicos de aplicación o parches de seguridad de emergencia. Sin embargo, esta flexibilidad puede comprometer la coherencia y dificultar el seguimiento de versiones.

La mayoría de las organizaciones eligen una infraestructura inmutable. Para cambiar un servidor o una configuración, los equipos deben reemplazar toda la infraestructura con nuevos recursos.

Si bien esto suena prohibitivo, en realidad puede ser beneficioso por varias razones. En primer lugar, la infraestructura inmutable elimina la desviación de configuración. La desviación es un problema común con la infraestructura mutable, donde los cambios manuales se acumulan con el tiempo, lo que dificulta mantener la coherencia en todos los entornos.

En segundo lugar, la infraestructura inmutable proporciona capacidades confiables de seguimiento de versiones y reversión porque cada cambio crea una nueva instancia versionada. Esto significa que los equipos pueden volver instantáneamente a cualquier configuración anterior.

Por último, con IaC basada en la nube, la nueva infraestructura se puede aprovisionar rápidamente, a menudo en cuestión de minutos, por lo que reaprovisionar todos los recursos de infraestructura es mucho más práctico de lo que parece inicialmente.

Beneficios de la infraestructura como código 

Al automatizar la gestión de la infraestructura que utiliza código, IaC ofrece varios beneficios:

Tiempo de producción más rápido

El aprovisionamiento manual de infraestructura puede requerir semanas de configuración de hardware, instalación del sistema operativo y configuración de red por parte de personal especializado.

IaC reduce el tiempo de aprovisionamiento de semanas a minutos en todos los entornos. Por ejemplo, IaC puede automatizar el aprovisionamiento de infraestructura existente que, de otro modo, requeriría procesos manuales, como la extracción de un ticket. En lugar de esperar días para la configuración de la base de datos y el servidor, los desarrolladores pueden ejecutar un script para desplegarlos en minutos.

Mayor coherencia

Con IaC, cada vez que se aprovisiona la infraestructura, sigue la configuración idéntica definida en el código.

Esta coherencia ayuda a eliminar los errores de configuración manual, como errores tipográficos, pasos omitidos o configuraciones incorrectas, al tiempo que evita la desviación de la configuración o la falta de dependencias.

Las incoherencias de configuración también pueden crear vulnerabilidades de seguridad y violar los requisitos normativos, como la Ley Sarbanes-Oxley (SOX) o el Reglamento General de Protección de Datos (RGPD). Por ejemplo, los puertos abiertos innecesarios o el HTTPS deshabilitado pueden desencadenar violaciones de cumplimiento o fallas de auditoría. IaC ayuda a garantizar configuraciones de entorno idénticas en todo momento, hasta que se necesiten modificaciones.

Desarrollo acelerado

IaC puede ayudar a acelerar cada fase del ciclo de vida de la entrega de software. Los desarrolladores pueden aprovisionar rápidamente sandbox y entornos bajo demanda. Los equipos de control de calidad pueden poner en marcha entornos de prueba al instante. Los equipos de operaciones pueden automatizar la infraestructura para las pruebas de seguridad y aceptación del usuario.

Cuando el nuevo código pasa las pruebas, tanto la aplicación como su infraestructura se despliegan juntas, lo que da como resultado una entrega de características más rápida y despliegues más frecuentes. 

Protección contra la pérdida de conocimiento

Las organizaciones sin IaC suelen confiar en unos cuantos especialistas para el aprovisionamiento. Cuando uno de estos especialistas se va, sus conocimientos a menudo también.

IaC ayuda a preservar el conocimiento de la infraestructura en el código, ayudando a asegurar que la experiencia crítica permanece con la organización.

Menores costos

IaC puede reducir significativamente el tiempo, el esfuerzo y las habilidades especializadas necesarias para aprovisionar y escalar la infraestructura. También optimiza los precios basados en el consumo de la computación en la nube: las organizaciones pueden aprovisionar recursos solo cuando sea necesario y desaprovisionarlos automáticamente cuando estén inactivos.

Este enfoque de pago por uso puede reducir significativamente el gasto en infraestructura, especialmente para entornos de desarrollo y pruebas que no necesitan disponibilidad ininterrumpida.

Cómo encaja IaC en los pipelines de DevOps y CI/CD

IaC es esencial para las prácticas de DevOps porque permite que la infraestructura se mueva a la velocidad del desarrollo de software.

Sin IaC, el aprovisionamiento de infraestructura puede convertirse en un cuello de botella. Mientras que el código se despliega en minutos, la configuración de la infraestructura puede tardar horas o días. Por ejemplo, agregar una nueva base de datos puede requerir un ticket para el equipo de infraestructura y días de espera.

IaC elimina esta brecha aplicando integración continua y entrega continua (CI/CD) a los despliegues de infraestructura. La infraestructura y el código de la aplicación se pueden probar, validar y desplegar juntos en paralelo, en lugar de como procesos dispares.

En la práctica, el código de infraestructura suele residir con el código de aplicación en el control de versiones. Cuando los desarrolladores confirman cambios, el pipeline de CI/CD puede aprovisionar la infraestructura de prueba mediante el uso de plantillas de IaC, ejecutar pruebas automatizadas y usar las mismas plantillas para desplegar en producción. Esto ayuda a garantizar que cada entorno (desarrollo, pruebas, puesta en escena, producción) tenga configuraciones de infraestructura idénticas.

El beneficio clave es la coherencia. Sin IaC, pueden producirse desviaciones ambientales cuando los entornos de prueba no coinciden con la producción, lo que provoca fallas en el despliegue. IaC ayuda a garantizar que lo que funciona en las pruebas funcione también en producción porque ambos utilizan las mismas definiciones de infraestructura. Los equipos pueden revisar los cambios de infraestructura a través de solicitudes de extracción, realizar un seguimiento de las modificaciones y revertirlas cuando sea necesario, tratando la infraestructura con el mismo rigor que el código de la aplicación.

Infraestructura como herramientas de código

Las herramientas de IaC se dividen en categories principales: herramientas de aprovisionamiento que crean y despliegan infraestructura, y herramientas de gestión de configuración que mantienen la infraestructura después del despliegue.

Algunas herramientas se ejecutan en todas las nubes (trabajan en múltiples proveedores), mientras que otras son específicas de la plataforma.

Las organizaciones suelen combinar herramientas de ambas categorías para crear pipelines de IaC completos.

Herramientas de aprovisionamiento 

Las herramientas de aprovisionamiento crean y despliegan recursos de infraestructura: servidores, redes y sistemas de almacenamiento. Se centran en la instalación y configuración iniciales de los componentes de la infraestructura, transformando los requisitos de la infraestructura en recursos en funcionamiento. 

Terraform

Terraform de HashiCorp, una empresa de IBM, es una herramienta IaC que puede ejecutarse en todas las nubes y que usa una configuración declarativa para gestionar la infraestructura en múltiples plataformas.

Los equipos escriben definiciones de infraestructura en HCL (lenguaje de configuración HashiCorp) y pueden desplegar el mismo código en AWS, Azure, Google Cloud o centros de datos on premises. Esta portabilidad permite a las organizaciones evitar el vendor lock-in (dependencia de proveedores) y mezclar proveedores de la nube en función de sus puntos fuertes, por ejemplo, utilizando AWS para computación y Google Cloud para machine learning.

Terraform también acelera los despliegues al aprovisionar recursos a través de múltiples proveedores simultáneamente. Analiza las dependencias entre recursos y crea dependencias independientes en paralelo. Por ejemplo, si se despliegan 10 servidores AWS y 5 bases de datos Azure sin dependencias, Terraform crea todos los recursos a la vez en lugar de secuencialmente, reduciendo el tiempo de despliegue.

AWS CloudFormation

AWS CloudFormation es la solución IaC nativa de Amazon para la infraestructura de AWS. Los equipos definen pilas de aplicaciones completas, desde instancias EC2 hasta bases de datos de Rational Directory Server, utilizando plantillas JSON o YAML. CloudFormation maneja las dependencias de recursos automáticamente, creándolas en el orden correcto y revirtiéndolas en caso de que se produzcan errores.

Aunque se limita a AWS, CloudFormation ofrece una integración profunda con los servicios de AWS y soporte inmediato para los nuevos. Las organizaciones comprometidas con AWS pueden preferir su rendimiento nativo y el acceso a características patentadas.

Azure Resource Manager 

Azure Resource Manager (ARM) es la herramienta IaC nativa de Microsoft para la infraestructura de Azure. Aunque se limita a Azure, ofrece una integración profunda con la plataforma.

Las organizaciones utilizan plantillas ARM (formato JSON) para definir, desplegar y gestionar los recursos de Azure. ARM proporciona características integradas que incluyen control de acceso basado en roles para la seguridad, etiquetado de recursos para la organización, bloqueos para evitar la eliminación accidental y asignación de dependencias para ayudar a garantizar que los recursos se desplieguen en el orden correcto. 

Google Cloud Deployment Manager

Google Cloud Deployment Manager es la herramienta nativa de IaC de Google que utiliza plantillas YAML o Python para orquestar los despliegues de Google Cloud. Aunque es específico de la plataforma, crea y configura recursos en múltiples servicios (Cloud Storage para datos, Compute Engine para máquinas virtuales, Cloud SQL para bases de datos), lo que ayuda a garantizar que funcionen juntos como una pila completa.

Herramientas de gestión de la configuración

Las herramientas de gestión de la configuración mantienen la infraestructura después del aprovisionamiento, lo que ayuda a garantizar que los sistemas se mantengan correctamente configurados, parcheados y coherentes. 

Ansible

Ansible® es una herramienta de automatización de Red Hat® que gestiona la configuración sin necesidad de agentes en los sistemas de destino. En otras palabras, Ansible no necesita software especial instalado en los servidores que administra. Se conecta directamente mediante SSH para ejecutar comandos.

Este enfoque sin agente significa que Ansible funciona en la nube, on premises y entornos híbridos. Los equipos escriben playbooks YAML que definen los estados deseados, y Ansible ayuda a garantizar que los sistemas coincidan con esos estados. Es popular para gestionar contenedores Docker y despliegues de Kubernetes.

Puppet

Puppet utiliza la configuración declarativa para gestionar grandes infraestructuras en entornos de nube, on premises y centro de datos.

Comprueba continuamente miles de servidores para ayudar a garantizar que coincidan con sus configuraciones definidas, corrigiendo automáticamente cualquier desviación. Puppet genera informes detallados que muestran qué cambió y cuándo, lo que lo hace efectivo para despliegues más grandes.

Chef 

Chef utiliza “libros de cocina” y “recetas” para definir configuraciones de infraestructura en cualquier entorno: nube, on premises o híbrido.

Las organizaciones recurren con frecuencia a Chef por su infraestructura de pruebas. Los equipos pueden verificar las configuraciones en entornos de prueba antes de pasar a producción. Este enfoque de descubrimiento temprano de problemas puede hacerlo popular en organizaciones que requieren actualizaciones frecuentes de infraestructura y valoran las infraestructuras sólidas. 

Soluciones relacionadas
IBM Turbonomic

Escale automáticamente su infraestructura de TI actual para obtener un mayor rendimiento a menores costos.

Explorar IBM Turbonomic
Soluciones AIOps

Descubra cómo la IA para las operaciones de TI ofrece los insights que necesita para ayudar a impulsar un rendimiento empresarial excepcional.

Explore las soluciones de AIOps
Servicios de consultoría en automatización

Vaya más allá de la simple automatización de tareas para manejar procesos de alto perfil, orientados al cliente que generan ingresos con adopción y escala integradas.

Explorar los servicios de consultoría para la automatización
Dé el siguiente paso

Descubra cómo la IA para las operaciones de TI ofrece los insights para impulsar un rendimiento empresarial excepcional.

Explore Turbonomic Explore las soluciones de AIOps