

# OPS 6. Como reduzir os riscos de implantação?
<a name="ops-06"></a>

 Adote abordagens que forneçam feedback rápido sobre a qualidade e alcancem recuperação rápida de alterações que não têm os resultados desejados. O uso dessas práticas reduz o impacto dos problemas introduzidos pela implantação de mudanças. 

**Topics**
+ [

# OPS06-BP01 Preparar-se para alterações malsucedidas
](ops_mit_deploy_risks_plan_for_unsucessful_changes.md)
+ [

# OPS06-BP02 Testar implantações
](ops_mit_deploy_risks_test_val_chg.md)
+ [

# OPS06-BP03 Utilizar estratégias de implantação seguras
](ops_mit_deploy_risks_deploy_mgmt_sys.md)
+ [

# OPS06-BP04 Automatizar os testes e a reversão
](ops_mit_deploy_risks_auto_testing_and_rollback.md)

# OPS06-BP01 Preparar-se para alterações malsucedidas
<a name="ops_mit_deploy_risks_plan_for_unsucessful_changes"></a>

Planeje reverter para um bom estado anterior ou realize reparos no ambiente de produção se a implantação causar um resultado indesejado. Ter uma política para estabelecer esse plano ajuda todas as equipes a desenvolver estratégias para se recuperar de alterações com falha. Alguns exemplos de estratégias são etapas de implantação e reversão, políticas de alteração, sinalizadores de atributos, isolamento de tráfego e mudança de tráfego. Uma única versão pode incluir várias alterações de componentes relacionadas. A estratégia deve fornecer a possibilidade de resistir ou se recuperar de uma falha de qualquer alteração de componente.

 **Resultado desejado:** você preparou um plano de recuperação detalhado para a alteração, caso ela não tenha êxito. Além disso, você reduziu o tamanho da sua versão para minimizar o impacto potencial em outros componentes da workload. Como resultado, você reduziu o impacto nos negócios ao diminuir o possível tempo de inatividade decorrente de uma alteração malsucedida e aumentou a flexibilidade e a eficiência dos tempos de recuperação. 

 **Práticas comuns que devem ser evitadas:** 
+  Você executou uma implantação e sua aplicação se tornou instável, mas parece haver usuários ativos no sistema. Você precisa decidir se deseja reverter a alteração e afetar os usuários ativos ou esperar para reverter a alteração sabendo que, mesmo assim, os usuários podem ser afetados. 
+  Depois de fazer uma alteração de rotina, os novos ambientes ficam acessíveis, mas uma de suas sub-redes se tornou inacessível. Você precisa decidir se deseja reverter tudo ou tentar corrigir a sub-rede inacessível. Enquanto você estiver fazendo essa determinação, a sub-rede permanecerá inacessível. 
+  Seus sistemas não são arquitetados de uma forma que permita que sejam atualizados com versões menores. Como resultado, você tem dificuldade em reverter essas alterações em massa durante uma implantação com falha. 
+  Você não usa infraestrutura como código (IaC) e atualizações manuais foram feitas em sua infraestrutura que resultaram em uma configuração indesejada. Você não consegue rastrear e reverter com eficácia as alterações manuais. 
+  Como você não mediu o aumento da frequência das implantações, sua equipe não é incentivada a reduzir o tamanho das mudanças e melhorar seus planos de reversão para cada uma delas, gerando mais riscos e maiores taxas de falha. 
+  Você não mede a duração total de uma interrupção causada por alterações malsucedidas. A equipe não consegue priorizar e melhorar a eficácia do processo de implantação e do plano de recuperação. 

 **Benefícios de implementar esta prática recomendada:** ter um plano para se recuperar de mudanças malsucedidas minimiza o tempo médio de recuperação (MTTR) e reduz o impacto nos negócios. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Alto 

