Estrategias de arquitectura para diseñar una cadena de suministro para el desarrollo de procesos de trabajo

Se aplica a esta recomendación de lista de comprobación de excelencia operativa del marco de trabajo bien diseñado de Azure:

OE:06 Compile y optimice la cadena de suministro de la carga de trabajo mediante canalizaciones predecibles y automatizadas que prueben y promuevan cambios entre entornos. Diseñe estas canalizaciones para satisfacer de forma coherente los objetivos de confiabilidad, seguridad, rentabilidad y rendimiento.

Para proporcionar una manera predecible y estandarizada de mantener la carga de trabajo, diseñe la cadena de suministro de desarrollo de cargas de trabajo en torno a la integración continua y la entrega continua (CI/CD). Mantenga una sola cadena de suministro estandarizada e implementela mediante canalizaciones automatizadas de CI/CD. Puede usar varias canalizaciones siempre que todas se adhieren a la misma cadena de suministro.

Use una cadena de suministro estandarizada para proteger la carga de trabajo frente a los riesgos de cambios no administrados. Mantenga la visibilidad continua en el estado de la carga de trabajo para evitar un comportamiento impredecible y un costoso seguimiento de los cambios no realizados cuando se produzcan problemas. Para minimizar estos riesgos, normalice los procesos y las herramientas que definen la cadena de suministro y asegúrese de que el equipo de cargas de trabajo se compromete completamente a su uso.

Definición

Término Definición
Cadena de suministro En las cargas de trabajo en la nube, una cadena de suministro es un conjunto estandarizado de herramientas y procesos que se usan para implementar el cambio de infraestructura y aplicación en todos los entornos.

Nota:

Las recomendaciones de esta guía hacen referencia a entornos de carga de trabajo en una cadena de promoción de código. Los entornos de espacio aislado u otros entornos exploratorios y de prueba de concepto (POC) requieren menos rigor y estructura.

Las siguientes recomendaciones pueden ayudarle a definir los principios principales de la cadena de suministro.

Aplicación de una directiva estricta de implementaciones automatizadas basadas en plantillas

Realice todos los cambios de carga de trabajo propuestos a través de los procesos y herramientas de la cadena de suministro y aplique implementaciones automatizadas basadas en plantillas. Este enfoque mantiene las configuraciones estandarizadas, bien definidas y estrechamente controladas entre entornos. En el caso de los entornos de una cadena de promoción de código, prohíbe las actualizaciones manuales o la interacción directa con el plano de control en la nube, como el portal o las API. Aplique todos los cambios en el entorno a través de canalizaciones que sigan las prácticas de implementación definidas. Para aplicar esta directiva, limite el acceso a solo lectura y use puertas de autorización para conceder acceso de escritura cuando sea necesario.

Un aspecto importante de este principio es que todos los cambioscambios se proponen hasta que se implementan en producción. Mediante pruebas automatizadas, como la integración y las pruebas de humo, permite que la cadena de suministro rechace automáticamente los cambios.

Oportunidad de IA: El diagnóstico manual de errores de implementación ralentiza los equipos, provoca frustración y crea silos de conocimiento. Mejore la productividad y la resistencia evaluando primero las herramientas de DevOps que proporcionan análisis de errores asistidos por IA. Para ampliar estas funcionalidades, estratifique un agente personalizado en la cadena de herramientas existente para identificar y resolver problemas comunes. Para escenarios avanzados, considere la posibilidad de una solución agente que supervise la telemetría de canalización y los datos históricos de incidentes para detectar patrones de error recurrentes y recomendar correcciones proactivas.

Implementación de una infraestructura repetible e inmutable como código

Implemente una infraestructura repetible e inmutable mediante la infraestructura como código (IaC). Administre la infraestructura como definiciones declarativas controladas por versiones que reflejen el código fuente de la aplicación. La aplicación del mismo IaC crea de forma coherente el mismo entorno cada vez, de forma similar a la forma en que el mismo código fuente crea el mismo binario al compilarlo.

