Prácticas recomendadas para crear arquitecturas desplegables

Una arquitectura desplegable es una unidad modular autocontenida de automatización de nube que combina uno o varios recursos de nube para proporcionar un patrón de arquitectura común. Permite un despliegue simplificado, escalabilidad y modularidad, lo que permite a los usuarios suministrar y gestionar fácilmente recursos de infraestructura.

Esta guía describe las prácticas recomendadas para crear arquitecturas desplegables bien diseñadas y mantenibles escritas en Terraform. Centrarse en atributos clave como el alcance, la composición, la consumibilidad y las comprobaciones de calidad ayudan a garantizar soluciones sólidas y fiables. La sección final de esta guía proporciona referencias a herramientas y plantillas que ayudan a implementar estas prácticas.

Estas prácticas recomendadas se aplican a la creación de arquitecturas desplegables con Terraform. Para obtener más información, consulte Creación de una arquitectura desplegable.

Ver y aprender

¿Prefiere verlo en acción? Vea el siguiente vídeo para obtener más información sobre las arquitecturas desplegables.

Transcripción del vídeo

Una arquitectura desplegable es un patrón de arquitectura con automatización para desplegar infraestructura y software en la nube. Permite a las organizaciones impulsar la coherencia en la forma de implantar y configurar la infraestructura y el software. Impone una arquitectura y una seguridad opinables que reducen el soporte global y aumentan la fiabilidad a largo plazo.

Este patrón cobra vida con la automatización que instancie la arquitectura desplegable. IBM Cloud automation is driven with Terraform for Infrastructure-as-a-service automation, and Ansible for software configuration.

Comprender los costes es crucial: puede calcularlos antes de implantarlos y hacer un seguimiento de los cambios en el gasto a medida que actualiza o personaliza la arquitectura. Y recuerde: nunca se le cobrará nada hasta que se despliegue.

Las políticas de seguridad y organización son fundamentales para las implantaciones empresariales. Por eso, las arquitecturas desplegables se examinan y analizan previamente para que cumplan una serie de requisitos normativos, lo que puede ayudar a su organización a mantenerse segura. Las implantaciones normalizadas también simplifican la recopilación de pruebas para las auditorías.

Las arquitecturas desplegables proporcionan información sobre cómo obtener asistencia, así como los permisos necesarios para desplegar la arquitectura.

Por último, puede compartir arquitecturas desplegables de un catálogo privado con otras cuentas de su organización. Además, el catálogo puede restringir a los usuarios a versiones específicas de una arquitectura desplegable. Esto garantiza la coherencia y la normalización para todos.

Los patrones de arquitectura son creados por expertos en dominios específicos. Las arquitecturas multidominio se construyen enlazando arquitecturas para crear una arquitectura desplegable más compleja.

Puede crear sus propias arquitecturas desplegables o ahorrar tiempo personalizando las arquitecturas ya creadas de IBM Cloud a partir del catálogo IBM Cloud o del registro comunitario.

una arquitectura desplegable se define mediante un manifiesto como código, que describe la arquitectura, la ubicación del código, los permisos y los costes, el soporte, la descripción, el icono y otros detalles. Se define con JSON y se encuentra en la raíz del repositorio.

Puede introducir o modificar una arquitectura desplegable en la consola y exportar el manifiesto. Puede crear una arquitectura desplegable por primera vez a partir de una instantánea git de lanzamiento. Utilice la url.tgz de la versión como fuente.

A continuación, edite los detalles de la entrada del catálogo para su arquitectura desplegable, como el icono y el nombre. Puedes añadir dependencias y cualquier arquitectura opcional que funcione bien con la tuya, pero que no sea necesaria.

También puede gestionar las solicitudes de conformidad de la arquitectura desplegable. Estas afirmaciones se verifican al validar la arquitectura desplegable en el catálogo antes de publicarla.

Por último, después de incorporar una versión de su arquitectura desplegable, puede exportar el archivo de manifiesto del catálogo y guardarlo en su repositorio de origen. El uso de la consola suele ser el mejor enfoque para la incorporación de una arquitectura desplegable net-new, ya que puede exportar fácilmente el manifiesto del catálogo y editarlo más tarde si lo necesita. De este modo, no es necesario crear el archivo de manifiesto del catálogo desde cero.

