La infraestructura como código (IaC) es un proceso que automatiza el aprovisionamiento y la gestión de los recursos de la nube. El software IaC toma algunos scripts de entrada que describen el estado deseado y luego se comunica con los proveedores de la nube, generalmente a través de API, para que la realidad coincida con el estado deseado.
Este artículo cubrirá los aspectos importantes de iAC, comenzando por cómo cobró vida (es decir, qué problemas resolvió), seguido de sus beneficios y, finalmente, cómo integrar IAC en su organización.
Érase una vez, cuando una empresa quería ejecutar software, su única opción era solicitar algunos equipos físicos y acceso a Internet a un proveedor de red. Se trataba de centros de datos in situ, donde las empresas tenían que solicitar servidores y equipos de red con semanas o incluso meses de antelación en función del tráfico previsto y luego aprovisionarlos manualmente en el sitio. Esto requirió una ubicación física con sistemas de refrigeración e incontables horas para realizar instalaciones y operaciones de mantenimiento.
Pero luego apareció el centro de datos público que podía gestionar los servidores de otras empresas.
Operar el centro de datos se convirtió en un negocio viable por sí solo, con grandes ventajas para los clientes:
La llegada de la virtualización trajo consigo otra evolución: la nube. En una nube pública (o privada), el equipo físico está ubicado en el centro de datos del proveedor de la nube, lo que aún requiere manejo manual. Los servidores virtuales se pusieron a disposición de las empresas a través de interfaces web, lo que les permite aprovisionar servidores y otros recursos en cuestión de segundos (o minutos para los recursos más grandes). En esta etapa, aunque la virtualización permitía un aprovisionamiento muy rápido, la mayoría de las operaciones seguían siendo manuales.
Un desarrollo final llegó con la llegada de los conceptos y herramientas de iAC. Una vez que se pudo acceder a la nube a través de una API, el aprovisionamiento y la gestión de recursos podrían manejarse mediante scripts y herramientas automatizadas en lugar de humanos. Así que ahora, una vez que el equipo físico está instalado y conectado (aún operaciones manuales), todo lo demás se puede automatizar, incluido el aprovisionamiento de todos los recursos de hardware virtual.
La capacidad de acceder mediante programación a la nube pública permitió el surgimiento de IaC. Antes de la llegada de iAC, los ingenieros de sistemas tenían que pasar manualmente a través de interfaces web para aprovisionar y configurar recursos. Con IaC, el aprovisionamiento y la configuración de los recursos se describen en scripts, que son leídos por herramientas que se comunican con la API de la nube pública para garantizar que la realidad coincida con el estado deseado.
Como se mencionó anteriormente, las herramientas de IaC utilizan entradas de scripts; Estos scripts están escritos por humanos y describen el estado deseado para los recursos de la nube determinados. Las herramientas se comunican con el proveedor de la nube a través de sus API para crear, actualizar o eliminar recursos de modo que la realidad coincida con el estado deseado descrito en los scripts de entrada. En comparación con el aprovisionamiento y la configuración manuales, IaC ofrece una única fuente de verdad (los scripts de entrada), eliminando así la mayoría de los errores humanos.
Ejecutar un script IaC es una operación repetible, que producirá exactamente el mismo resultado cada vez. Esto puede ayudar de muchas maneras, por ejemplo para:
Los scripts de IaC se pueden guardar en un repositorio git, lo que le brinda un historial de su infraestructura. Como una ventaja adicional, dado que los scripts son solo texto, es posible comparar versiones para ver qué se ha agregado, cambiado o eliminado.
Otro beneficio es que iAC permite que un administrador de sistemas junior o una persona no técnica cree una carga de trabajo completa sin conocimientos técnicos. Si configura su cuenta en la nube correctamente, puede incluso permitir que un usuario con permisos limitados cree dicha carga de trabajo a través de herramientas de IaC, incluso si el usuario no tiene los derechos para crear los recursos directamente. También puede aprovechar herramientas y plantillas adicionales para garantizar que las políticas de seguridad se implementen antes para limitar la posibilidad de fugas de seguridad y configuraciones erróneas por parte de quien crea una instancia de la pila IAC.
Además de la repetibilidad exacta, una de las mejores ventajas de iAC sobre las operaciones manuales es que es escalable. De hecho, solo necesita escribir los scripts de IaC una vez, y las cargas de trabajo se pueden crear instancias tantas veces como desee, casi instantáneamente. Finalmente, al dedicar más tiempo a crear los permisos correctos en sus scripts de IaC, se puede evitar la desventaja típica del trabajo manual que otorga demasiados permisos a roles y recursos.
Por lo general, le gustaría automatizar algunas operaciones que actualmente está realizando manualmente. Así que el primer paso es documentar los pasos manuales necesarios para construir la infraestructura necesaria para su carga de trabajo. Estos son los pasos que automatizará a través de IAC.
Entonces tiene que elegir un software de iAC. Esta no debería ser una elección difícil, ya que solo hay unos pocos y los tres principales proveedores de nube tienen los suyos propios: Amazon Web Services ofrece CloudFormation, Microsoft Azure ofrece Azure Resource Manager y Google Cloud Platform ofrece Google Cloud Implementation Manager. La opción más conocida que es independiente del proveedor es Terraform, que no sólo admite los tres proveedores de nube mencionados anteriormente sino muchos más.
A continuación, tendrá que escribir algunos scripts para su herramienta IaC de elección para reproducir los pasos manuales que documentó. Por lo general, es una buena idea probarlos a medida que va. En otras palabras: escriba un poco de código IAC, implemente, pruébelo y, cuando esté satisfecho, se vea bien, pase al siguiente código. Si escribe todo de una vez, pueden surgir fallas importantes en su código que solo descubrirá después de muchas horas de trabajo, lo que significa que podría tener que reescribir una parte significativa de sus guiones.
Además, el tema de Shift Left sigue siendo tendencia. Esto esencialmente significa que comienza las pruebas lo antes posible y se enfoca en prevenir problemas (en lugar de detectarlos y resolverlos después de que ocurran). La idea es que la calidad general y la seguridad mejorarán como resultado.
Idealmente, este Shift Left debería aprovechar la automatización tanto como sea posible. De hecho, existen varias herramientas disponibles para automatizar ciertos aspectos de la escritura de scripts de IaC, como la seguridad y el cumplimiento. Estas herramientas escanearían el código antes de cualquier implementación para reducir la incidencia de problemas como configuraciones incorrectas, configuraciones demasiado permisivas y vulnerabilidades conocidas. Algunos casos de uso con respecto a esto están disponibles aquí para su consulta.
Para utilizar IaC correctamente, la persona que escribe los scripts de IaC debe tener un conocimiento profundo de la plataforma en la nube que se utiliza. Por lo tanto, es recomendable asegurarse de que las partes más críticas de su trabajo de IaC las realicen ingenieros senior de DevOps.
Generalmente es una buena idea tener un equipo de ingenieros senior de DevOps (o al menos uno) a cargo de liderar su esfuerzo de IaC. Este equipo podrá centrarse en las mejores prácticas y la seguridad y, por lo tanto, proporcionará un plan para que lo sigan más ingenieros junior. También podrá escribir módulos genéricos que se pueden reutilizar a través de scripts de iAC dentro de su organización, proporcionando bloques de construcción previamente revisados disponibles para ingenieros más jóvenes.
Si la seguridad es importante y lo más probable es que este equipo también pueda ser responsable de la investigación de los módulos y software disponibles públicamente. Es bastante fácil encontrar algunos módulos IAC en línea; Terraform incluso tiene un repositorio oficial de estos. Sin embargo, es posible que dichos módulos disponibles públicamente no se ajusten a los estándares de seguridad aplicados dentro de su organización o proyecto. Por lo tanto, es importante asegurarse de que solo los módulos revisados sean utilizados por su equipo de iAC.
Además, sería una buena idea que su equipo de SecOps trabajara junto con su equipo de DevOps. Esta cooperación permitirá optimizar los procesos DevOps en términos de seguridad en las primeras etapas del proyecto. Los errores detectados después de una implementación de producción pueden resultar muy costosos, especialmente en términos de relaciones con los clientes. Asegurar una alta calidad al principio del proceso será de gran manera para evitar cualquier desastre de este tipo.
Aunque es un desarrollo bastante reciente, IaC debería ser hoy en día parte integrante de la estrategia de aprovisionamiento de cualquier organización que requiera recursos en la nube y, como mínimo, debería evaluarse para su inclusión en sus equipos. Sea cual sea el tamaño de su organización, lo más probable es que quiera que IAC administre al menos parte de sus cargas de trabajo.