REL08-BP04 Desplegar mediante una infraestructura inmutable
La infraestructura inmutable es un modelo que exige que no haya actualizaciones, parches de seguridad ni cambios de configuración en las cargas de trabajo de producción. Cuando es necesario realizar un cambio, la arquitectura se integra en una nueva infraestructura y se implementa en producción.
Utilice una estrategia de despliegue de infraestructura inmutable para aumentar la fiabilidad, la coherencia y la reproducibilidad de los despliegues de sus cargas de trabajo.
Resultado deseado: con una infraestructura inmutable, no está permitido realizar modificaciones in situ para ejecutar los recursos de infraestructura dentro de una carga de trabajo. En su lugar, cuando es necesario realizar un cambio, se despliega en paralelo un nuevo conjunto de recursos de infraestructura actualizados que contienen todos los cambios que es necesario realizar en los recursos existentes. Este despliegue se valida automáticamente y, si se realiza correctamente, el tráfico se desplaza gradualmente al nuevo conjunto de recursos.
Esta estrategia de despliegue se aplica a las actualizaciones de software, los parches de seguridad, los cambios de infraestructura, las actualizaciones de la configuración y las actualizaciones de las aplicaciones, entre otros.
Antipatrones usuales:
-
Implementar cambios in situ en los recursos de infraestructura en ejecución.
Beneficios de establecer esta práctica recomendada:
-
Mayor coherencia entre todos los entornos: dado que no hay diferencias en los recursos de infraestructura entre los entornos, se aumenta la coherencia y se simplifican las pruebas.
-
Reducción de las desviaciones de la configuración: al reemplazar los recursos de la infraestructura por una configuración conocida y controlada por versiones, la infraestructura se establece en un estado conocido, probado y fiable, lo que evita desviaciones de la configuración.
-
Despliegues atómicos fiables: los despliegues se realizan correctamente o no cambia nada, lo que aumenta la coherencia y la fiabilidad en el proceso de despliegue.
-
Despliegues simplificados: los despliegues se simplifican porque no tienen que ser compatibles con las mejoras. Las mejoras son simplemente nuevos despliegues.
-
Despliegues más seguros con procesos de recuperación y restauración rápidos: los despliegues son más seguros porque la versión activa anterior no se cambia. Puede restaurarla si se detecta algún error.
-
Postura de seguridad mejorada: al no permitir cambios en la infraestructura, es posible deshabilitar los mecanismos de acceso remoto (como SSH). Esto reduce el vector de ataque y mejora la postura de seguridad de su organización.
Nivel de riesgo expuesto si no se establece esta práctica recomendada: medio
Guía para la implementación
Automatización
A la hora de definir una estrategia de despliegue de infraestructura inmutable, se recomienda utilizar la automatización
Con la infraestructura como código (IaC), los pasos de aprovisionamiento, orquestación y despliegue de la infraestructura se definen de forma programática, descriptiva y declarativa, y se almacenan en un sistema de control del código fuente. El uso de la infraestructura como código simplifica la automatización del despliegue de la infraestructura y ayuda a lograr la inmutabilidad de la infraestructura.
Patrones de despliegue
Cuando es necesario realizar un cambio en la carga de trabajo, la estrategia inmutable de despliegue de la infraestructura requiere el despliegue de un nuevo conjunto de recursos de infraestructura que incluya todos los cambios necesarios. Es importante que este nuevo conjunto de recursos siga un patrón de despliegue que minimice la repercusión en los usuarios. Hay dos estrategias principales para este despliegue:
Despliegue de valores controlados: es la práctica de dirigir a una pequeña cantidad de los clientes a la nueva versión, que normalmente se ejecuta en una instancia de servicio único (la de valor controlado). A continuación, puede analizar en profundidad los errores o los cambios en el comportamiento que se hayan generado. Puede eliminar el tráfico del valor controlado si encuentra problemas críticos y enviar a los usuarios de vuelta a la versión anterior. Si el despliegue se realiza correctamente, puede seguir desplegando a la velocidad que desee, mientras supervisa los cambios en busca de errores, hasta completar el despliegue. AWS CodeDeploy puede configurarse con unos ajustes de despliegue que permitan un despliegue de valores controlados.
Despliegues azul-verde: son similares a los despliegues de valores controlados, excepto que una flota completa de la aplicación se despliega en paralelo. Alterne sus implementaciones en las dos pilas (azul y verde). Una vez más, puede enviar tráfico a la nueva versión y volver a la versión anterior si observa problemas con el despliegue. Normalmente, todo el tráfico se conmuta a la vez. Sin embargo, también puede usar fracciones de tráfico para cada versión para acelerar la adopción de la nueva versión utilizando las capacidades de enrutamiento ponderado por DNS de Amazon Route 53. AWS CodeDeploy y AWS Elastic Beanstalk se pueden configurar con unos ajustes de despliegue que permitan un despliegue azul-verde.

