

# REL 8. ¿Cómo implementa el cambio?
<a name="rel-08"></a>

Los cambios controlados son necesarios para implementar nuevas funcionalidades y comprobar que las cargas de trabajo y el entorno operativo ejecuten software conocido y que puedan recibir revisiones o reemplazos de manera predecible. Si estos cambios no se controlan, es difícil predecir su efecto o abordar los problemas que surjan a causa de ellos. 

**Topics**
+ [

# REL08-BP01 Uso de manuales de procedimientos para actividades estándar como la implementación
](rel_tracking_change_management_planned_changemgmt.md)
+ [

# REL08-BP02 Integración de las pruebas funcionales como parte de la implementación
](rel_tracking_change_management_functional_testing.md)
+ [

# REL08-BP03 Integración de las pruebas de resiliencia como parte de la implementación
](rel_tracking_change_management_resiliency_testing.md)
+ [

# REL08-BP04 Implementación mediante una infraestructura inmutable
](rel_tracking_change_management_immutable_infrastructure.md)
+ [

# REL08-BP05 Implementación de cambios con automatización
](rel_tracking_change_management_automated_changemgmt.md)

# REL08-BP01 Uso de manuales de procedimientos para actividades estándar como la implementación
<a name="rel_tracking_change_management_planned_changemgmt"></a>

 Los manuales de procedimientos son procedimientos predefinidos para obtener resultados concretos. Use manuales de procedimientos para llevar a cabo actividades estándar manuales o automáticas. Algunos ejemplos incluyen implementar una carga de trabajo, aplicarle un parche a dicha carga de trabajo o hacer modificaciones de DNS. 

 Por ejemplo, establezca procesos para [garantizar la seguridad de la reversión durante las implementaciones](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments). Tener la garantía de poder dar marcha atrás en una implementación sin disrupciones para sus clientes es esencial a la hora de hacer que un servicio sea fiable. 

 Para los procedimientos del manual de procedimientos, comience con un proceso manual válido y efectivo, impleméntelo en código e invóquelo para que se ejecute automáticamente cuando corresponda. 

 Incluso en el caso de cargas de trabajo sofisticadas y altamente automatizadas, los manuales de procedimientos siguen siendo útiles para [ejecutar los días de juego](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays) o para cumplir con los rigurosos requisitos de informes y auditoría. 

 Tenga en cuenta que los manuales de estrategias se usan en respuesta a incidentes específicos y los manuales de procedimientos se usan para conseguir resultados determinados. A menudo, los manuales de procedimientos son para actividades rutinarias, mientras que los manuales de estrategias se utilizan para responder a eventos no rutinarios. 

 **Patrones comunes de uso no recomendados:** 
+  Hacer cambios imprevistos en la configuración en producción. 
+  Omitir pasos del plan para que la implementación sea más rápida, lo que da lugar a una implementación errónea. 
+  Hacer cambios sin probar la revocación del cambio. 

 **Beneficios de establecer esta práctica recomendada:** la planificación eficaz de los cambios aumenta su capacidad de efectuar correctamente el cambio, ya que sabrá qué sistemas se verán afectados. Validar el cambio en los entornos de prueba aumenta la confianza. 

 **Nivel de riesgo expuesto si no se establece esta práctica recomendada:** alto 