Para estandarizar y automatizar la implementación y configuración de la infraestructura, adopte IaC. Reemplace las implementaciones dependientes de la persona por canalizaciones totalmente automatizadas. Este enfoque cambia la responsabilidad de las personas a las herramientas y reduce el esfuerzo manual. Permitir que los miembros del equipo autorizados inicien implementaciones a través de este proceso automatizado para mantener la coherencia y la calidad en todos los entornos.

Diseñe la carga de trabajo como un grupo lógico de componentes que puede agrupar en una plantilla para que las implementaciones sean sencillas y repetibles. Puede considerar estos paquetes como sellos o unidades de escala. Para obtener más información, consulte el patrón de Sello de Despliegue. Cuando necesite implementar la carga de trabajo para escalar horizontalmente a otra región o zona dentro de la misma región, implemente una marca mediante una canalización. En función de cómo diseñe los stamps, puede implementar un subconjunto de la carga de trabajo en lugar de toda la carga de trabajo. Para que las etiquetas de implementación se conecten de manera automática a los recursos existentes, incluya los componentes de red en las canalizaciones de IaC.

Para optimizar la canalización de IaC para lograr coherencia y eficacia, diseñe una infraestructura inmutable en lugar de una infraestructura mutable. Implementar una infraestructura inmutable para asegurarse de que todos los sistemas dentro del alcance se reemplazan por la configuración actualizada de manera simultánea e idéntica con cada implementación.

Oportunidad de IA: Optimice la administración de canalizaciones y reduzca el esfuerzo manual mediante la optimización de la implementación con tecnología de inteligencia artificial. GitHub Copilot puede acelerar la generación de código en las canalizaciones de CI/CD. La integración con IA puede validar y aplicar los estándares de la organización, recomendar estrategias de reversión y detectar la desviación comparando los estados de infraestructura actuales y previstos. Mejore la supervisión con modelos de inteligencia artificial que anticipan problemas y los exponen pronto para la intervención.

Mantenga inventarios de recursos precisos y supervisados continuamente en todos los entornos e incluya pasos de aprobación y seguimientos de auditoría para realizar un seguimiento de las acciones de inteligencia artificial.

Uso del mismo conjunto de artefactos de implementación en todos los entornos

Use el mismo conjunto de recursos de código y artefactos en todos los entornos y canalizaciones. Un desafío común para las organizaciones es cuando los entornos que no son de producción difieren de los entornos de producción. La creación manual de entornos de producción y no producción puede dar lugar a configuraciones no coincidentes entre los entornos. Esta falta de coincidencia ralentiza las pruebas y aumenta la probabilidad de que los cambios puedan dañar un sistema de producción. Un enfoque de IaC reduce estos problemas. Al usar la automatización de IaC, puede usar los mismos archivos de configuración de infraestructura para todos los entornos para generar entornos casi idénticos. Puede agregar parámetros a los archivos de configuración de infraestructura y ajustarlos para cumplir los requisitos de cada entorno.

Para controlar los costos, normalmente hay una varianza entre entornos de producción y no producción. Normalmente no necesita el mismo nivel de redundancia o rendimiento en la no producción, por lo que los recuentos de recursos y las SKU pueden diferir. Asegúrese de controlar y comprender la varianza mediante el uso de parámetros estandarizados para ayudarle a mantener la predictibilidad a medida que realice cambios.

Reflejar la estructura organizativa en la cadena de suministro

Refleje la estructura organizativa en los diseños de canalización y cadena de suministro. Es posible que su organización esté siloada entre los equipos. Puede organizar los equipos por función (como redes, datos y proceso) o integrarlos como equipos de DevOps que administran la infraestructura y las aplicaciones. Hay muchas maneras de organizar los equipos implicados en una cadena de suministro. Independientemente de la estructura, la cadena de suministro se basa en la colaboración en todos los equipos. Asegúrese de que todos los equipos sigan los procesos estándar y usen herramientas estándar para que la cadena de suministro sea lo más eficaz posible.

