Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a esta recomendación de lista de comprobación de excelencia operativa del marco de trabajo bien diseñado de Azure:
| OE:05 | Prepare los recursos y sus configuraciones mediante un enfoque estandarizado de infraestructura como código (IaC). Al igual que otro código, diseñe IaC con estilos coherentes, modularización adecuada y control de calidad. Se prefiere un enfoque declarativo siempre que sea posible. |
|---|
En esta guía se describen las recomendaciones para usar IaC como estándar para las implementaciones de infraestructura. El uso de IaC permite integrar las implementaciones y la administración de la infraestructura en las prácticas de desarrollo de software existentes. Proporciona una metodología coherente y estándar para el desarrollo y la implementación de todos los componentes de la carga de trabajo. Confiar en implementaciones manuales pone la carga de trabajo en riesgo de configuraciones incoherentes y un diseño potencialmente inseguro.
Definiciones
| Término | Definición |
|---|---|
| Herramientas declarativas | Categoría de herramientas que definen el estado final de una implementación y dependen del sistema para determinar cómo implementar los recursos para que coincidan con el estado final definido. |
| Infraestructura inmutable | Una infraestructura que está pensada para reemplazarse por una nueva infraestructura que ejecuta la nueva configuración con cada implementación. No debe cambiarse en su lugar. |
| Herramientas imperativas | Categoría de herramientas que enumeran los pasos de ejecución que dan como resultado el estado final deseado. |
| Módulo | Unidad de abstracción para dividir grupos de recursos para simplificar las implementaciones complejas. |
| Infraestructura mutable | Una infraestructura que está pensada para cambiarse. Las implementaciones cambian la configuración de la infraestructura en lugar de reemplazarla por la nueva infraestructura. |
Como se describe en la cadena de suministro y las guías de estandarización de herramientas y procesos , debe tener una directiva estricta de implementación de cambios de infraestructura (incluidos los cambios de configuración) solo a través del código. Deberías implementar IaC a través de tus canalizaciones de integración continua y entrega continua (CI/CD). La adopción de estas directivas aplica coherencia en los procesos para todas las implementaciones de IaC, minimiza el riesgo de desfase de configuración en los entornos y garantiza la coherencia de la infraestructura en todos los entornos. Además, debe estandarizar las herramientas y procesos de desarrollo e implementación de IaC en una guía de estilo. Las recomendaciones para la guía de estilo incluyen:
Preferir herramientas declarativas sobre imperativas
Las herramientas declarativas y sus archivos asociados son una mejor opción general para implementar y administrar IaC que las herramientas imperativas. Las herramientas declarativas usan una sintaxis más sencilla para sus archivos de definición, definiendo solo el estado deseado del entorno una vez finalizada la implementación. Las herramientas imperativas dependen de definir los pasos necesarios para llegar al estado final deseado, por lo que los archivos pueden ser mucho más complejos que los archivos declarativos. Los archivos de definición declarativos también ayudan a reducir la deuda técnica de mantener código imperativo, como los scripts de implementación, que pueden acumularse con el tiempo.
Uso de herramientas nativas y estándar del sector
Use las herramientas nativas de la plataforma en la nube y otras herramientas probadas en el sector que se integren de forma nativa en la plataforma. La plataforma en la nube proporciona herramientas para facilitar y simplificar la implementación de IaC. Aproveche estas herramientas y otras herramientas de terceros que tienen integración nativa, como Terraform, en lugar de desarrollar sus propias soluciones. Las herramientas nativas son compatibles con la plataforma e incluyen funcionalidad integrada para la mayoría de sus necesidades. El proveedor de plataforma actualiza continuamente, lo que hace que sean más útiles a medida que evoluciona la plataforma.
Nota:
Tenga en cuenta que, a medida que los proveedores de nube y los desarrolladores de terceros actualizan sus herramientas y API, puede correr el riesgo de enfrentar problemas imprevistos al usar la versión más reciente en su carga de trabajo. Asegúrese de probar exhaustivamente las nuevas versiones de las herramientas y las API antes de adoptarlas. Del mismo modo, evite usar la marca "latest" al llamar a una herramienta o API en el código de implementación. Sea intencional en utilizar la versión más reciente conocida para su tarea.
Oportunidad de IA: El desarrollo y la validación de plantillas de IaC basadas en estándares, como Bicep y Terraform, suele llevar mucho tiempo y ser propenso a errores. La inteligencia artificial simplifica la creación y validación de plantillas, lo que acelera los esfuerzos de modernización. Revise todo el código generado por IA para garantizar el cumplimiento de los requisitos de precisión y conformidad.
La inteligencia artificial puede reducir los riesgos de implementación revisando las plantillas para las configuraciones incorrectas y validando el cumplimiento de las directivas de la organización. Puede simular, predecir y resumir riesgos con instrucciones de lenguaje natural.
Usar la herramienta adecuada para la tarea
Use las herramientas adecuadas para tareas específicas y tipos de infraestructura. Varias tareas, más allá de las implementaciones, están implicadas en un ciclo de vida de la infraestructura. Es necesario aplicar y mantener la configuración, por ejemplo, y la herramienta que se usa para crear scripts, como Bicep, podría no ser la mejor herramienta para cada operación de administración.
Del mismo modo, aplicar la configuración de estado deseado (DSC) para diferentes tipos de infraestructura puede requerir herramientas diferentes. Por ejemplo, hay herramientas específicas como Ansible para administrar DSC para vm, mientras que Flux es una buena herramienta para administrar DSC en clústeres de Kubernetes. Los servicios de plataforma como servicio (PaaS) pueden proporcionar diferentes herramientas para la gestión de configuraciones (como Azure App Configuration) que se pueden controlar a través de IaC. Los servicios de software como servicio (SaaS) pueden ser más limitados porque están más controlados por la plataforma.
Piense en todas las tareas y tipos de infraestructura que están en el ámbito de las prácticas de IaC y normalice las herramientas que realizan los trabajos que necesita que realicen y se puedan integrar en sus prácticas de desarrollo y administración.
Compatibilidad con varios entornos
Los scripts y las plantillas deben ser lo suficientemente flexibles como para implementar fácilmente una variedad de entornos. Usa parámetros, variables y archivos de configuración para implementar un conjunto de recursos estándar que se pueden modificar para desplegar cualquier entorno en el entorno de promoción de código. Parámetros abstractos como el tamaño del recurso, el recuento, el nombre, la ubicación de implementación y las opciones de configuración. Tenga cuidado de no abstraer demasiado, sin embargo. Hay configuraciones que se pueden abstraer con un parámetro o variable que podría no cambiar realmente durante el ciclo de vida de la carga de trabajo o que podrían cambiar rara vez. No deben abstraerse.
Nota:
Use los mismos recursos de IaC en varios entornos para mantener la coherencia tanto como sea posible. Por ejemplo, evite tener archivos de Terraform diferentes para entornos de producción y prueba. Todos los entornos deben usar un único archivo que se pueda manipular para implementar en entornos diferentes.
Oportunidad de IA: Mantén tu entorno coherente y evita problemas de configuración que afecten a la calidad o la estabilidad. La inteligencia artificial puede revisar el código de la aplicación en las solicitudes de incorporación de cambios para identificar las actualizaciones de IaC necesarias y recomendar los cambios tempranos. GitHub Copilot puede analizar el código, diseñar documentos y requisitos para sugerir actualizaciones o permitir a los desarrolladores solicitar cambios de infraestructura en lenguaje natural. Las soluciones avanzadas basadas en agentes pueden deducir necesidades de infraestructura del código y otras fuentes, y generar pull requests con IaC recomendado y cambios de configuración.
Usar el equilibrio adecuado al encapsular la funcionalidad
Estratifique y normalice el uso de módulos. Al igual que los parámetros y las variables, los módulos pueden hacer que las implementaciones de infraestructura se puedan repetir. Tenga cuidado, sin embargo, sobre cómo los usa. Una estrategia de abstracción estandarizada ayuda a garantizar que los módulos se compilan para cumplir objetivos específicos y acordados. Use módulos para encapsular configuraciones complejas o combinaciones de recursos. Evite los módulos si usa solo la configuración predeterminada del recurso. Además, sea prudente en el desarrollo de nuevos módulos. Use módulos de código abierto mantenidos cuando corresponda, en, por ejemplo, escenarios no sensibles.
Documentar pasos manuales
Documente los estándares para los pasos manuales. Puede haber pasos relacionados con la implementación y el mantenimiento de la infraestructura que son específicas de su entorno y que requieren intervención manual. Asegúrese de que estos pasos se minimicen tanto como sea posible y estén claramente documentados. En la guía de estilo y los procedimientos operativos estándar, normalice los pasos manuales para asegurarse de que las tareas se realizan de forma segura y coherente.
Documentar estándares para manejar recursos huérfanos. En función de las herramientas que use para la administración de configuración y sus limitaciones, puede haber ocasiones en las que la carga de trabajo ya no necesite un recurso determinado y las herramientas de IaC no puedan quitar automáticamente el recurso. Por ejemplo, supongamos que va a pasar de máquinas virtuales a un servicio PaaS para alguna función y las herramientas de IaC no tienen lógica para quitar los recursos retirados. Esos recursos pueden quedar huérfanos si el equipo de cargas de trabajo no recuerda eliminarlos manualmente. Para controlar estos escenarios, normalice una estrategia para buscar recursos huérfanos y eliminarlos. También debe tener en cuenta cómo asegurarse de que las plantillas están actualizadas. Investigue las limitaciones de las herramientas de IaC para entender qué necesitas planificar en estas situaciones.
Tenga en cuenta las siguientes recomendaciones que se aplican al usar IaC para sus cargas de trabajo.
Utilice un enfoque en capas para las canalizaciones de IaC
Use un enfoque en capas para alinear las canalizaciones de IaC dentro de la pila de cargas de trabajo. Separar las canalizaciones de IaC en capas ayuda a administrar entornos complejos. La implementación de docenas o cientos de recursos como un paquete monolítico es ineficaz y puede presentar varios problemas, como las dependencias rotas. El uso de varias canalizaciones que están alineadas con capas compuestas de recursos cuyos ciclos de vida de implementación o factores como la funcionalidad coinciden estrechamente hace que la administración de implementaciones de IaC sea más fácil.
La infraestructura principal, como los recursos de red, rara vez necesita cambios más complejos que las actualizaciones de configuración, por lo que esos recursos deben componer una canalización de IaC de bajo mantenimiento. Es posible que tenga una o más canalizaciones de IaC de nivel medio de interacción y de nivel alto de interacción según la complejidad de su carga de trabajo. Como ejemplo del uso de una pila de aplicaciones basada en Kubernetes, una capa de interacción media podría estar compuesta por clústeres, recursos de almacenamiento y servicios de bases de datos. Las capas táctiles altas se componerían de los contenedores de aplicaciones que se actualizan con mucha frecuencia en un modo de entrega continua.
Tratar IaC y un código de aplicación de la misma manera
Tratar los artefactos de IaC igual que los de código de la aplicación te ayuda a aplicar el mismo rigor en la gestión del código a través de todas las canalizaciones. Además, los procedimientos de desarrollo e implementación de IaC deben reflejar las prácticas de aplicación. Los estándares de control de versiones, bifurcación, promoción de código y calidad deben ser idénticos. Considere también la posibilidad de colocar los recursos de IaC junto con los recursos de código de la aplicación. Esto ayuda a garantizar que se siguen los mismos procesos con cada implementación y le ayuda a evitar problemas como la implementación involuntaria de la infraestructura antes del código de aplicación necesario, o viceversa.
Uso de estándares y recursos centralizados
Colabore con otros equipos de su organización para la estandarización y reutilización. A veces, las grandes organizaciones pueden tener varios equipos que desarrollan y soportan cargas de trabajo. La colaboración entre equipos para aceptar estándares le ayuda a reutilizar bibliotecas, plantillas y módulos para obtener eficacia y coherencia en los entornos de carga de trabajo. Del mismo modo, las herramientas de IaC deben estandarizarse en toda la organización en la medida en que hacerlo sea práctico.
Aplicar seguridad en el código IaC
Aplique el principio de "seguridad como código" para asegurarse de que la seguridad forma parte de la canalización de implementación. Incluya el examen de vulnerabilidades y la protección de la configuración como parte del proceso de desarrollo de IaC. Examine los repositorios de IaC para conocer las claves y los secretos que se exponen. Una ventaja de usar IaC es que los miembros del equipo centrados en la seguridad pueden revisar el código antes de la implementación para asegurarse de que la configuración aprobada para su lanzamiento por seguridad es realmente lo que se implementa en producción. Para obtener instrucciones detalladas, consulte Recomendaciones para proteger un ciclo de vida de desarrollo.
Probar actividades rutinarias y no rutinarias. Pruebe las implementaciones, las actualizaciones de configuración y los procesos de recuperación, incluidos los procesos de reversión de la implementación.
Oportunidad de IA: Para reforzar la postura de seguridad y acelerar los tiempos de respuesta, integre la inteligencia artificial en sus revisiones de seguridad y procesos de modelado de amenazas.
Mejore el proceso de seguridad existente con las herramientas y características de inteligencia artificial para resaltar los patrones de codificación que no son seguros y sugieren alternativas seguras. La inteligencia artificial generativa puede analizar plantillas de IaC y diagramas arquitectónicos y, a continuación, generar modelos de amenazas y mitigaciones para admitir el modelado continuo de amenazas. Actualice periódicamente los diagramas arquitectónicos y las plantillas de IaC.
Adopción de un modelo de implementación inmutable
La elección entre implementar una infraestructura mutable frente a inmutable depende de algunos factores. Si la carga de trabajo es fundamental para la empresa, es mejor usar la infraestructura inmutable. Del mismo modo, si tiene un diseño de infraestructura maduro basado en stamps de implementación, el uso de una infraestructura inmutable puede tener sentido, ya que puede implementar código de aplicación y nueva infraestructura de forma confiable. Por el contrario, el uso de la infraestructura mutable puede ser una mejor opción si las prácticas de implementación seguras dictan que continuar con las implementaciones cuando surgen problemas de implementación mitigables sea la opción preferida. En este caso, probablemente actualizaría la infraestructura existente.
Consideraciones
Mayor especialización: en algunos casos, la introducción de nuevos idiomas en el equipo de cargas de trabajo incluye una curva de aprendizaje y el bloqueo del proveedor puede hacer que sea una opción deficiente. Es necesario entrenar a los miembros del equipo y analizar la herramienta adecuada en función de la compatibilidad con herramientas de los proveedores de nube.
Mayor esfuerzo de mantenimiento: se requiere el mantenimiento de la base de código y las herramientas para mantener la implementación de IaC actualizada y segura. Realiza un seguimiento adecuado de tu deuda técnica y fomenta una cultura en la que se recompensa la reducción de la deuda.
Mayor tiempo para los cambios de configuración: la implementación de la infraestructura mediante instrucciones de línea de comandos o directamente desde un portal no requiere tiempo de codificación ni artefactos de prueba. Minimice el tiempo de implementación siguiendo los procedimientos recomendados, como las revisiones de código y las prácticas de control de calidad.
Mayor complejidad de la modularización: el uso de más módulos y parametrización aumenta el tiempo necesario para depurar y documentar el sistema y agrega una capa de abstracción. Equilibre el uso de la modularización para reducir la complejidad y evitar el exceso de ingeniería.
Facilitación de Azure
Las plantillas de Azure Resource Manager (plantillas de ARM) y Bicep son herramientas nativas de Azure para implementar la infraestructura mediante la sintaxis declarativa. Las plantillas de ARM se escriben en JSON, mientras que Bicep es un lenguaje específico del dominio. Ambos se pueden integrar fácilmente en las canalizaciones de CI/CD de Azure Pipelines o GitHub Actions.
Terraform es otra herramienta de IaC declarativa que es totalmente compatible con Azure. Se puede utilizar para desplegar y gestionar la infraestructura, y puede integrarse en la canalización de CI/CD.
Puede usar Microsoft Defender for Cloud para detectar configuraciones incorrectas en IaC.
Ejemplo
Consulte la arquitectura del acelerador de zonas de aterrizaje de Azure Virtual Desktop y la implementación de referencia asociada para ver un ejemplo de una implementación de Virtual Desktop que se puede implementar a través de los archivos de Resource Manager, Bicep o Terraform proporcionados.
Vínculos relacionados
- ¿Qué es la infraestructura como código (IaC)?
- Detección de errores de configuración en IaC
- Recomendaciones para diseñar una cadena de suministro para el desarrollo de la capacidad de trabajo
- Recomendaciones para estandarizar herramientas y procesos
- Recomendaciones para proteger un ciclo de vida de desarrollo
- Recomendaciones para usar prácticas de implementación seguras
- Patrón de estampillas de implementación
- Plantillas de Azure Resource Manager (plantillas de ARM)
- Bicep
- Azure Pipelines
- Acciones de GitHub
- Terraform
Lista de comprobación de excelencia operativa
Consulte el conjunto completo de recomendaciones.