## Orientação para implementação
<a name="implementation-guidance"></a>

 A adoção de uma política e prática documentadas e consistentes por parte das equipes de lançamento permitem que a organização planeje o que deve ocorrer se houver mudanças malsucedidas. A política deve permitir a correção em circunstâncias específicas. Seja qual for a situação, um plano de correção antecipada ou reversão deve ser bem documentado e testado antes da implantação na produção em tempo real, a fim de que o tempo necessário para reverter uma alteração seja minimizado. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  Documente as políticas que exigem que as equipes tenham planos efetivos para reverter as mudanças dentro de um período especificado. 

   1.  As políticas devem especificar quando uma situação de correção antecipada é permitida. 

   1.  Exija que um plano de reversão documentado seja acessível a todos os envolvidos. 

   1.  Especifique os requisitos de reversão (por exemplo, quando for constatado que foram implantadas alterações não autorizadas). 

1.  Analise o nível de impacto de todas as mudanças relacionadas a cada componente de uma workload. 

   1.  Permita que alterações repetíveis sejam padronizadas, modeladas e pré-autorizadas se seguirem um fluxo de trabalho consistente que imponha políticas de mudança. 

   1.  Reduza o impacto potencial de qualquer alteração diminuindo o tamanho dela para que a recuperação leve menos tempo e cause um impacto menor nos negócios. 

   1.  Garanta que os procedimentos de reversão revertam o código para um bom estado conhecido a fim de evitar incidentes sempre que possível. 

1.  Integre ferramentas e fluxos de trabalho para aplicar suas políticas de forma programática. 

1.  Torne os dados sobre as alterações visíveis para outros proprietários da workload a fim de melhorar a velocidade do diagnóstico de qualquer alteração malsucedida que não possa ser revertida. 

   1.  Avalie o sucesso dessa prática usando dados de mudança visíveis e identifique melhorias iterativas. 

1.  Use ferramentas de monitoramento para verificar o sucesso ou a falha de uma implantação a fim de acelerar a tomada de decisões sobre a reversão. 

1.  Meça a duração da interrupção durante uma alteração malsucedida para melhorar continuamente seus planos de recuperação. 

 **Nível de esforço do plano de implementação:** Médio 

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

 **Práticas recomendadas relacionadas:** 
+  [OPS06-BP04 Automatizar os testes e a reversão](ops_mit_deploy_risks_auto_testing_and_rollback.md) 

 **Documentos relacionados:** 