La cadena de suministro puede depender de proveedores externos si externaliza partes del ciclo de vida de la carga de trabajo. Estos proveedores son tan importantes para el éxito de su cadena de suministro como los recursos internos. Asegúrese de que haya un acuerdo mutuo en todos los equipos sobre los procesos y las herramientas que use.

Elección del método de implementación adecuado

Normalice el método de implementación. Hable con el dueño del producto sobre la interrupción de producción aceptable para su carga de trabajo. Dependiendo de cuánto tiempo de inactividad sea aceptable, puede elegir el método de implementación que se ajuste a sus requisitos. Lo ideal es realizar implementaciones durante una ventana de mantenimiento para reducir la complejidad y el riesgo. Si no se admite ningún tiempo de inactividad, use un método de implementación azul-verde.

Use un enfoque de exposición progresiva, como las implementaciones controladas, para reducir el riesgo de introducir errores no detectados a los clientes. Implemente cambios en grupos pequeños y controlados en fases para que pueda detectar problemas antes de una versión amplia. El grupo de lanzamiento inicial podría ser una subsección de los clientes que conocen la estrategia de lanzamiento. Esta subsección de los clientes puede tolerar cierta cantidad de comportamiento inesperado y proporcionar comentarios. O puede ser un grupo de usuarios internos, lo que ayuda a limitar el impacto de los errores durante la implementación.

Al definir el método de implementación, adopte una directiva estándar para liberar el cambio viable más pequeño en cada implementación. Determine qué califica como el cambio viable más pequeño en función de la importancia crítica de la carga de trabajo y la complejidad de sus componentes. Si usa una infraestructura inmutable, el cambio viable más pequeño es volver a implementar recursos con la configuración más reciente para reemplazar los recursos que ejecutan la versión anterior. Si usa una infraestructura mutable, puede decidir que el cambio viable más pequeño es solo una actualización delimitada dentro del grupo de recursos.

Oportunidad de IA: El análisis controlado por ia identifica los patrones de uso y recomienda tiempos de implementación óptimos, lo que elimina la inspección repetitiva de registros manuales. Evite calcular a ojo los periodos de menor uso, realizar despliegues durante periodos de mucho tráfico o provocar interrupciones a los usuarios. Comience con un enfoque de IA generativa (GenAI) de implementación sencilla que conecta los modelos directamente con la telemetría de sus cargas de trabajo. Este enfoque permite la detección interactiva de patrones y la generación de información. Para cargas de trabajo de gran escala y de transacciones elevadas, escale a modelos predictivos basados en aprendizaje automático que prevén ventanas de implementación óptimas a medida que evolucionan las tendencias de uso.

Seguir un enfoque en capas

Siga un enfoque en capas para reflejar diferentes ciclos de vida. Se espera que las capas de carga de trabajo cambien a lo largo del ciclo de vida, pero debe mantener estáticas y coherentes las operaciones del ciclo de vida. Use canalizaciones de implementación independientes para cada capa para que pueda aplicar los cambios de forma independiente y apropiada.

Una zona de aterrizaje se encuentra en la capa más baja de la arquitectura. Se trata de una agrupación lógica de elementos fundamentales, como suscripciones, grupos de administración, grupos de recursos, controles de gobernanza y topología de red, que puede usar para implementar y operar cargas de trabajo de forma coherente. Proporciona a los equipos de plataforma o operaciones centrales una configuración de entorno repetible. Para garantizar la coherencia, las zonas de aterrizaje de Azure incluyen áreas de diseño comunes, una arquitectura de referencia, una implementación de referencia y un proceso para adaptar las implementaciones a los requisitos de diseño. Los principios de diseño recomiendan prácticas basadas en la gobernanza controlada por directivas junto con la democratización de la suscripción. Una zona de aterrizaje debe requerir cambios mínimos durante el ciclo de vida de la carga de trabajo. Para ver un ejemplo de una zona de aterrizaje con procedimientos recomendados para Azure, consulte Azure zona de aterrizaje.