## Guía para la implementación
<a name="implementation-guidance"></a>
+  Para obtener respuestas sistematizadas e inmediatas a eventos conocidos, documente los procedimientos en manuales de procedimientos. 
+  Use el principio de infraestructura como código para definir la infraestructura. Si usa AWS CloudFormation (o un tercero de confianza) para definir su infraestructura, puede utilizar software de control de versiones para crear versiones y hacer un seguimiento de los cambios. 
  +  Use AWS CloudFormation (o un proveedor tercero de confianza) para definir su infraestructura. 
    +  [Qué es AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 
  +  Cree plantillas singulares y desacopladas mediante buenos principios de diseño de software. 
    +  Determine los permisos, las plantillas y las partes responsables de su implementación. 
      + [ Control de acceso con AWS Identity and Access Management](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)
    + Utilice un sistema de administración de código fuente alojado basado en una tecnología popular como Git para almacenar el código fuente y la configuración de infraestructura como código (IaC).

## Recursos
<a name="resources"></a>

 **Documentos relacionados:** 
+  [Socio de APN: socios que pueden ayudarle a crear soluciones de implementación automatizadas](https://aws.amazon.com/partners/find/results/?keyword=devops) 
+  [AWS Marketplace: productos que pueden usarse para automatizar sus implementaciones](https://aws.amazon.com/marketplace/search/results?searchTerms=DevOps) 
+  [Qué es AWS CloudFormation?](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 

 **Ejemplos relacionados:** 
+  [Automating operations with Playbooks and Runbooks](https://wellarchitectedlabs.com/operational-excellence/200_labs/200_automating_operations_with_playbooks_and_runbooks/) 

# REL08-BP02 Integración de las pruebas funcionales como parte de la implementación
<a name="rel_tracking_change_management_functional_testing"></a>

 Utilice técnicas como las pruebas unitarias y las pruebas de integración que validen la funcionalidad requerida. 

 Las pruebas unitarias son un proceso en el que se prueba la unidad funcional de código más pequeña para validar su comportamiento. Las pruebas de integración sirven para validar que cada característica de la aplicación funcione de acuerdo con los requisitos del software. Mientras que las pruebas unitarias se centran en probar parte de una aplicación de forma aislada, las pruebas de integración tienen en cuenta los efectos secundarios (por ejemplo, el efecto de la modificación de los datos mediante una operación de mutación). En cualquier caso, las pruebas se deben integrar en una canalización de implementación y, si no se cumplen los criterios de éxito, la canalización se detiene o se revierte. Estas pruebas se llevan a cabo en un entorno de preproducción, que se lleva a cabo antes de la producción en la canalización. 

 Los mejores resultados se obtienen cuando estas pruebas se ejecutan automáticamente como parte de las acciones de creación e implementación. Por ejemplo, con AWS CodePipeline, los desarrolladores confirman los cambios en un repositorio de origen, donde CodePipeline detecta automáticamente los cambios. Se crea la aplicación y se ejecutan las pruebas unitarias. Una vez completadas las pruebas unitarias, el código compilado se implementa en servidores de ensayo para su comprobación. En el servidor de ensayo, CodePipeline ejecuta pruebas adicionales, como pruebas de integración o carga. Una vez completadas correctamente estas pruebas, CodePipeline implementa el código probado y aprobado en instancias de producción. 

 **Resultado deseado:** utiliza la automatización para realizar pruebas unitarias y de integración a fin de validar que el código se comporta según lo previsto. Estas pruebas se integran en el proceso de implementación y, en caso de fallo de una prueba, se interrumpe la implementación. 

 **Patrones comunes de uso no recomendados:** 
+  Durante el proceso de implementación, se ignoran u omiten los errores y planes de las pruebas para acelerar el cronograma de implementación. 
+  Las pruebas se hacen manualmente fuera de la canalización de implementación. 
+  Omite los pasos de prueba de la automatización mediante flujos de trabajo de emergencia manuales. 
+  Las pruebas automatizadas se ejecutan en un entorno que no se parece mucho al entorno de producción. 
+  Crea un conjunto de pruebas que no es lo suficientemente flexible y que es difícil de mantener, actualizar o escalar a medida que la aplicación evoluciona. 

 **Beneficios de establecer esta práctica recomendada:** las pruebas automatizadas durante el proceso de implementación detectan los problemas de forma temprana, lo que reduce el riesgo de que se lance a producción con errores o un comportamiento inesperado. Las pruebas unitarias validan que el código se comporte como se desea y que se cumplan los contratos de la API. Las pruebas de integración validan que el sistema funcione de acuerdo con los requisitos especificados. Estos tipos de pruebas verifican de manera sistemática el orden de funcionamiento previsto de los componentes, como las interfaces de usuario, las API, las bases de datos y el código fuente. 

 **Nivel de riesgo expuesto si no se establece esta práctica recomendada:** alto 

## Guía para la implementación
<a name="implementation-guidance"></a>

 Adopte una estrategia de desarrollo basada en pruebas (TDD) para desarrollar software que incluya casos de prueba para especificar y validar el código. Para empezar, cree casos de prueba para cada función. Si la prueba falla, escriba un código nuevo para superarla. Este enfoque ayuda a validar el resultado esperado de cada función. Ejecute pruebas unitarias y valide que se aprueben antes de enviar el código a un repositorio de código fuente. 

 Implemente pruebas unitarias o de integración como parte de las etapas de compilación, prueba e implementación de la canalización de CI/CD. Automatice las pruebas e inicie las pruebas automáticamente cada vez que haya una nueva versión de la aplicación lista para su implementación. Si no se satisfacen los criterios de éxito, la canalización se detiene o se revierte. 

 Si la aplicación es una aplicación web o móvil, realice pruebas de integración automatizadas en varios navegadores de escritorio o dispositivos reales. Este enfoque es particularmente útil para validar la compatibilidad y la funcionalidad de las aplicaciones móviles en una amplia gama de dispositivos. 

### Pasos para la implementación
<a name="implementation-steps"></a>

1.  Escriba pruebas unitarias antes de desarrollar código funcional (*desarrollo basado en pruebas* o TDD). Establezca pautas de código para que escribir y ejecutar pruebas unitarias sea un requisito de codificación no funcional. 

1.  Cree un conjunto de pruebas de integración automatizadas que cubran las funcionalidades comprobables identificadas. Estas pruebas deben simular las interacciones de los usuarios y validar los resultados esperados. 

1.  Cree el entorno de pruebas necesario para ejecutar las pruebas de integración. Esto puede incluir entornos de preparación o preproducción que imiten fielmente el entorno de producción. 

1.  Configuración de las etapas de origen, compilación, prueba e implementación mediante la consola de AWS CodePipeline o la AWS Command Line Interface (CLI). 

1.  Implemente la aplicación una vez que se haya creado y probado el código. AWS CodeDeploy puede implementarlo en sus entornos de puesta en escena (pruebas) y producción. Estos entornos pueden incluir instancias de Amazon EC2, funciones de AWS Lambda o servidores en las instalaciones. Se debe usar el mismo mecanismo de implementación para implementar la aplicación en todos los entornos. 

1.  Monitoree el progreso de la canalización y del estado de cada etapa. Utilice controles de calidad para bloquear la canalización en función del estado de las pruebas. También puede recibir notificaciones cuando se produzca un fallo en una etapa de canalización o cuando se haya completado la canalización. 

1.  Supervise continuamente los resultados de las pruebas y busque patrones, regresiones o áreas que requieran más atención. Utilice esta información para mejorar el conjunto de pruebas, identificar las áreas de la aplicación que necesitan pruebas más sólidas y optimizar el proceso de implementación. 

## Recursos
<a name="resources"></a>

 **Prácticas recomendadas relacionadas:** 
+  [REL07-BP04 Pruebas en su carga de trabajo](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_adapt_to_changes_load_tested_adapt.html) 
+  [REL08-BP03 Integración de las pruebas de resiliencia como parte de la implementación](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_resiliency_testing.html) 
+  [REL12-BP04 Pruebas de resiliencia mediante ingeniería del caos](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_testing_resiliency_failure_injection_resiliency.html) 

 **Documentos relacionados:** 
+  [Guía prescriptiva de AWS: automatización de pruebas](https://docs.aws.amazon.com/prescriptive-guidance/latest/performance-engineering-aws/test-automation.html) 
+  [Integración y entrega continuas](https://docs.aws.amazon.com/codepipeline/latest/userguide/concepts-continuous-delivery-integration.html) 
+  [Indicators for functional testing](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/indicators-for-functional-testing.html) 
+  [Monitorear canalizaciones](https://docs.aws.amazon.com/codepipeline/latest/userguide/monitoring.html) 
+  [Use AWS CodePipeline with AWS CodeBuild to test code and run builds](https://docs.aws.amazon.com/codebuild/latest/userguide/how-to-create-pipeline.html) 
+  [AWS Device Farm](https://docs.aws.amazon.com/codepipeline/latest/userguide/action-reference-DeviceFarm.html) 

# REL08-BP03 Integración de las pruebas de resiliencia como parte de la implementación
<a name="rel_tracking_change_management_resiliency_testing"></a>

 Para integrar las pruebas de resiliencia, cree fallos en el sistema de forma intencionada para medir su capacidad en caso de situaciones disruptivas. Las pruebas de resiliencia son diferentes de las pruebas unitarias y funcionales que suelen estar integradas en los ciclos de implementación, ya que se centran en la identificación de fallos imprevistos en el sistema. Aunque es seguro comenzar con la integración de pruebas de resiliencia en la fase de preproducción, fíjese el objetivo de implementar estas pruebas en producción como parte de sus [https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/test-reliability.html#GameDays). 

 **Resultado deseado**: las pruebas de resiliencia ayudan a generar confianza en la capacidad del sistema para resistir la degradación en la producción. Los experimentos identifican los puntos débiles que podrían provocar fallos, lo que le ayuda a mejorar su sistema para mitigar de manera automática y eficiente los fallos y la degradación. 

 **Patrones comunes de uso no recomendados:** 
+  Falta de observabilidad y supervisión en los procesos de implementación 
+  Confianza en las personas para resolver fallos del sistema 
+  Mecanismos de análisis de mala calidad 
+  Centrarse en los problemas conocidos de un sistema y falta de experimentación para identificar cualquier elemento desconocido 
+  Identificación de fallos, pero sin ninguna resolución 
+  Falta de documentación de los resultados y manuales de procedimientos 

 **Beneficios de establecer prácticas recomendadas:** las pruebas de resiliencia integradas en las implementaciones ayudan a identificar problemas desconocidos en el sistema que, de otro modo, pasarían desapercibidos y que pueden provocar tiempos de inactividad en la producción. La identificación de estos elementos desconocidos en un sistema le ayuda a documentar los resultados, integrar las pruebas en su proceso de CI/CD y crear manuales de procedimientos, lo que simplifica la mitigación mediante mecanismos eficientes y repetibles. 

 **Nivel de riesgo expuesto si no se establece esta práctica recomendada:** medio 

## Guía para la implementación
<a name="implementation-guidance"></a>

 Los formularios de pruebas de resiliencia más comunes que se pueden integrar en las implementaciones de su sistema son la recuperación de desastres y la ingeniería del caos. 
+  Incluya actualizaciones en sus planes de recuperación de desastres y procedimientos operativos estándar (SOP) en cualquier implementación importante. 
+  Integre las pruebas de fiabilidad en sus canalizaciones de implementación automatizadas. Estos servicios, como [AWS Resilience Hub](https://aws.amazon.com/resilience-hub/), se pueden [integrar en su canalización de CI/CD](https://aws.amazon.com/blogs/architecture/continually-assessing-application-resilience-with-aws-resilience-hub-and-aws-codepipeline/) para establecer evaluaciones de resiliencia continuas que se evalúen automáticamente como parte de cada implementación. 
+  Defina sus aplicaciones en AWS Resilience Hub. Las evaluaciones de resiliencia generan fragmentos de código que le ayudan a crear procedimientos de recuperación como documentos de AWS Systems Manager para sus aplicaciones y proporcionan una lista de monitores y alarmas recomendados de Amazon CloudWatch. 
+  Una vez actualizados los planes de recuperación de desastres y los procedimientos operativos estándar, lleve a cabo las pruebas de recuperación de desastres para verificar que sean efectivos. Las pruebas de recuperación de desastres le ayudan a determinar si puede restaurar el sistema después de un evento y recuperar el funcionamiento normal. Puede simular varias estrategias de recuperación de desastres e identificar si su planificación es suficiente para cumplir sus requisitos de tiempo de actividad. Las estrategias comunes de recuperación de desastres incluyen copias de seguridad y restauración, el enfoque de luz piloto, la espera en frío, la espera semiactiva, la espera activa y la estrategia activa-activa, y todas difieren en costo y complejidad. Antes de llevar a cabo las pruebas de recuperación de desastres, le recomendamos que defina su objetivo de tiempo de recuperación (RTO) y objetivo de punto de recuperación (RPO) para simplificar la elección de la estrategia que desee simular. AWS ofrece herramientas de recuperación de desastres, como [AWS Elastic Disaster Recovery](https://aws.amazon.com/disaster-recovery/), que le ayudarán a empezar con la planificación y las pruebas. 
+  Los experimentos de ingeniería del caos introducen disrupciones en el sistema, como cortes de la red y fallos del servicio. Al ejecutar simulaciones con fallos controlados, puede descubrir las vulnerabilidades de su sistema y, al mismo tiempo, contener la repercusión de los fallos inyectados. Al igual que las demás estrategias, ejecute simulaciones de fallas controladas en entornos que no sean de producción utilizando servicios como [AWS Fault Injection Service](https://aws.amazon.com/fis/) para ganar confianza antes de implementarlos en producción. 

## Recursos
<a name="resources"></a>

 **Documentos relacionados:** 
+  [Experiment with failure using resilience testing to build recovery preparedness](https://docs.aws.amazon.com/wellarchitected/latest/devops-guidance/qa.nt.6-experiment-with-failure-using-resilience-testing-to-build-recovery-preparedness.html) 
+  [Continually assessing application resilience with AWS Resilience Hub and AWS CodePipeline](https://aws.amazon.com/blogs/architecture/continually-assessing-application-resilience-with-aws-resilience-hub-and-aws-codepipeline/) 
+  [Disaster recovery (DR) architecture on AWS, part 1: Strategies for recovery in the cloud](https://aws.amazon.com/blogs/architecture/disaster-recovery-dr-architecture-on-aws-part-i-strategies-for-recovery-in-the-cloud/) 
+  [Verify the resilience of your workloads using Chaos Engineering](https://aws.amazon.com/blogs/architecture/verify-the-resilience-of-your-workloads-using-chaos-engineering/) 
+  [Principios de la ingeniería del caos](https://principlesofchaos.org/) 
+  [Chaos Engineering Workshop](https://disaster-recovery.workshop.aws/en/intro/concepts/chaos-engineering.html) 

 **Videos relacionados:** 
+  [AWS re:Invent 2020: Testing Resilience using Chaos Engineering](https://www.youtube.com/watch?v=OlobVYPkxgg) 
+  [Improve Application Resilience with AWS Fault Injection Service](https://www.youtube.com/watch?v=N0aZZVVZiUw) 
+  [Prepare & Protect Your Applications From Disruption With AWS Resilience Hub](https://www.youtube.com/watch?v=xa4BVl4N1Gw) 

# REL08-BP04 Implementación mediante una infraestructura inmutable
<a name="rel_tracking_change_management_immutable_infrastructure"></a>

 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 aplicar un cambio, la arquitectura se integra en una nueva infraestructura y se implementa en producción. 

 Utilice una estrategia de implementación de infraestructura inmutable para aumentar la fiabilidad, la coherencia y la reproducibilidad de las implementaciones de sus cargas de trabajo. 

 **Resultado deseado:** con una infraestructura inmutable, no se permiten [modificaciones in situ](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/deployment-strategies.html#in-place-deployments) para ejecutar los recursos de infraestructura dentro de una carga de trabajo. En su lugar, cuando es necesario hacer un cambio, se implementa en paralelo un nuevo conjunto de recursos de infraestructura actualizados que contienen todos los cambios que es necesario aplicar en los recursos existentes. Esta implementación se valida automáticamente y, si se efectúa correctamente, el tráfico se desplaza gradualmente al nuevo conjunto de recursos. 

 Esta estrategia de implementación se aplica a las actualizaciones de software, las revisiones de seguridad, los cambios de infraestructura, las actualizaciones de la configuración y las actualizaciones de las aplicaciones, entre otros. 

 **Patrones comunes de uso no recomendados:** 
+  Implementar cambios in situ en los recursos de infraestructura en ejecución. 

 **Beneficios de establecer esta práctica recomendada:** 
+  **Mayor coherencia entre los entornos:** dado que no hay diferencias en los recursos de infraestructura entre los entornos, la coherencia aumenta y las pruebas se simplifican. 
+  **Reducción de las desviaciones de la configuración:** al sustituir los recursos de infraestructura por una configuración conocida y controlada por versiones, la infraestructura se define en un estado conocido, probado y fiable, lo que evita desviaciones de la configuración. 
+  **Implementaciones atómicas fiables:** las implementaciones se completan correctamente o no cambia nada, lo que aumenta la coherencia y la fiabilidad del proceso de implementación. 
+  **Implementaciones simplificadas:** las implementaciones se simplifican porque no tienen que admitir actualizaciones. Las actualizaciones son simplemente nuevas implementaciones. 
+  **Implementaciones más seguras con procesos de restauración y recuperación rápidos:** las implementaciones son más seguras porque no se modifica la versión operativa anterior. Puede restaurarla si se detecta algún error. 
+  **Mejora de la posición de seguridad:** al no permitir cambios en la infraestructura, se pueden deshabilitar los mecanismos de acceso remoto (como SSH). Esto reduce el vector de ataque y mejora la posición 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
<a name="implementation-guidance"></a>

 **Automation** 

 A la hora de definir una estrategia de implementación de infraestructura inmutable, se recomienda utilizar la [automatización](https://aws.amazon.com/iam/) en la medida de lo posible para aumentar la reproducibilidad y minimizar la posibilidad de que se cometan errores humanos. Para obtener más información, consulte [REL08-BP05 Implementación de cambios con automatización](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_automated_changemgmt.html) y [Automatización de implementaciones seguras y sin intervención](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/). 

 Con la [infraestructura como código (IaC)](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html), los pasos de aprovisionamiento, orquestación e implementación de la infraestructura se definen de forma programática, descriptiva y declarativa y se almacenan en un sistema de control de código fuente. El uso de la infraestructura como código simplifica la automatización de la implementación de la infraestructura y ayuda a lograr la inmutabilidad de la infraestructura. 

 **Patrones de implementación** 

 Cuando es necesario hacer un cambio en la carga de trabajo, la estrategia inmutable de implementación de la infraestructura requiere la implementación 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 implementación que minimice la repercusión en los usuarios. Hay dos estrategias principales para esta implementación: 

 [https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/canary-deployments.html](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/canary-deployments.html): práctica que consiste en dirigir a un número reducido de clientes a la nueva versión, que normalmente se ejecuta en una instancia de servicio único (canario). 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 canario si encuentra problemas críticos y enviar a los usuarios de vuelta a la versión anterior. Si la implementación se lleva a cabo correctamente, puede continuar implementando a la velocidad deseada y, al mismo tiempo, supervisar los cambios para detectar errores, hasta que esté completamente implementada. AWS CodeDeploy se puede configurar con una [configuración de implementación](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html) que permita una implementación canario. 

 [https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/bluegreen-deployments.html): similar a la implementación canario, excepto que se implementa en paralelo una flota completa de la aplicación. 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 la implementación. Por lo general, todo el tráfico se conmuta a la vez, pero también puede utilizar fracciones del tráfico en cada versión para acelerar la adopción de la nueva versión mediante las capacidades de enrutamiento de DNS ponderado de Amazon Route 53. AWS CodeDeploy y [AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2020-05-18-ts-deploy.html) se pueden establecer con una configuración de implementación que permita una implementación azul/verde. 

![\[Diagrama en el que se muestra la implementación azul/verde con AWS Elastic Beanstalk y Amazon Route 53\]](http://docs.aws.amazon.com/es_es/wellarchitected/latest/framework/images/blue-green-deployment.png)


 **Detección de desviaciones** 

 La *desviación* se define como cualquier cambio que provoque que un recurso de infraestructura tenga un estado o una configuración diferentes a los esperados. 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
<a name="implementation-steps"></a>
+  No permita que se hagan modificaciones in situ de los recursos de la infraestructura en ejecución. 
  +  Puede usar [AWS Identity and Access Management (IAM)](https://aws.amazon.com/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 la implementación 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 de introducción a DevOps en AWS](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/automation.html), la automatización es la piedra angular de los servicios de AWS y es compatible internamente con todos los servicios, características y ofertas. 
  +  *[Preprocesar](https://docs.aws.amazon.com/whitepapers/latest/overview-deployment-options/prebaking-vs.-bootstrapping-amis.html)* la Imagen de máquina de Amazon (AMI) puede acelerar el tiempo de lanzamiento. El [Generador de imágenes de EC2](https://aws.amazon.com/image-builder/) es un servicio totalmente administrado de AWS que le ayuda a automatizar la creación, el mantenimiento, la validación, el uso compartido y la implementación de AMI personalizadas, seguras y actualizadas para Linux o Windows. 
  +  Estos son algunos de los servicios que permiten la automatización: 
    +  [AWS Elastic Beanstalk](https://aws.amazon.com/elasticbeanstalk/) es un servicio para implementar y escalar rápidamente aplicaciones web desarrolladas con Java, .NET, PHP, Node.js, Python, Ruby, Go y Docker en servidores conocidos como, por ejemplo, Apache, NGINX, Passenger e IIS. 
    +  [AWS Proton](https://aws.amazon.com/proton/) ayuda a los equipos de plataformas a conectar y coordinar todas las herramientas que sus equipos de desarrollo necesitan para el aprovisionamiento de infraestructuras, la implementación de código, la supervisión y las actualizaciones. AWS Proton permite una infraestructura automatizada, como el aprovisionamiento de código y la implementación de aplicaciones basadas en contenedores y sin servidor. 
  +  Usar la infraestructura como código facilita la automatización de su implementación y ayuda a lograr que sea inmutable. AWS proporciona servicios que permiten crear, implementar y mantener la infraestructura de forma programática, descriptiva y declarativa. 
    +  [AWS CloudFormation](https://aws.amazon.com/cloudformation/) ayuda a los desarrolladores a crear recursos de AWS de 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, se registran 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)](https://aws.amazon.com/serverless/sam/) es un marco de código abierto que se puede utilizar para crear aplicaciones sin servidor en AWS. AWS SAM se integra con otros servicios de AWS y es una extensión de CloudFormation. 
    +  [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/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 CloudFormation en segundo plano para aprovisionar recursos de una forma segura y repetible. 
    +  [API de control de nube de AWS](https://aws.amazon.com/cloudcontrolapi/) presenta un conjunto común de API de creación, lectura, actualización, eliminación y enumeración (CRUDL) que ayudan a los desarrolladores a administrar su infraestructura en la nube de forma sencilla y coherente. Las API comunes de la API de control en la nube permiten a los desarrolladores administrar de manera uniforme el ciclo de vida de los servicios de AWS y de terceros. 
+  Aplique patrones de implementación que tengan la mínima repercusión en los usuarios. 
  +  Implementaciones canario: 
    + [ Configuración de una implementación de un lanzamiento canario de API Gateway ](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
    + [ Create a pipeline with canary deployments for Amazon ECS using AWS App Mesh](https://aws.amazon.com/blogs/containers/create-a-pipeline-with-canary-deployments-for-amazon-ecs-using-aws-app-mesh/)
  +  Implementaciones azul/verde: en el [documento técnico sobre implementaciones azul/verde en AWS](https://docs.aws.amazon.com/whitepapers/latest/blue-green-deployments/welcome.html) se describen [técnicas de ejemplo](https://docs.aws.amazon.com/whitepapers/latest/blue-green-deployments/implementation-techniques.html) para implementar estrategias de implementación azul/verde. 
+  Detecte desviaciones de la configuración o el estado. Para obtener más detalles, consulte [Detectar cambios de configuración no administrados en pilas y recursos con detección de derivación](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html). 

## Recursos
<a name="resources"></a>

 **Prácticas recomendadas relacionadas:** 
+ [ REL08-BP05 Implementación de cambios con automatización ](https://docs.aws.amazon.com/wellarchitected/latest/reliability-pillar/rel_tracking_change_management_automated_changemgmt.html)

 **Documentos relacionados:** 
+ [ Automatización de implementaciones seguras y sin intervención ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/)
+ [ Leveraging AWS CloudFormation to create an immutable infrastructure at Nubank ](https://aws.amazon.com/blogs/mt/leveraging-immutable-infrastructure-nubank/)
+ [ Infraestructura como código ](https://docs.aws.amazon.com/whitepapers/latest/introduction-devops-aws/infrastructure-as-code.html)
+ [ Implementing an alarm to automatically detect drift in AWS CloudFormation stacks ](https://docs.aws.amazon.com/blogs/mt/implementing-an-alarm-to-automatically-detect-drift-in-aws-cloudformation-stacks/)

 **Videos relacionados:** 
+ [AWS re:Invent 2020: Reliability, consistency, and confidence through immutability ](https://www.youtube.com/watch?v=jUSYnRztttY)

# REL08-BP05 Implementación de cambios con automatización
<a name="rel_tracking_change_management_automated_changemgmt"></a>

 Las implementaciones y la aplicación de revisiones se automatizan para eliminar su impacto negativo. 

 Los cambios en los sistemas de producción son una de las mayores áreas de riesgo para muchas organizaciones. Consideramos que las implementaciones son un problema de primer orden que se debe resolver junto con los problemas empresariales que aborda nuestro software. Hoy en día, esto significa usar automatización en las operaciones siempre que resulte práctico, incluidas las pruebas y la implementación de cambios, la incorporación o eliminación de capacidad y la migración de datos. 

 **Resultado deseado:** incorpore la seguridad de la implementación automatizada en el proceso de lanzamiento con extensas pruebas de preproducción, reversiones automáticas e implementaciones de producción escalonadas. Esta automatización minimiza la posible repercusión en producción causada por implementaciones fallidas. Además, los desarrolladores ya no tienen que vigilar activamente las implementaciones en producción. 

 **Patrones comunes de uso no recomendados:** 
+  Los cambios se hacen de forma manual. 
+  Se salta los pasos de la automatización mediante flujos de trabajo de emergencia manuales. 
+  No sigue los planes y procesos establecidos en favor de plazos más rápidos. 
+  Lleva a cabo implementaciones de seguimiento rápidas sin dejar tiempo de incorporación. 

 **Beneficios de establecer esta práctica recomendada:** al utilizar la automatización para implementar todos los cambios, se elimina la posibilidad de que se produzcan errores humanos y se ofrece la posibilidad de llevar a cabo pruebas antes de cambiar de producción. Al llevar a cabo este proceso antes de la fase de producción, se verifica que los planes estén completos. Además, con la reversión automática al proceso de lanzamiento, se pueden identificar los problemas de producción y devolver la carga de trabajo a su estado operativo anterior. 

 **Nivel de riesgo expuesto si no se establece esta práctica recomendada:** medio 

## Guía para la implementación
<a name="implementation-guidance"></a>

 Automatice su canalización de implementación. Las canalizaciones de implementación le permiten invocar pruebas automatizadas, detectar anomalías y detener la canalización en un paso determinado antes de la implementación en producción o revertir automáticamente un cambio. Una parte integral de esto es la adopción de la cultura de [integración continua e implementación/entrega continua](https://en.wikipedia.org/wiki/CI/CD) (CI/CD), en la que la confirmación o el cambio de código pasan por varias etapas automatizadas, desde las etapas de creación y prueba hasta la implementación en entornos de producción. 

 Aunque la sabiduría convencional sugiere que mantenga a las personas informadas sobre los procedimientos operativos más difíciles, le recomendamos que automatice los procedimientos más difíciles por esa misma razón. 

### Pasos para la implementación
<a name="implementation-steps"></a>

 Siga estos pasos de automatización de las implementaciones para eliminar las operaciones manuales: 
+  **Configure un repositorio de código para almacenar su código de forma segura:** utilice un sistema de administración de código fuente alojado basado en una tecnología popular como Git para almacenar el código fuente y la configuración de infraestructura como código (IaC). 
+  **Configuración de un servicio de integración continua para compilar el código fuente, ejecución de pruebas y creación de artefactos de implementación:** para configurar un proyecto de compilación con este fin, consulte [Getting started with AWS CodeBuild using the console](https://docs.aws.amazon.com/codebuild/latest/userguide/getting-started.html). 
+  **Configuración de un servicio de implementación que automatice las implementaciones de aplicaciones y gestione la complejidad de las actualizaciones de las aplicaciones sin depender de implementaciones manuales propensas a errores:** [AWS CodeDeploy](https://aws.amazon.com/codedeploy/) automatiza las implementaciones de software en múltiples servicios de computación, como Amazon EC2, [AWS Fargate](https://aws.amazon.com/fargate/), [AWS Lambda](https://aws.amazon.com/lambda) y sus servidores en las instalaciones. Para configurar estos pasos, consulte [Getting started with CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/getting-started-codedeploy.html). 
+  **Configuración de un servicio de entrega continua que automatice las canalizaciones de lanzamiento para lograr actualizaciones de infraestructuras y aplicaciones más rápidas y fiables:** considere usar [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/getting-started-codepipeline.html) para automatizar las canalizaciones de lanzamiento. Para obtener más información, consulte [CodePipeline tutorials](https://docs.aws.amazon.com/codepipeline/latest/userguide/tutorials.html). 

## Recursos
<a name="resources"></a>

 **Prácticas recomendadas relacionadas:** 
+  [OPS05-BP04 Uso de sistemas de administración de compilación e implementación](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_build_mgmt_sys.html) 
+  [OPS05-BP10 Automatización completa de la integración y la implementación](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_dev_integ_auto_integ_deploy.html) 
+  [OPS06-BP02 Implementaciones de prueba](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_test_val_chg.html) 
+  [OPS06-BP04 Automatización de las pruebas y la reversión](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/ops_mit_deploy_risks_auto_testing_and_rollback.html) 

 **Documentos relacionados:** 
+  [Continuous Delivery of Nested AWS CloudFormation Stacks Using AWS CodePipeline](https://aws.amazon.com/blogs/devops/continuous-delivery-of-nested-aws-cloudformation-stacks-using-aws-codepipeline) 
+  [Socio de APN: socios que pueden ayudarle a crear soluciones de implementación automatizadas](https://aws.amazon.com/partners/find/results/?keyword=devops) 
+  [AWS Marketplace: productos que pueden usarse para automatizar sus implementaciones](https://aws.amazon.com/marketplace/search/results?searchTerms=DevOps) 
+  [Automate chat messages with webhooks.](https://docs.aws.amazon.com/chime/latest/ug/webhooks.html) 
+  [Amazon Builders' Library: Asegurar la seguridad en las restauraciones durante las implementaciones](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments) 
+  [Amazon Builders' Library: Evolución más rápida con la entrega continua](https://aws.amazon.com/builders-library/going-faster-with-continuous-delivery/) 
+  [Qué es AWS CodePipeline?](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) 
+  [What Is CodeDeploy?](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html) 
+  [AWS Systems Manager Patch Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-patch.html) 
+  [What is Amazon SES?](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome.html) 
+  [What is Amazon Simple Notification Service?](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) 

 **Videos relacionados:** 
+  [AWS Summit 2019: CI/CD on AWS](https://youtu.be/tQcF6SqWCoY) 