

# 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)