Figura 8: Despliegue azul-verde con AWS Elastic Beanstalk y Amazon Route 53
Detección de desviaciones
Una desviación es cualquier cambio que provoca que un recurso de la infraestructura tenga un estado o una configuración diferente a la esperada. Cualquier tipo de cambio de configuración no administrado va en contra de la noción de infraestructura inmutable y debe detectarse y remediarse para que la infraestructura inmutable se implemente correctamente.
Pasos para la implementación
-
No permita que se realicen modificaciones in situ de los recursos de la infraestructura en ejecución.
-
Puede usar AWS Identity and Access Management (IAM)
para especificar quién o qué puede acceder a los servicios y recursos de AWS, administrar de forma centralizada los permisos detallados y analizar el acceso para refinar los permisos en AWS.
-
-
Automatice el despliegue de los recursos de la infraestructura para aumentar la reproducibilidad y minimizar la posibilidad de que se cometan errores humanos.
-
Como se describe en el documento técnico «Introduction to DevOps on AWS», la automatización es una piedra angular de los servicios de AWS y es compatible internamente con todos los servicios, características y ofertas.
-
La preparación previade su imagen de máquina de Amazon (AMI) puede acelerar el tiempo de lanzamiento. EC2 Image Builder
es un servicio de AWS totalmente administrado que le ayuda a automatizar la creación, el mantenimiento, la validación, el uso compartido y el despliegue de AMI para Linux o Windows personalizadas, seguras y actualizadas. -
Esto son algunos de los servicios que permiten la automatización:
-
AWS Elastic Beanstalk
es un servicio para desplegar y escalar rápidamente aplicaciones web desarrolladas con Java, .NET, PHP, Node.js, Python, Ruby, Go y Docker en servidores conocidos como Apache, NGINX, Passenger e IIS. -
AWS Proton
ayuda a los equipos de plataforma a conectar y coordinar todas las herramientas que sus equipos de desarrollo necesitan para el aprovisionamiento de la infraestructura, los despliegues de código, la supervisión y las actualizaciones. AWS Proton permite una infraestructura automatizada, como el aprovisionamiento de código y el despliegue de aplicaciones basadas en contenedores y sin servidor.
-
-
El uso de la infraestructura como código facilita la automatización del despliegue de la infraestructura y ayuda a lograr la inmutabilidad de la misma. AWS proporciona servicios que permiten la creación, el despliegue y el mantenimiento de la infraestructura de forma programática, descriptiva y declarativa.
-
AWS CloudFormation
ayuda a los desarrolladores a crear recursos de AWS de una manera ordenada y predecible. Los recursos se escriben en archivos de texto en formato JSON o YAML. Las plantillas requieren una sintaxis y una estructura específicas que dependen de los tipos de recursos que se crean y administran. Los recursos se crean en JSON o YAML con cualquier editor de código, como AWS Cloud9, se registra en un sistema de control de versiones y, a continuación, CloudFormation crea los servicios especificados de una forma segura y repetible. -
AWS Serverless Application Model (AWS SAM)
es un marco de código abierto que puede utilizar para crear aplicaciones sin servidor. enAWS. AWS SAM se integra con otros servicios de AWS y es una extensión de AWS CloudFormation. -
AWS Cloud Development Kit (AWS CDK)
es un marco de desarrollo de software de código abierto para modelar y aprovisionar los recursos de sus aplicaciones en la nube mediante lenguajes de programación conocidos. Puede usar AWS CDK para modelar la infraestructura de las aplicaciones mediante TypeScript, Python, Java y .NET. AWS CDK utiliza AWS CloudFormation en segundo plano para aprovisionar recursos de una forma segura y repetible. -
AWS Cloud Control API
presenta un conjunto común de API de creación, lectura, actualización, eliminación y enumeración (CRUDL) para ayudar a los desarrolladores a administrar su infraestructura en la nube de una forma sencilla y coherente. Las API comunes de Cloud Control API permiten a los desarrolladores administrar de manera uniforme el ciclo de vida de los servicios de AWS y de terceros.
-
-
-
Implemente patrones de despliegue que tengan la mínima repercusión en los usuarios.
-
Despliegue de valores controlados:
-
Despliegues azul-verde: en el documento técnico «Blue/Green Deployments on AWS», se describen ejemplos de técnicas para implementar estrategias de despliegue azul-verde.
-
-
Detecte desviaciones de la configuración o el estado. Para obtener más información, consulte «Detección de cambios de configuración no administrados en pilas y recursos».
Recursos
Prácticas recomendadas relacionadas:
Documentos relacionados:
Vídeos relacionados: