REL 12: どのように信頼性をテストしますか?
本番環境のストレスに耐えられるようにワークロードを設計した後、ワークロードが意図したとおりに動作し、期待する弾力性を実現することを確認する唯一の方法が、テストを行うことです。
リソース
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
ベストプラクティス:
-
プレイブックを使用して失敗を調査する: 調査プロセスをプレイブックに文書化することで、よく理解されていない障害シナリオに対する一貫性のある迅速な対応が可能になります。プレイブックは、障害シナリオの原因となる要因を特定するために実行される事前定義されたステップです。プロセスステップの結果は、問題が特定されるか、エスカレーションされるまで、次のステップを決定するために使用されます。
-
インシデント後の分析を実行する: 顧客に影響を与えるイベントを確認し、寄与する要因と予防措置を特定します。この情報を使用して、再発を制限または回避するための緩和策を開発します。迅速で効果的な対応のための手順を開発します。対象者に合わせて調整された、寄与する要因と是正措置を必要に応じて伝えます。必要に応じて根本原因を他の人に伝える方法を確立します。
-
機能要件をテストする: これには、必要な機能を検証する単体テストと統合テストが含まれます。
-
スケーリングおよびパフォーマンス要件をテストする: これには、ワークロードがスケーリングおよびパフォーマンスの要件を満たしていることを検証するための負荷テストが含まれます。
-
カオスエンジニアリングを使用して回復力をテストする: 本番稼働前および運用環境に定期的に障害を挿入してテストを実行します。ワークロードが障害にどのように反応するかの仮説を立て、その仮説をテスト結果と比較して、一致しない場合はプロセスを繰り返します。本番稼働テストがユーザーに影響を与えないようにします。
-
定期的にゲームデーを実施する: ゲームデーを使用して、実際の障害シナリオに関わる人と一緒に、可能な限り本番環境に近い環境 (本番環境を含む) で障害対処手順を実行します。ゲームデーでは、本番環境のテストがユーザーに影響を与えないようにするための対策を講じます。
改善計画
プレイブックを使用して失敗を調査する
- プレイブックをコードとして実装する: プレイブックをスクリプト化することにより、運用をコードとして実行し、一貫性を保ち、手動プロセスによって発生するエラーを抑制または低減します。プレイブックは、問題に寄与する要因を特定するために必要となり得るさまざまなステップを表す複数のスクリプトで構成できます。ランブックのアクティビティは、プレイブックのアクティビティの一部としてトリガーまたは実行するか、特定されたイベントへの応答としてプレイブックの実行を引き起こす場合があります。
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
インシデント後の分析を実行する
- 寄与する要因の記述が正直であり、非難の対象にならないようにします。
- 問題を文書化しないと、問題を修正できません。
- 提案された是正措置を冷静に検討し、アプリケーションチームにおける誠実な自己評価とコラボレーションを促進できるようにするため、インシデント後の分析が非難の場にならないようにします。
What is log analytics?
機能要件をテストする
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
スケーリングおよびパフォーマンス要件をテストする
Distributed Load Testing on AWS: simulate thousands of connected users
Apache JMeter
- 本番環境と同じ環境にアプリケーションをデプロイして、負荷テストを実施します。
- コードとしてのインフラストラクチャの概念を使用して、できるだけ本番環境と類似した環境を作成する
カオスエンジニアリングを使用して回復力をテストする
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)
- ワークロードに障害を挿入するには、オープンソースソフトウェアを使用します
The Chaos ToolKit
Shopify Toxiproxy
Netflix Chaos Monkey - または、AWS Marketplace から入手できる商用ソフトウェアを使用します
Gremlin - または、独自の障害挿入コードを作成します
Well-Architected lab: Level 300: Testing for Resiliency of EC2 RDS and S3
Injecting Chaos to Amazon EC2 using AWS Systems Manager - すべての構成要素と外部依存関係の障害をテストする
- 共通のプロキシの拡張を使用して、ブラウンアウトを引き起こし得る状況をシミュレートし、レイテンシーおよびメッセージのドロップを引き起こします。独自の実装を作成して、ブラウンアウトの状況を作り出すこともできます。
定期的にゲームデーを実施する
- 負荷テストやパフォーマンステストを実施した後、障害生成を実施します。
- ランブックのおかしな点やプレイブックを使う機会を探します。
- ランブックから逸脱したら、対応マニュアルを改善するか行動を修正します。プレイブックを使用したら、使用すべきだったランブックを特定するか新しいランブックを作成します。