En el catálogo IBM Cloud, abra la pestaña Arquitecturas desplegables para buscar las arquitecturas compatibles con IBM.

Las arquitecturas desplegables de nuestro registro comunitario pueden cambiar con frecuencia o interrumpirse con poca antelación, pero siguen siendo un buen punto de partida para que las utilices y personalices.

Consideremos la arquitectura desplegable VPC landing zone, disponible en el catálogo IBM Cloud. Se trata de una arquitectura desplegable generalmente útil, ya que se necesita una VPC si se pretende ejecutar una carga de trabajo en la nube.

VPC landing zone está diseñado para cumplir el perfil IBM Cloud Framework for Financial Services. Separa las cargas de trabajo de gestión de las cargas de trabajo de los trabajadores, utiliza la gestión de claves para cifrar el almacenamiento de objetos en la nube y utiliza puntos finales privados para las comunicaciones. Puede utilizarlo tal cual o personalizarlo para adaptarlo a las necesidades de su zona de aterrizaje.

Para una arquitectura desplegable más compleja, considere Cloud foundation para la seguridad y la observabilidad. Esa arquitectura desplegable se hizo uniendo varias arquitecturas del catálogo IBM Cloud. Con él, podrá aprovechar toda la gama de servicios de seguridad de IBM Cloud. Es personalizable, así que puedes elegir incluir sólo los servicios que necesitas y dejar fuera los que no.

Ahora que sabe dónde encontrar arquitecturas desplegables, ¿cómo desplegarlas y mantenerlas en todas las cuentas? Utiliza un proyecto de IBM Cloud.

En el proyecto se configuran las variables de entrada para la arquitectura desplegable. Puede supervisar los costes, la deriva de sus recursos, los análisis de conformidad y actualizar a la última versión de una arquitectura desplegable cuando esté disponible en el catálogo. Por lo general, un proyecto se ubica en una cuenta central y despliega recursos en varias cuentas satélite, también conocidas como cuentas de destino.

Consulte nuestra documentación para obtener más información sobre la ejecución de cargas de trabajo seguras en IBM Cloud. O sumérjase en el catálogo IBM Cloud Arquitecturas desplegables para descubrir qué arquitecturas desplegables podrían funcionar para su negocio.

Principios de diseño

El ámbito, la capacidad de composición y la capacidad de consumo son los tres principios de diseño principales que debe tener en cuenta al crear una arquitectura desplegable.

En la fase de planificación e investigación, debe evaluar el ecosistema actual de ofertas y evaluar el caso de uso y los requisitos de negocio. Utilice la Infraestructura bien arquitectónica y la Infraestructura de diseño de arquitectura para planificar y diseñar los componentes necesarios para la arquitectura.

Ámbito

Un ámbito bien definido para la arquitectura desplegable es crucial, ya que debería ser lo suficientemente completo como para incluir todos los recursos necesarios, pero lo suficientemente centrado como para evitar una complejidad innecesaria.

Una buena práctica consiste en incluir recursos de infraestructura que suelen implementarse juntos como una unidad, requieren acceso y permisos similares y tienen el mismo ciclo de vida. Por ejemplo, consideremos Arquitectura desplegable de VPC landing zone. Esta arquitectura desplegable tiene un ámbito bien definido que incluye los siguientes recursos de infraestructura:

Recursos en la zona VPC landingn DA
Recurso Descripción
VPC Crea una topología de VPC segura
Infraestructura de red Incluye subredes, pasarelas públicas, ACL, pasarelas de tránsito y grupos de seguridad
Red periférica Aísla el tráfico a la Internet pública
Supervisión y registro Integra registros de flujo para la observabilidad y auditoría del tráfico de VPC

Estos recursos suelen implementarse juntos como una unidad, requieren permisos administrativos de red similares y tienen el mismo ciclo de vida, lo que significa que:

  • Se crean juntos, como cuando se suministra una nueva VPC con sus subredes asociadas, pasarelas públicas y grupos de seguridad.
  • Se actualizan juntos, como cuando se realiza un cambio en la configuración de red de la VPC, que requiere actualizaciones en las subredes, pasarelas públicas y grupos de seguridad.
  • Se suprimen juntos, por ejemplo, cuando una VPC está fuera de servicio y se eliminan todos sus recursos asociados, incluidas las subredes, las pasarelas públicas y los grupos de seguridad.

