REL 12: Comment tester la fiabilité ?
Une fois que vous avez conçu votre charge de travail pour qu'elle soit résiliente aux sollicitations de la production, les tests sont le seul moyen de s'assurer qu'elle fonctionne comme prévu et d'obtenir la résilience voulue.
Ressources
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
Bonnes pratiques:
-
Utilisation de manuels pour enquêter sur les causes des défaillances: Consignez le processus d'enquête dans des manuels afin de faciliter l'application de réponses cohérentes et rapides face aux scénarios de défaillance qui ne sont pas bien compris. Les manuels sont les étapes prédéfinies suivies pour identifier les facteurs adjuvants à un scénario défaillance. Les résultats d'une étape du processus sont utilisés pour déterminer les prochaines étapes à suivre jusqu'à l'identification ou la remontée du problème.
-
Exécution d'une analyse post-incident: Passez en revue les événements ayant un impact sur le client et identifiez les facteurs adjuvants et les mesures préventives. Utilisez ces informations pour prendre des mesures d'atténuation afin de limiter ou de remédier aux problèmes. Développez des procédures à suivre pour répondre rapidement et efficacement. Publiez, le cas échéant, les facteurs adjuvants et les mesures correctives adaptées au public ciblé. Vous devez disposer d'une méthode pour communiquer ces causes à d'autres si nécessaire.
-
Exigences fonctionnelles de test: Il s'agit, entre autres, des tests unitaires et des tests d'intégration qui valident les fonctionnalités requises.
-
Test des exigences de mise à l'échelle et de performance: Il s'agit, entre autres, des tests de charge pour vérifier que la charge de travail répond aux exigences de mise à l'échelle et de performance.
-
Test la résilience à l'aide de l'ingénierie du chaos: Exécutez des tests qui injectent régulièrement des défaillances dans des environnements de préproduction et de production. Formulez une hypothèse sur la façon dont votre charge de travail réagira à la défaillance, puis comparez votre hypothèse aux résultats des tests. Répétez l'opération en cas d'absence de correspondance. Assurez-vous que les tests de production n'ont pas d'impact sur les utilisateurs.
-
Organisation régulière de jeux de rôle: Profitez des journées de jeu pour exercer régulièrement vos procédures de défaillance aussi près que possible de la production (y compris dans les environnements de production) avec les personnes qui seront impliquées dans les scénarios de défaillance réels. Les journées de jeu appliquent des mesures pour s'assurer que les tests de production n'affectent pas les utilisateurs.
Plan d'amélioration
Utilisation de manuels pour enquêter sur les causes des défaillances
- Mettre en œuvre des playbooks en tant que code: Effectuez vos opérations en tant que code en scriptant vos manuels afin de garantir
la cohérence et de limiter les erreurs causées par les processus manuels. Les manuels
peuvent être composés de plusieurs scripts représentant les différentes étapes potentiellement
nécessaires pour identifier les facteurs adjuvants d'un problème. Les activités Runbook
peuvent être déclenchées ou effectuées dans le cadre d'activités playbook, ou peuvent
demander l'exécution d'un playbook en réponse à des événements identifiés.
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
Exécution d'une analyse post-incident
- Assurez-vous que les facteurs adjuvants sont honnêtes et irréprochables.
- Vous ne pouvez pas corriger vos problèmes si vous ne les documentez pas.
- Veillez à ce que l'analyse post-incident soit irréprochable afin que vous puissiez proposer des mesures correctives objectives et promouvoir une auto-évaluation et une collaboration honnête au sein de vos équipes d'application.
What is log analytics?
Exigences fonctionnelles de test
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
Test des exigences de mise à l'échelle et de performance
Distributed Load Testing on AWS: simulate thousands of connected users
Apache JMeter
- Déployez votre application dans un environnement identique à votre environnement de
production et effectuez un test de charge.
- Utilisez les concepts d'infrastructure-code pour créer un environnement aussi similaire que possible à votre environnement de production.
Test la résilience à l'aide de l'ingénierie du chaos
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)
- Utilisez un logiciel open source pour injecter une panne dans votre charge de travail.
The Chaos ToolKit
Shopify Toxiproxy
Netflix Chaos Monkey - Vous pouvez aussi utiliser un logiciel commercial disponible via AWS Marketplace.
Gremlin - Enfin, vous pouvez créer votre propre code d'injection d'erreurs.
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager - Testez les défaillances de tous les composants et de toutes les dépendances externes.
- Simulez des conditions qui peuvent produire des ralentissements à l'aide des extensions des proxys courants pour introduire la latence et les messages supprimés. Vous pouvez également créer vos propres implémentations pour créer des conditions de ralentissement.
Organisation régulière de jeux de rôle
- Exécutez vos tests de charge ou de performance ainsi que l'injection de défaillances.
- Recherchez des anomalies dans vos runbooks et des possibilités de test vos manuels.
- Si vous vous écartez de vos runbooks, affinez-les ou corrigez le comportement. Lors des tests de votre manuel, identifiez les runbooks qui auraient dû être utilisés ou créez-en de nouveaux.