Mantenga estable la infraestructura principal, incluidos los controladores de red de entrada y salida, los equilibradores de carga, las soluciones de enrutamiento de red, el sistema de nombres de dominio (DNS) y los servidores principales, realizando cambios importantes solo cuando sea necesario. Espere y planee actualizaciones de configuración más frecuentes para estos componentes.

Las capas de datos y aplicaciones suelen requerir actualizaciones frecuentes de configuración y cambios en la infraestructura. Use las canalizaciones de implementación más dinámicas para estos componentes.

Incorporación de tipos completos de pruebas

Planee una estrategia holística de pruebas. Una tenet principal de confiabilidad del sistema es el principio de desplazamiento a la izquierda. El proceso de desarrollo de software tiene pasos que se mueven de izquierda a derecha. No espere hasta el final para hacer pruebas. Mueva las pruebas lo antes posible para que detecte problemas cuando cuesta menos corregirlos. Los defectos que detectas al final del ciclo de vida pueden ser costosos o incluso imposibles de corregir.

Pruebe todo el código, incluido el código de aplicación, las plantillas de infraestructura y los scripts de configuración. Control de versiones del entorno que ejecuta aplicaciones e impleméntelo a través de los mismos mecanismos que se usan para el código de aplicación. Use los mismos enfoques de prueba que los equipos usan para el código de aplicación para validar el entorno.

Use pruebas automatizadas siempre que sea posible para garantizar la coherencia. Incluya los siguientes tipos de pruebas en el diseño de la cadena de suministro.

  • Pruebas unitarias: Ejecute pruebas unitarias como parte de una rutina de integración continua. Las pruebas unitarias deben ser amplias y rápidas. Lo ideal es que cubran 100% del código y se ejecuten en menos de 30 segundos.

    Implemente pruebas unitarias para comprobar que la sintaxis y la funcionalidad de los módulos individuales del código funcionan de la manera en que deben, como producir una salida definida para una entrada conocida. También puede usar pruebas unitarias para comprobar que los recursos de IaC son válidos.

    Aplique pruebas unitarias a todos los recursos de código, incluidas las plantillas y los scripts.

  • Pruebas de humo: Las pruebas de humo comprueban que una carga de trabajo se puede configurar en un entorno de prueba y funciona según lo previsto. Las pruebas de humo no comprueban la interoperabilidad de los componentes.

    Las pruebas de humo comprueban que la metodología de implementación de la infraestructura y la aplicación funcionan, y que el sistema responde según lo previsto después de que finalice el proceso.

  • Pruebas de integración: Las pruebas de integración garantizan que los componentes de la aplicación funcionan individualmente y determinan si los componentes pueden interactuar entre sí según lo previsto.

    Puede tardar mucho tiempo en ejecutar un conjunto de pruebas de integración grande. Por esta razón, lo mejor es incorporar el principio de shift-left y realizar pruebas desde las primeras fases del ciclo de vida del desarrollo de software (SDLC). Reserva pruebas de integración para escenarios que no se pueden probar mediante una prueba de humo o una prueba unitaria.

    Puede ejecutar procesos de prueba de larga duración en un intervalo normal si es necesario. Un intervalo regular proporciona un buen equilibrio y detecta problemas de interoperabilidad entre los componentes de la aplicación como muy tarde un día después de que se introduzcan.

    Algunos escenarios de prueba se benefician de las ejecuciones manuales. Use pruebas manuales cuando necesite introducir elementos de interactividad humana en pruebas.

  • Pruebas de aceptación: En función del contexto, puede realizar manualmente pruebas de aceptación. Puede ser parcialmente o totalmente automatizado. Las pruebas de aceptación determinan si el sistema de software cumple las especificaciones de requisitos.

    El objetivo principal de esta prueba es evaluar el cumplimiento del sistema con los requisitos empresariales y determinar si el sistema cumple los criterios necesarios para la entrega a los usuarios finales.