Capacidad de composición

Un principio fundamental de una arquitectura desplegable es la componibilidad, que permite crear una arquitectura desplegable más amplia apilando varias arquitecturas desplegables. Este enfoque modular permite la máxima flexibilidad y reutilización de los recursos de automatización.

Para lograr la capacidad de composición, una arquitectura desplegable debe estar diseñada para:

  • Maximice la cantidad de información que ha aparecido a través de los valores de salida, pero mantenga los tipos de salida simples. Esta práctica permite que la automatización de la arquitectura desplegable se reutilice en una amplia gama de escenarios, y la convierte en un bloque de construcción versátil para diversas soluciones automatizadas.

  • Permitir referencias opcionales a recursos desplegados existentes, como por ejemplo grupos de recursos, instancias de IBM® Key Protect for IBM Cloud® o Hyper Protect Crypto Services e instancias de IBM Cloud Secrets Manager, entre otras. A continuación, los usuarios pueden configurar instancias existentes o desplegarlas en grupos de recursos existentes, lo que aumenta la versatilidad de la automatización. La arquitectura desplegable deSecrets Manager es un gran ejemplo de este principio en acción. Al permitir a los usuarios reutilizar instancias Secrets Manager, grupos de recursos y clave de cifrado KMS existentes, esta automatización proporciona un alto grado de flexibilidad y adaptabilidad. Por ejemplo, puede:

    • Configure una instancia de Secrets Manager existente pasando su ID y creando grupos de secretos en la instancia existente.
    • Realice la integración con un sistema de gestión de claves existente como Key Protect o Hyper Protect Crypto Services.
    • Despliegue en un grupo de recursos existente o cree uno nuevo con convenios de denominación personalizables.

De forma alternativa, esta arquitectura desplegable también permite crear una nueva instancia de Secrets Manager, un nuevo grupo de recursos y otros recursos desde cero, proporcionando una solución autónoma.

Al adoptar la componibilidad, una arquitectura desplegable puede integrarse fácilmente en una arquitectura de solución más compleja apilándola con otras arquitecturas desplegables. Por ejemplo, el patrón de generación aumentada de recuperación demuestra cómo se pueden combinar múltiples arquitecturas desplegables, incluida la arquitectura desplegable Secrets Manager, para construir una solución compleja. Las arquitecturas desplegables diseñadas teniendo en cuenta la componibilidad son la base de estas soluciones complejas.

Cuando las arquitecturas desplegables se apilan juntas, cada arquitectura desplegable miembro mantiene su estado de configuración independiente, lo que permite su despliegue, actualización o despliegue individual. Este enfoque modular permite que las garantías de coste, conformidad, asistencia y calidad se deriven de las arquitecturas desplegables incluidas, mientras que la solución global permanece versionada de forma única con sus propias descripciones y arquitectura de referencia. Para más información, consulte ¿Qué significa apilar arquitecturas desplegables?

Idoneidad

Una arquitectura desplegable debe diseñarse teniendo en cuenta la capacidad de consumo, lo que facilita a los usuarios la comprensión y el despliegue. Para conseguirlo, la arquitectura desplegable debe proporcionar una documentación completa que incluya lo siguiente:

Requisitos previos
Dependencias de software y requisitos de infraestructura necesarios para el despliegue.
Descripciones detalladas de variables de entrada y valores de salida
Incluyendo la finalidad, el tipo de datos y los valores predeterminados.
Permisos mínimos necesarios
Permisos necesarios para ejecutar la automatización de la arquitectura desplegable.
Diagramas y mapas de arquitectura
Representaciones visuales de los componentes y relaciones de la arquitectura desplegable.
Configuración simplificada
Fácil de desplegar y gestionar.
Requisitos de recursos reducidos
Optimice la arquitectura desplegable para minimizar los requisitos de hardware y recursos, como los requisitos de CPU y memoria más bajos, haciéndola más asequible y eficiente.
Despliegue optimizado
Más rápido y más fácil de empezar.