+ [AWS Builders Library \$1 Garantir a segurança das reversões durante implantações](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments/)
+ [Whitepaper da AWS \$1 Gerenciamento de alterações na nuvem](https://docs.aws.amazon.com/whitepapers/latest/change-management-in-the-cloud/change-management-in-the-cloud.html)

 **Vídeos relacionados:** 
+ [re:Invent 2019 \$1 A abordagem da Amazon a implantações de alta disponibilidade](https://aws.amazon.com/builders-library/amazon-approach-to-high-availability-deployment/)

# OPS06-BP02 Testar implantações
<a name="ops_mit_deploy_risks_test_val_chg"></a>

 Teste os procedimentos de lançamento na pré-produção usando a mesma configuração de implantação, controles de segurança, etapas e procedimentos da produção. Valide se todas as etapas implantadas foram concluídas conforme o esperado, como inspecionar arquivos, configurações e serviços. Teste mais detalhadamente todas as alterações com testes funcionais, de integração e de carga, além de qualquer monitoramento, como verificações de integridade. Ao fazer esses testes, você pode identificar problemas de implantação com antecedência, podendo planejá-los e mitigá-los antes da produção. 

 Você pode criar ambientes paralelos temporários para testar cada alteração. Automatize a implantação dos ambientes de teste usando a infraestrutura como código (IaC) para ajudar a reduzir a quantidade de trabalho envolvido e garantir estabilidade, consistência e entrega mais rápida de atributos. 

 **Resultado desejado:** a organização adota uma cultura de desenvolvimento orientada a testes que inclui testes de implantações. Isso garante que as equipes se concentrem em oferecer valor empresarial em vez de gerenciar lançamentos. As equipes são engajadas desde o início após a identificação dos riscos de implantação para determinar o curso apropriado da mitigação. 

 **Práticas comuns que devem ser evitadas:** 
+  Durante as versões de produção, implantações não testadas causam problemas frequentes que exigem soluções e encaminhamento. 
+  Sua versão contém infraestrutura como código (IaC) que atualiza os recursos existentes. Você não tem certeza se a IaC será executada com êxito ou causará impacto nos recursos. 
+  Você implanta um novo recurso na aplicação. Ele não funciona conforme o esperado e não há visibilidade até que o problema seja relatado pelos usuários afetados. 
+  Você atualiza seus certificados. Você instala acidentalmente os certificados nos componentes errados, o que não é detectado e afeta os visitantes do site porque não é possível estabelecer uma conexão segura. 

 **Benefícios de implementar esta prática recomendada:** testes extensivos na pré-produção dos procedimentos de implantação, considerando-se que as mudanças introduzidas por eles minimizam o impacto potencial na produção causado pelas etapas de implantação. Isso aumenta a confiança durante o lançamento para produção e minimiza o suporte operacional sem diminuir a velocidade das alterações que estão sendo entregues. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Alto 

## Orientação para implementação
<a name="implementation-guidance"></a>

 Testar seu processo de implantação é tão importante quanto testar as alterações resultantes da implantação. Isso poderá ser realizado testando-se suas etapas de implantação em um ambiente de pré-produção que se assemelhe o máximo possível à produção. Problemas comuns, como etapas de implantação incompletas ou incorretas, ou configurações incorretas, podem ser detectados como resultado antes da produção. Além disso, você pode testar suas etapas de recuperação. 

 **Exemplo de cliente** 

 Como parte do pipeline de integração e entrega contínuas (CI/CD), a AnyCompany Retail executa as etapas definidas necessárias para lançar atualizações de infraestrutura e software para seus clientes em um ambiente semelhante ao de produção. O pipeline é composto por pré-verificações para detectar desvios (detecção de alterações nos recursos executados fora da IaC) nos recursos antes da implantação, bem como validar as ações que a IaC realiza após seu início. Ele valida as etapas de implantação, como verificar se determinados arquivos e configurações estão em vigor e se os serviços estão em execução e respondendo corretamente às verificações de integridade no host local antes de serem registrados novamente no balanceador de carga. Além disso, todas as alterações sinalizam vários testes automatizados, como testes funcionais e de segurança, regressão, integração e carga. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  Execute verificações de pré-instalação para espelhar o ambiente de pré-produção na produção. 

   1.  Use a [detecção de desvios](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-stack-drift.html) para detectar quando os recursos foram alterados fora do CloudFormation. 

   1.  Use [conjuntos de alterações](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-updating-stacks-changesets.html) para validar se a intenção da atualização da pilha corresponde às ações que o CloudFormation realiza quando o conjunto de alterações é iniciado. 

1.  Isso aciona uma etapa de aprovação manual ao [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/approvals.html) para autorizar a implantação no ambiente de pré-produção. 

1.  Use configurações de implantação, como arquivos [AppSpec do AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/application-specification-files.html), para definir as etapas de implantação e validação. 

1.  Quando aplicável, [integre o AWS CodeDeploy a outros serviços da AWS](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html) ou [integre o AWS CodeDeploy a produtos e serviços de parceiros](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html). 

1.  [Monitore implantações](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) usando o Amazon CloudWatch, o AWS CloudTrail e as notificações de eventos do Amazon SNS. 

1.  Execute testes automatizados pós-implantação, incluindo testes funcionais, de segurança, regressão, integração e carga. 

1.  [Solucione](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html) problemas de implantação. 

1.  A validação bem-sucedida das etapas anteriores deve iniciar um fluxo de trabalho de aprovação manual para autorizar a implantação na produção. 

 **Nível de esforço do plano de implementação:** Alto 

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

 **Práticas recomendadas relacionadas:** 
+  [OPS05-BP02 Testar e validar alterações](ops_dev_integ_test_val_chg.md) 

 **Documentos relacionados:** 
+ [AWS Builders' Library \$1 Automatizar implantações autônomas e seguras \$1 Testar implantações ](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/#Test_deployments_in_pre-production_environments)
+ [Whitepaper da AWS \$1 Praticar a integração e entrega contínuas na AWS](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/testing-stages-in-continuous-integration-and-continuous-delivery.html)
+ [A história da Apollo: o mecanismo de implantação da Amazon](https://www.allthingsdistributed.com/2014/11/apollo-amazon-deployment-engine.html)
+  [Como testar e depurar o AWS CodeDeploy localmente antes de enviar seu código](https://aws.amazon.com/blogs/devops/how-to-test-and-debug-aws-codedeploy-locally-before-you-ship-your-code/) 
+ [Integrar testes de conectividade de rede com implantação da infraestrutura](https://aws.amazon.com/blogs/networking-and-content-delivery/integrating-network-connectivity-testing-with-infrastructure-deployment/)

 **Vídeos relacionados:** 
+ [re:Invent 2020 \$1 Testar software e sistemas na Amazon](https://www.youtube.com/watch?v=o1sc3cK9bMU)

 **Exemplos relacionados:** 
+ [Tutorial \$1 Implantar um serviço do Amazon ECS com um teste de validação](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorial-ecs-deployment-with-hooks.html)

# OPS06-BP03 Utilizar estratégias de implantação seguras
<a name="ops_mit_deploy_risks_deploy_mgmt_sys"></a>

 Implantações seguras de produção controlam o fluxo de mudanças benéficas com o objetivo de minimizar qualquer impacto percebido dessas alterações para os clientes. Os controles de segurança fornecem mecanismos de inspeção para validar os resultados desejados e limitar o escopo do impacto dos defeitos introduzidos pelas alterações ou das falhas de implantação. As implementações seguras podem incluir estratégias como sinalizadores de atributos e implantações one-box, contínuas (versões canário), imutáveis, de divisão de tráfego e azuis/verdes. 

 **Resultado desejado:** sua organização usa um sistema de integração e entrega contínuas (CI/CD) que fornece recursos para automatizar implementações seguras. As equipes devem usar estratégias apropriadas de implantação seguras. 

 **Práticas comuns que devem ser evitadas:** 
+  Você implanta uma alteração malsucedida em toda a produção de uma só vez. Como resultado, todos os clientes são afetados simultaneamente. 
+  Um defeito introduzido em uma implantação simultânea em todos os sistemas requer um lançamento de emergência. A correção para todos os clientes leva vários dias. 
+  O gerenciamento da versão de produção requer planejamento e participação de várias equipes. Isso restringe sua capacidade de atualizar atributos com frequência para seus clientes. 
+  Você executa uma implantação mutável modificando os sistemas existentes. Depois de descobrir que a alteração não foi bem-sucedida, você será forçado a modificar os sistemas novamente para restaurar a versão antiga, aumentando o seu tempo de recuperação. 

 **Benefícios de implementar esta prática recomendada:** as implantações automatizadas equilibram a velocidade das implementações com a entrega consistente de mudanças benéficas para os clientes. Limitar o impacto evita falhas de implantação dispendiosas e maximiza a capacidade das equipes de responder às falhas de forma eficiente. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

## Orientação para implementação
<a name="implementation-guidance"></a>

 Falhas na entrega contínua podem levar à redução da disponibilidade do serviço e a uma experiência ruim para o cliente. Para maximizar a taxa de implantações bem-sucedidas, implemente controles de segurança no processo de lançamento de ponta a ponta para minimizar os erros de implantação e eliminar as falhas. 

 **Exemplo de cliente** 

 A AnyCompany Retail tem a missão de alcançar implantações com tempo de inatividade entre mínimo e zero, ou seja, sem impacto perceptível para seus usuários durante as implantações. Para fazer isso, a empresa estabeleceu padrões de implantação (consulte o diagrama de fluxo de trabalho a seguir), como implantações azuis/verdes e contínuas. Todas as equipes adotam um ou mais desses padrões no pipeline de CI/CD. 


| Fluxo de trabalho do CodeDeploy para Amazon EC2 | Fluxo de trabalho do CodeDeploy para Amazon ECS | Fluxo de trabalho do CodeDeploy para Lambda | 
| --- | --- | --- | 
|  ![\[Fluxo do processo de implantação para Amazon EC2\]](http://docs.aws.amazon.com/pt_br/wellarchitected/latest/framework/images/deployment-process-ec2.png)  |  ![\[Fluxo do processo de implantação para Amazon ECZ\]](http://docs.aws.amazon.com/pt_br/wellarchitected/latest/framework/images/deployment-process-ecs.png)  |  ![\[Fluxo do processo de implantação para Lambda\]](http://docs.aws.amazon.com/pt_br/wellarchitected/latest/framework/images/deployment-process-lambda.png)  | 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  Use um fluxo de trabalho de aprovação para iniciar a sequência das etapas de implantação na promoção para implantação. 

1.  Use um sistema de implantação automatizado, como o [AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html). As as [opções de implantação do AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-steps.html) incluem implantações no local para EC2/on-premises e implantações azuis/verdes para EC2/on-premises, AWS Lambda e Amazon ECS (consulte o diagrama do fluxo de trabalho anterior). 

   1.  Quando aplicável, [integre o AWS CodeDeploy a outros serviços da AWS](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-aws.html) ou [integre o AWS CodeDeploy a produtos e serviços de parceiros](https://docs.aws.amazon.com/codedeploy/latest/userguide/integrations-partners.html). 

1.  Use implantações azuis/verdes para bancos de dados como [Amazon Aurora](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments.html) e [Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/blue-green-deployments.html). 

1.  [Monitore implantações](https://docs.aws.amazon.com/codedeploy/latest/userguide/monitoring.html) usando o Amazon CloudWatch, o AWS CloudTrail e as notificações de eventos do Amazon Simple Notiﬁcation Service (Amazon SNS). 

1.  Realize testes automatizados pós-implantação, incluindo testes funcionais, de segurança, regressão, integração e testes de carga. 

1.  [Solucione](https://docs.aws.amazon.com/codedeploy/latest/userguide/troubleshooting.html) problemas de implantação. 

 **Nível de esforço do plano de implementação:** Médio 

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

 **Práticas recomendadas relacionadas:** 
+  [OPS05-BP02 Testar e validar alterações](ops_dev_integ_test_val_chg.md) 
+  [OPS05-BP09 Fazer alterações frequentes, pequenas e reversíveis](ops_dev_integ_freq_sm_rev_chg.md) 
+  [OPS05-BP10 Automatizar totalmente a integração e a implantação](ops_dev_integ_auto_integ_deploy.md) 

 **Documentos relacionados:** 
+ [AWS Builders' Library \$1 Automatizar implantações seguras e sem intervenção manual \$1 Implantações de produção](https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments/?did=ba_card&trk=ba_card#Production_deployments)
+ [AWS Builders Library \$1 Meu pipeline de CI/CD é meu capitão de lançamentos \$1 Lançamentos de produção seguros e automáticos](https://aws.amazon.com//builders-library/cicd-pipeline/#Safe.2C_automatic_production_releases)
+ [Whitepaper da AWS \$1 Praticar integração e entrega contínuas na AWS \$1 Métodos de implantação](https://docs.aws.amazon.com/whitepapers/latest/practicing-continuous-integration-continuous-delivery/deployment-methods.html)
+ [AWS CodeDeploy Guia do usuário do](https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html)
+ [Trabalhar com configurações de implantação no AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployment-configurations.html)
+ [Configurar uma implantação de versão canário do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/canary-release.html)
+ [Tipos de implantação do Amazon ECS](https://docs.aws.amazon.com/)
+ [Implantações azuis/verdes totalmente gerenciadas no Amazon Aurora e no Amazon RDS](https://aws.amazon.com/blogs/aws/new-fully-managed-blue-green-deployments-in-amazon-aurora-and-amazon-rds/)
+ [Implantações azuis/verdes com o AWS Elastic Beanstalk](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html)

 **Vídeos relacionados:** 
+ [re:Invent 2020 \$1 Sem intervenção manual: como automatizar os pipelines de entrega contínua na Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \$1 A abordagem da Amazon a implantações de alta disponibilidade](https://www.youtube.com/watch?v=bCgD2bX1LI4)

 **Exemplos relacionados:** 
+ [Testar uma implantação azul/verde de exemplo no AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/applications-create-blue-green.html)
+ [ Workshop \$1 Building CI/CD pipelines for Lambda canary deployments using AWS CDK](https://catalog.workshops.aws/cdk-cicd-for-lambda-canary-deployment/en-US) 
+ [ Workshop \$1 Building your first DevOps Blue/Green pipeline with Amazon ECS ](https://catalog.us-east-1.prod.workshops.aws/workshops/4b59b9fb-48b6-461c-9377-907b2e33c9df/en-US)
+ [ Workshop \$1 Building your first DevOps Blue/Green pipeline with Amazon EKS ](https://catalog.us-east-1.prod.workshops.aws/workshops/4eab6682-09b2-43e5-93d4-1f58fd6cff6e/en-US)
+ [ Workshop \$1 EKS GitOps with ArgoCD ](https://catalog.workshops.aws/eksgitops-argocd-githubactions)
+ [ Workshop \$1 CI/CD on AWS Workshop ](https://catalog.workshops.aws/cicdonaws/en-US)
+ [Implementar CI/CD entre contas com AWS SAM para funções do Lambda baseadas em contêineres ](https://aws.amazon.com/blogs/compute/implementing-cross-account-cicd-with-aws-sam-for-container-based-lambda/)

# OPS06-BP04 Automatizar os testes e a reversão
<a name="ops_mit_deploy_risks_auto_testing_and_rollback"></a>

 Para aumentar a velocidade, a confiabilidade e a confiança do seu processo de implantação, tenha uma estratégia para testes automatizados e recursos de reversão em ambientes de pré-produção e produção. Automatize os testes ao implantar na produção para simular interações entre humanos e sistemas que verifiquem as alterações que estão sendo implantadas. Automatize a reversão para voltar rapidamente a um estado anterior em boas condições. A reversão deve ser iniciada automaticamente em condições predefinidas, como quando o resultado desejado da alteração não é alcançado ou quando o teste automatizado falha. A automação dessas duas atividades melhora a taxa de sucesso das implantações, minimiza o tempo de recuperação e reduz o impacto potencial nos negócios. 

 **Resultado desejado:** os testes automatizados e as estratégias de reversão são integrados ao pipeline de integração e entrega contínuas (CI/CD). O monitoramento é capaz de validar seus critérios de sucesso e iniciar a reversão automática em caso de falha. Isso minimiza qualquer impacto para usuários finais e clientes. Por exemplo, quando todos os resultados do teste são satisfatórios, você promove seu código no ambiente de produção em que o teste de regressão automatizado é iniciado, utilizando os mesmos casos de teste. Se os resultados do teste de regressão não corresponderem às expectativas, a reversão automática será iniciada no fluxo de trabalho do pipeline. 

 **Práticas comuns que devem ser evitadas:** 
+  Seus sistemas não são arquitetados de uma forma que permita que sejam atualizados com versões menores. Como resultado, você tem dificuldade em reverter essas alterações em massa durante uma implantação com falha. 
+  O processo de implantação consiste em uma série de etapas manuais. Depois de implantar as alterações na workload, você inicia os testes pós-implantação. Após o teste, você percebe que a workload está inoperante e os clientes estão desconectados. Em seguida, você começa a reverter para a versão anterior. Todas essas etapas manuais atrasam a recuperação geral do sistema e causam um impacto prolongado para os clientes. 
+  Você dedicou tempo para desenvolver casos de teste automatizados para funcionalidades que não são usadas com frequência na aplicação, minimizando o retorno sobre o investimento no recurso de teste automatizado. 
+  Sua versão é composta de atualizações de aplicações, infraestrutura, patches e configuração que são independentes umas das outras. No entanto, você tem um único pipeline de CI/CD que fornece todas as alterações de uma só vez. Uma falha em um componente força você a reverter todas as alterações, tornando a reversão complexa e ineficiente. 
+  A equipe conclui o trabalho de codificação no primeiro sprint e inicia o trabalho no segundo sprint, mas seu plano não incluiu testes até o terceiro sprint. Como resultado, os testes automatizados revelaram defeitos do primeiro sprint que precisavam ser resolvidos antes que o teste dos resultados do segundo sprint pudesse ser iniciado, adiando todo o lançamento e desvalorizando seus testes automatizados. 
+  Seus casos de teste de regressão automatizados para a versão de produção estão completos, mas você não está monitorando a integridade da workload. Como você não tem visibilidade sobre se o serviço foi reiniciado, você não tem certeza se a reversão é necessária ou se ela já ocorreu. 

 **Benefícios de implementar esta prática recomendada:** o teste automatizado aumenta a transparência do processo de teste e a capacidade de abranger mais atributos em um período mais curto. Ao testar e validar as mudanças na produção, é possível identificar problemas imediatamente. A melhoria na consistência com ferramentas de teste automatizadas permite uma melhor detecção de defeitos. Ao reverter automaticamente para a versão anterior, o impacto sobre seus clientes é minimizado. A reversão automatizada acaba inspirando mais confiança em seus recursos de implantação ao reduzir o impacto nos negócios. No geral, esses recursos reduzem o tempo de entrega e, ao mesmo tempo, garantem a qualidade. 

 **Nível de risco exposto se esta prática recomendada não for estabelecida:** Médio 

## Orientação para implementação
<a name="implementation-guidance"></a>

 Automatize os testes dos ambientes implantados para confirmar os resultados desejados mais rapidamente. Automatize a reversão para um bom estado anterior conhecido quando os resultados predefinidos não forem alcançados, para minimizar o tempo de recuperação e reduzir os erros causados por processos manuais. Integre ferramentas de teste com seu fluxo de trabalho de pipeline para testar e minimizar as entradas manuais de forma consistente. Priorize a automação de casos de teste, como aqueles que mitigam os maiores riscos e precisam ser testados com frequência a cada alteração. Além disso, automatize a reversão com base em condições específicas predefinidas no plano de teste. 

### Etapas de implementação
<a name="implementation-steps"></a>

1.  Estabeleça um ciclo de vida de teste para o ciclo de vida de desenvolvimento que defina cada estágio do processo de teste, desde o planejamento dos requisitos até o desenvolvimento do caso de teste, a configuração da ferramenta, o teste automatizado e o encerramento do caso de teste. 

   1.  Crie uma abordagem de teste específica para workloads com base em sua estratégia geral de teste. 

   1.  Considere uma estratégia de teste contínuo, quando apropriado, durante o ciclo de vida do desenvolvimento. 

1.  Selecione ferramentas automatizadas para testes e reversões com base em seus requisitos de negócios e investimentos em pipeline. 

1.  Decida quais casos de teste você deseja automatizar e quais deverão ser executados manualmente. Eles podem ser definidos com base na prioridade do valor comercial do atributo que está sendo testado. Alinhe todos os membros da equipe a esse plano e verifique a responsabilidade pela realização de testes manuais. 

   1.  Aplique recursos de teste automatizados a casos de teste específicos que façam sentido para automação, como casos repetíveis ou executados com frequência, aqueles que exigem tarefas repetitivas ou aqueles que são necessários em várias configurações. 

   1.  Defina scripts de automação de testes, bem como os critérios de sucesso na ferramenta de automação, para que a automação contínua do fluxo de trabalho possa ser iniciada quando casos específicos falharem. 

   1.  Defina critérios de falha específicos para a reversão automatizada. 

1.  Priorize a automação de testes para gerar resultados consistentes com o desenvolvimento completo de casos de teste em que a complexidade e a interação humana têm um risco maior de falha. 

1.  Integre as ferramentas automatizadas de teste e reversão no pipeline de CI/CD. 

   1.  Desenvolva critérios claros de sucesso para as alterações. 

   1.  Monitore e observe para detectar esses critérios e reverter automaticamente as alterações quando critérios específicos de reversão forem atendidos. 

1.  Execute diferentes tipos de teste de produção automatizados, como: 

   1.  Teste A/B para mostrar resultados em comparação com a versão atual entre dois grupos de teste de usuários. 

   1.  Teste canário, que permite implantar a alteração em um subconjunto de usuários antes de lançá-la para todos. 

   1.  Teste de sinalização de atributos, que permite que a sinalização de um único atributo da nova versão seja ativada e desativada de fora da aplicação para que cada novo atributo possa ser validado individualmente. 

   1.  Teste de regressão para verificar novas funcionalidades com componentes inter-relacionados existentes. 

1.  Monitore os aspectos operacionais da aplicação, das transações e das interações com outras aplicações e componentes. Desenvolva relatórios para mostrar o sucesso das alterações por workload e identificar quais partes da automação e do fluxo de trabalho podem ser otimizadas ainda mais. 

   1.  Desenvolva relatórios de resultados de testes que ajudem você a tomar decisões rápidas sobre se os procedimentos de reversão devem ou não ser invocados. 

   1.  Implemente uma estratégia que permita a reversão automatizada com base em condições de falha predefinidas que resultam de um ou mais de seus métodos de teste. 

1.  Desenvolva seus casos de teste automatizados para permitir a reutilização em futuras alterações repetíveis. 

 **Nível de esforço do plano de implementação:** Médio 

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

 **Práticas recomendadas relacionadas:** 
+  [OPS06-BP01 Preparar-se para alterações malsucedidas](ops_mit_deploy_risks_plan_for_unsucessful_changes.md) 
+  [OPS06-BP02 Testar implantações](ops_mit_deploy_risks_test_val_chg.md) 

 **Documentos relacionados:** 
+ [AWS Builders Library \$1 Garantir a segurança das reversões durante implantações](https://aws.amazon.com/builders-library/ensuring-rollback-safety-during-deployments/)
+  [Reimplantar e reverter uma implantação com a AWS CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/deployments-rollback-and-redeploy.html) 
+ [Oito práticas recomendadas para automatizar suas implantações com o AWS CloudFormation](https://aws.amazon.com/blogs/infrastructure-and-automation/best-practices-automating-deployments-with-aws-cloudformation/)

 **Exemplos relacionados:** 
+ [Teste de interface do usuário sem servidor usando Selenium, AWS Lambda, AWS Fargate e as Ferramentas de desenvolvedor da AWS](https://aws.amazon.com/blogs/devops/using-aws-codepipeline-aws-codebuild-and-aws-lambda-for-serverless-automated-ui-testing/)

 **Vídeos relacionados:** 
+ [re:Invent 2020 \$1 Sem intervenção manual: como automatizar os pipelines de entrega contínua na Amazon](https://www.youtube.com/watch?v=ngnMj1zbMPY)
+ [re:Invent 2019 \$1 A abordagem da Amazon a implantações de alta disponibilidade](https://www.youtube.com/watch?v=bCgD2bX1LI4)