Oportunidad de IA: Mejore la estrategia de pruebas para buscar casos perimetrales centrados en el cliente y escenarios difíciles de detectar y pasar por alto a menudo. Empiece por usar los análisis y los informes existentes para identificar brechas de cobertura y, a continuación, use herramientas como Copilot para generar nuevos casos de prueba y scripts. Optimice el conjunto de pruebas mediante la eliminación de pruebas redundantes para mejorar la velocidad y la eficacia. Considere una solución de inteligencia artificial agente que analice el uso de producción, los datos de supervisión y los defectos históricos para buscar patrones y crear automáticamente pruebas en el código base que coincidan con los estándares de la organización.

Implementar puertas de calidad en los procesos de promoción de código

Implemente puertas de calidad en todo el proceso de promoción de código mediante pruebas. Promueva el código a través de entornos inferiores, como desarrollo y pruebas, antes de avanzar a entornos superiores, como ensayo y producción. Defina las puertas y objetivos de calidad claros para cada fase y solo promueva los cambios en la producción después de cumplir esos criterios. Sus requisitos empresariales determinan el foco de sus puertas de calidad. Tenga en cuenta también los principios fundamentales de Well-Architected Framework: Confiabilidad, Seguridad y Eficiencia del rendimiento.

Integre los flujos de trabajo de aprobación en las puertas de calidad. Defina y automatice claramente los flujos de trabajo de aprobación cuando corresponda. Defina los criterios de aceptación de calidad en su automatización para que pueda moverse a través de sus puertas de forma eficaz y segura.

Oportunidad de la IA: Eliminar los cuellos de botella en las revisiones redirigiendo automáticamente las PR a los expertos adecuados. Comience con Copilot para evaluar el ámbito y el impacto. A continuación, agregue una integración de CI/CD agentic para evaluar los cambios de código, las configuraciones y los patrones de aprobación. Conceda acceso con privilegios mínimos solo a los artefactos necesarios, como repositorios, canalizaciones, datos de configuración, historial de incidentes y registros de aprobación. Con este acceso, puede evaluar el impacto, asignar revisores, identificar cuellos de botella y recomendar la aprobación automática o revisión adicional. Para cargas de trabajo de alto valor, entrene con datos históricos para predecir el riesgo en la implementación y los resultados de aprobación. Asegúrese de que los humanos participen en el proceso y tenga precaución con la aprobación automática.

Facilitación de Azure

Azure DevOps es una colección de servicios que le ayudan a crear una práctica de desarrollo colaborativa, eficaz y coherente.

Azure Pipelines proporciona servicios de compilación y versión para admitir CI/CD en las aplicaciones.

Acciones de GitHub para Azure se integra con Azure para simplificar las implementaciones. Use Acciones de GitHub para automatizar los procesos de CI/CD. Puede crear flujos de trabajo que compilen y prueben cada solicitud de incorporación de cambios en el repositorio o implementar solicitudes de incorporación de cambios combinadas en producción.

Puede usar Terraform, Bicep y Azure Resource Manager para implementaciones de IaC. Según los requisitos y la familiaridad de su equipo con las herramientas, puede usar una o varias de estas herramientas para las implementaciones y la administración de los recursos.

Ejemplo

Para ver un ejemplo que muestra cómo usar Azure Pipelines para compilar una canalización de CI/CD, consulte Arquitectura de línea de base de Azure Pipelines.

Lista de comprobación de excelencia de la operación

Consulte el conjunto completo de recomendaciones.