Otra faceta de garantizar que la arquitectura desplegable sea fácilmente consumible es proporcionar varias variaciones, incluida una variación de inicio rápido. Se debe proporcionar una versión de inicio rápido de la arquitectura desplegable, que es más barata y más rápida de ejecutar. Por ejemplo, la variación de QuickStart de la arquitectura desplegable de Red Hat OpenShift Container Platform en VPC landing zone crea un entorno de nube privada virtual (VPC) totalmente personalizable en una sola región, proporcionando un único clúster de Red Hat OpenShift en una VPC segura para cargas de trabajo. Esta variación de inicio rápido está diseñada para fines de demostración y desarrollo, y cuesta menos de 400 dólares al mes para ejecutarse.

Por el contrario, la versión estándar de la arquitectura desplegable de Red Hat OpenShift Container Platform en VPC landing zone, basada en la arquitectura de referencia de IBM Cloud Framework for Financial Services, crea clústeres de carga de trabajo seguros y compatibles de Red Hat OpenShift Container Platform en una red de Virtual Private Cloud (VPC), pero cuesta más de 4.000 dólares al mes. Además, incluye características avanzadas como, por ejemplo, el servicio de VPC de gestión, el servicio de VPC de carga de trabajo, el aislamiento de VPC de gestión y VPC de carga de trabajo y las decisiones avanzadas de arquitectura de seguridad de red.

Variables de entrada

Facilite a los usuarios la configuración de las variables de entrada de la arquitectura desplegable utilizando las prácticas recomendadas siguientes:

Exponer sólo argumentos modificados comúnmente
Exponer solo las variables que la mayoría de los usuarios necesitarán cambiar, evitando arquitecturas implementables con un gran número de variables de entrada que podrían abrumar a los usuarios. Para los usuarios avanzados, considere la posibilidad de proporcionar un único campo de entrada JSON para una personalización adicional. Como ejemplo, la arquitectura desplegable de zona de destino de VPC muestra un único campo denominado override_json_string que proporciona un control completo a los usuarios avanzados en la topología desplegada. Para obtener más información, consulte la guía de despliegue de zona de destino de VPC.
Utilizar denominación clara y descriptiva para recursos existentes
Cuando haga referencia a recursos existentes, utilice nombres que indiquen claramente a qué hacen referencia, como existing_cluster_name en lugar de cluster_name, para evitar ambigüedades.
Preferir nombres sobre ID
Cuando haga referencia a recursos existentes, utilice nombres en lugar de ID para mejorar la capacidad de consumo del usuario.
Evitar acrónimos
En lugar de utilizar acrónimos, utilice nombres completos de productos para facilitar que las personas que no están familiarizadas con los productos o servicios entiendan a qué se refieren. Por ejemplo, secrets_manager en lugar de sm, o key_management en lugar de kms.
Utilizar prestaciones avanzadas de escritura
Para habilitar el servicio de proyectos IBM Cloud para representar widgets de entrada adecuados para variables, lo que facilita a los usuarios la configuración de valores. Por ejemplo:
  • Región de VPC: una lista desplegable de todas las regiones de VPC disponibles en IBM Cloud.
  • Clave SSH de VPC: un campo de entrada seguro para la gestión de claves SSH.
  • Clúster: una lista desplegable de clústeres disponibles en IBM Cloud.

Para obtener más información, consulte Edición local de los valores de manifiesto de catálogo.

Siguiendo estas directrices, la arquitectura desplegable se puede hacer más consumible, lo que permite a los usuarios comprenderla y desplegarla rápidamente.

Calidad

Para garantizar que la arquitectura desplegable sea fiable y coherente, es esencial implementar y automatizar las comprobaciones de calidad. Estas comprobaciones deben cubrir varios aspectos de la arquitectura desplegable, incluida la calidad del código, la validación de la configuración, las pruebas y la integración continua.

calidad del código

Aproveche la línea y el formato de código. Aplique estilos de codificación y formateo coherentes para que el código sea fácil de leer y mantener. Detecte errores y avisos en el código para evitar problemas durante el despliegue. Considera la posibilidad de ir más allá del código de Terraform e incorporar cualquier herramienta relevante para todos los recursos de tu arquitectura desplegable, como scripts de Bash, scripts de Python, archivos YAML y JSON, y Golang.

