REL 12: Como testar a confiabilidade?
Depois de projetar sua carga de trabalho para resiliência à pressão da produção, o teste é a única maneira de garantir que ela opere conforme projetado e com a resiliência esperada.
Recursos
 Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
 Injecting Chaos to Amazon EC2 using AWS Systems Manager
 Resilience Engineering: Learning to Embrace Failure
 AWS re:Invent 2019: Improving resiliency with chaos engineering (DOP309-R1)
 Continuous Delivery and Continuous Integration
 Using Canaries (Amazon CloudWatch Synthetics)
 Use CodePipeline with AWS CodeBuild to test code and run builds
 Automate your operational playbooks with AWS Systems Manager
 Principles of Chaos Engineering
 Apache JMeter
 Casey Rosenthal, Lorin Hochstein, Aaron Blohowiak, Nora Jones, Ali Basiri. “Chaos
               Engineering” (August 2017)
 AWS Marketplace: products that can be used for continuous integration
 APN Partner: partners that can help with implementation of a continuous integration
               pipeline
Melhores práticas:
- 
               Usar playbooks para investigar falhas: Faça a documentação do processo de investigação em playbooks para permitir respostas consistentes e rápidas em cenários de falha. Os playbooks são as etapas predefinidas executadas para identificar os fatores que contribuem para um cenário de falha. Os resultados de qualquer etapa do processo são usados para determinar as próximas etapas a serem seguidas até que o problema seja identificado ou encaminhado. 
- 
               Executar análise pós-incidente: Analise os eventos que afetam o cliente e identifique os fatores contribuintes e os itens de ação preventiva. Use essas informações para desenvolver mitigações para limitar ou evitar recorrência. Desenvolva procedimentos para respostas rápidas e eficazes. Comunique os fatores contribuintes e as ações corretivas conforme apropriado, de acordo com o público-alvo. Tenha um método para comunicar essas causas a outras pessoas, conforme necessário. 
- 
               Teste os requisitos funcionais: Esse procedimento inclui testes de unidade e de integração que validam a funcionalidade necessária. 
- 
               Teste os requisitos de escalabilidade e performance: Esse procedimento inclui o teste de carga para validar se a carga de trabalho atende aos requisitos de escalabilidade e performance. 
- 
               Teste a resiliência por meio da engenharia do caos: Execute testes que injetam falhas regularmente em ambientes de pré-produção e de produção. Especule como sua carga de trabalho reagirá à falha, depois compare sua hipótese com os resultados do teste e reafirme se elas não corresponderem. Certifique-se de que os testes de produção não afetem os usuários. 
- 
               Conduza dias de jogo regularmente: Use os dias de jogo para praticar regularmente seus procedimentos de falha o mais próximo possível da produção (inclusive em ambientes de produção) com as pessoas que estarão envolvidas nos cenários de falha reais. Os dias de jogo aplicam medidas para garantir que os testes de produção não afetem os usuários. 
Plano de melhoria
Usar playbooks para investigar falhas
- Implementar playbooks como código:  Execute suas operações como código ao criar scripts de seus playbooks para garantir
                     a consistência e reduzir os erros causados por processos manuais. Os playbooks podem
                     ser compostos por vários scripts representando as diferentes etapas que podem ser
                     necessárias para identificar os fatores que contribuem para um problema. As atividades
                     do runbook podem ser acionadas ou executadas como parte das atividades do playbook,
                     ou podem solicitar a execução de um playbook em resposta a eventos identificados.
                     
 Automate your operational playbooks with AWS Systems Manager
 AWS Systems Manager Run Command
 AWS Systems Manager Automation
 What is AWS Lambda?
 What Is Amazon EventBridge?
 Using Amazon CloudWatch Alarms
Executar análise pós-incidente
- Garantir que os fatores contribuintes sejam justos e isentos de acusações.
- Se você não documentar os problemas, não poderá corrigi-los.
                     - Garanta que a análise pós-incidente seja isenta de acusações para que você possa ser imparcial em relação às ações corretivas propostas e promover uma autoavaliação e uma colaboração justas às equipes de aplicativos.
 
What is log analytics?
Teste os requisitos funcionais
Use CodePipeline with AWS CodeBuild to test code and run builds
AWS CodePipeline Adds Support for Unit and Custom Integration Testing with AWS CodeBuild
Continuous Delivery and Continuous Integration
Using Canaries (Amazon CloudWatch Synthetics)
Software test automation
Teste os requisitos de escalabilidade e performance
Distributed Load Testing on AWS: simulate thousands of connected users
Apache JMeter
- Implante seu aplicativo em um ambiente idêntico ao seu ambiente de produção e execute
                     um teste de carga.
                     - Use os conceitos de infraestrutura como código para criar um ambiente que seja o mais semelhante possível ao seu ambiente de produção.
 
Teste a resiliência por meio da engenharia do caos
Principles of Chaos Engineering
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager
AWS re:Invent 2019: Improving resiliency with chaos engineering (DOP309-R1)
- Para injetar falhas em sua carga de trabalho, use o software de código aberto
 The Chaos ToolKit
 Shopify Toxiproxy
 Netflix Chaos Monkey
- Se preferir, use um software comercial disponível no AWS Marketplace
 Gremlin
- Ou ainda, crie seu próprio código de injeção de falha
 Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
 Injecting Chaos to Amazon EC2 using AWS Systems Manager
- Teste a falha de todos os componentes e as dependências externas.
                     - Simule condições capazes de produzir reduções da carga por meio de extensões para proxies comuns para introduzir latência e mensagens descartadas. Você também pode criar suas próprias implementações para criar condições de redução da carga.
 
Conduza dias de jogo regularmente
- Execute os testes de carga ou de performance e, em seguida, execute a injeção de falha.
- Procure por anomalias nos runbooks e oportunidades de praticar os playbooks.
                     - Se você se desviar dos runbooks, refine-os ou corrija o comportamento. Se você praticar o playbook, identifique o runbook que deveria ter sido usado ou crie um novo.
 