Ejemplos:

  • terraform_fmt para dar formato al código de Terraform.
  • go-fmt para formatear el código de Go.
  • black para dar formato al código Python.
  • isort para ordenar las importaciones de Python.
  • flake8 para comprobar si hay errores y avisos en el código Python.
  • shellcheck para comprobar si hay errores y avisos en los scripts de shell.
  • golangci-lint para comprobar si hay errores y avisos en el código de Go.

Validación de configuración

Utilice la validación estática para comprobar la sintaxis y la configuración de la arquitectura desplegable para asegurarse de que es correcta y coherente. Valide la configuración de la arquitectura desplegable para evitar errores durante el despliegue. Una vez más, considere ir más allá del código Terraform, e incorpore cualquier herramienta relevante para todos los recursos en su arquitectura desplegable, como scripts Bash, scripts Python, archivos YAML y JSON, y Golang.

Ejemplos:

  • terraform_validate para validar la configuración de Terraform.
  • checkov para comprobar los problemas de seguridad y conformidad en el código de Terraform.
  • tflint para comprobar si hay errores y avisos.
  • detect-secrets para detectar secretos en el código.
  • hadolint para comprobar si hay errores y avisos en los archivos Docker.
  • helmlint para comprobar si hay errores y avisos en los diagramas de Helm.

Pruebas

Cuando se trata de probar el código de infraestructura, no hay ninguna prueba de unidad pura de la forma en que puede pensarlo para el código de aplicación. En su lugar, la estrategia de prueba implica desplegar la infraestructura en un entorno real, validar que funciona y, a continuación, anular su despliegue.

Suite de pruebas de validación automatizada

La recomendación es tener una suite de pruebas automatizada básica que cubra los siguientes aspectos básicos:

Pruebas de despliegue
Verifique que el código de infraestructura se puede desplegar correctamente en un entorno real. Cree todos los recursos necesarios, como máquinas virtuales, bases de datos y redes. Estas pruebas ayudan a garantizar que el código de infraestructura sea correcto y se pueda aplicar correctamente a un entorno real. Se recomienda variar los parámetros de entrada de la arquitectura desplegable en estas pruebas para garantizar una amplia cobertura alineada con el uso común.
Pruebas de destrucción
Verifique que el código de infraestructura se puede retirar o destruir correctamente, eliminando todos los recursos creados. Estas pruebas garantizan que el código de infraestructura se puede eliminar de forma segura de un entorno real, sin dejar recursos huérfanos ni provocar consecuencias no deseadas.
Pruebas de idempotencia
Verifique que el código de infraestructura se puede volver a aplicar varias veces sin provocar cambios o errores no deseados. En otras palabras, el código debe producir el mismo resultado independientemente de cuántas veces se aplique. Estas pruebas son críticas en entornos como IBM Cloud, donde la plataforma comprueba periódicamente los cambios para detectar la desviación entre la infraestructura desplegada y el origen de la verdad, que es el código de automatización. Las pruebas de idempotency ayudan a garantizar que el código de infraestructura puede manejar despliegues o actualizaciones repetidas sin causar problemas. Estas pruebas también ayudan a garantizar que las prestaciones de detección de desviación puedan identificar con precisión y remediar cualquier discrepancia entre el estado previsto y el estado real de la infraestructura. Para obtener más información, consulte Gestión de la desviación.
Pruebas de actualización de versión
Verifique que el código de infraestructura se puede actualizar correctamente de una versión a otra, sin provocar errores ni cambios no deseados. Estas pruebas garantizan que el código de infraestructura se pueda actualizar de forma segura, sin interrumpir ni destruir los recursos existentes ni provocar consecuencias no deseadas.

Casos de prueba avanzados

Los casos de prueba avanzados incluyen escenarios como:

Despliegue de la arquitectura desplegable varias veces en la misma cuenta
Verifique que el código de infraestructura puede manejar varios despliegues en la misma cuenta, sin provocar conflictos de nombre de recurso ni otros problemas.
Despliegue de la arquitectura desplegable con un perfil de confianza
Verifique que el código de infraestructura se puede desplegar con un perfil de confianza de Cloud Identity and Access Management. Para obtener más información, consulte Definición de un método de autenticación.

Al incluir estas pruebas en la suite de pruebas automatizadas, puede asegurarse de que el código de infraestructura sea fiable, sólido y seguro para desplegar en producción.

Integración continua

Para garantizar la fiabilidad, la coherencia y la capacidad de mantenimiento de la arquitectura desplegable, se recomienda un enfoque de desplazamiento a la izquierda, donde las comprobaciones de calidad y las pruebas se integran al principio del ciclo de desarrollo. Este enfoque ayuda a detectar errores y defectos de forma temprana, reduciendo la probabilidad de problemas en sentido descendente y mejorando la calidad general.

Como parte de este enfoque, se recomiendan los siguientes controles de calidad:

Control de calidad del lado del cliente
Los ganchos de confirmaciónGit del lado del cliente deben utilizarse para ejecutar comprobaciones en la máquina del desarrollador antes de confirmar el código. Esto incluye comprobaciones de estándares de codificación, errores de sintaxis y datos confidenciales. Se pueden utilizar herramientas como Pre-commit para automatizar este proceso.
Prácticas de AC
Deben seguirse las mejores prácticas para la integración continua (CI). Las prácticas generales para cualquier producto de ingeniería de software se aplican al desarrollo de arquitectura desplegable, incluyendo:
  • Trabajar con solicitudes de extracción pequeñas y focalizadas (SC) para facilitar las revisiones oportunas y reducir los conflictos de fusión.
  • Integración de cambios de código en la rama principal de forma regular para evitar las ramas de características de larga duración y reducir la complejidad de la fusión.
  • Implementación de pruebas automatizadas y revisiones de código para garantizar la calidad y coherencia del código.
  • Validación continua de la configuración y sintaxis de la arquitectura desplegable para garantizar la corrección y la coherencia.
Conducto de AC
Se debe configurar un conducto de AC para automatizar estas prácticas, garantizando que cada cambio de código en la arquitectura desplegable se prueba y valida sistemáticamente. Esta interconexión garantiza que la arquitectura desplegable funcione de forma correcta y coherente, y que los errores o defectos se detecten con antelación.

Herramientas y recursos

Se proporciona un conjunto completo de herramientas y recursos para facilitar la creación de arquitecturas desplegables de alta calidad. Los módulos Terraform curados son una pieza clave, con más de 60 módulos reutilizables, seguros y validados que cubren una amplia gama de necesidades de infraestructura. Estos módulos están disponibles en GitHub y están soportados y actualizados a través de un modelo de contribución de código abierto, y están respaldados por contribuciones de la organización de desarrollo IBM Cloud.

Además de los módulos de Terraform organizados, también se proporcionan prácticas recomendadas y plantillas para ayudar con la arquitectura desplegable y la creación de módulos. Esto incluye documentación, una plantilla de repositorio de arquitectura desplegable deGitHub que está alineada con las prácticas recomendadas de creación y directrices de creación de módulos que se aplican tanto a los módulos de Terraform como a las arquitecturas desplegables basadas en Terraform. Estos recursos se pueden utilizar para empezar rápidamente a utilizar una nueva arquitectura desplegable.

También se proporciona una infraestructura de pruebas automatizada, y basada en la biblioteca Terratest, con pruebas escritas en Go. El marco abarca pruebas de idempotencia, pruebas de actualización y GitHub, y utiliza funciones de ayuda para pruebas de la biblioteca https://github.com/terraform-ibm-modules/ibmcloud-terratest-wrapper. Para obtener más información, consulte nuestra documentación de prueba.

Para apoyar el desarrollo de conductos de CI, se dispone de una serie de herramientas y recursos, entre los que se incluyen:

  • Acciones reutilizables de GitHub.
  • Generación automatizada de documentación.
  • Incorporación automatizada a IBM Cloud.
  • Actualizaciones de dependencias automatizadas utilizando la renovación personalizada.
  • Las herramientas de configuración de desarrollo local y la configuración de enganches previos a la confirmación, consulte nuestra documentación de configuración de desarrollo local para obtener más información.

Estas herramientas y recursos están diseñados para acelerar y facilitar la creación de arquitecturas desplegables de alta calidad.

Próximos pasos

Ahora que conoce las prácticas recomendadas para crear una arquitectura desplegable, puede utilizar las herramientas y los recursos y revisar la siguiente documentación de IBM Cloud antes de desarrollar el código de automatización. Esto le ayuda a asegurarse de que ha planificado y diseñado exhaustivamente la solución para compartir en IBM Cloud: