Skip to main content
awsdown

A Practical AWS Chaos Engineering Guide

AWSDown Research · Resilience engineeringPublished May 6, 2026Updated June 20, 202610 min read
Streams of green code

Your architecture diagram shows a resilient system. The only way to know whether it actually is one is to break it on purpose, in a controlled way, and watch. That is chaos engineering: not random destruction, but disciplined experiments that turn "we think this fails over" into "we watched it fail over." On AWS, the tooling to do this safely is built in, and the payoff is finding the weak spots on your schedule instead of the provider's.

Why deliberately break things

Every incident in our outage archive has the same shape in hindsight: a dependency nobody had tested, an assumption that held right up until it did not. The October 2025 DynamoDB DNS failure took down teams that did not know they depended on DynamoDB through a third party. Chaos experiments exist to surface exactly that class of surprise before it surprises you at 3 a.m.

The mental shift is from "does it work?" to "what happens when this part fails?" You are not testing the happy path. You are testing the failure path, the one that only runs during incidents and therefore never gets exercised any other way.

The experiment loop

A chaos experiment is a small scientific method, run in five moves:

  1. Define steady state. Pick metrics that describe normal: p99 latency, error rate, checkouts per minute. Without a baseline you cannot tell whether an experiment broke anything.
  2. Form a hypothesis. State what you expect to stay true under the fault, for example: "if one AZ is impaired, the app keeps serving with under 1 percent errors and recovers within two minutes."
  3. Inject the smallest meaningful fault. Terminate one instance. Add latency to one dependency. Start small and low-blast-radius. The goal is learning, not spectacle.
  4. Observe and compare. Run it with the team watching dashboards. Did steady state hold? What recovered on its own? Where did a human have to step in?
  5. Fix and expand. File each weakness as owned engineering work, fix it, re-run to confirm, then widen the blast radius or pick a harder fault.

Using AWS Fault Injection Service

You do not have to build the tooling. AWS Fault Injection Service (FIS) runs fault-injection experiments as a managed service. It can:

  • Terminate or stop EC2 instances and drain ECS/EKS tasks
  • Stress CPU, memory, and disk on targets
  • Inject network latency, packet loss, and blackhole traffic to endpoints
  • Throttle API calls and simulate an Availability Zone impairment

The feature that makes it safe is stop conditions. You attach CloudWatch alarms to an experiment, and if steady state breaks past a threshold you set in advance, FIS aborts the run automatically. Combined with a tightly scoped target set (the blast radius), this lets you experiment without betting the whole system on your own reflexes.

Fault to injectWhat it testsReal incident it mirrors
Terminate one instanceAuto Scaling replacement, LB health checksRoutine host failure
Impair one AZMulti-AZ failover, capacity headroomAZ-level power/network event
Add latency to a dependencyTimeouts, retries, circuit breakersDegraded downstream service
Blackhole a service endpointGraceful degradation, fallback pathsDNS/endpoint failure

Pair this with the reliability wins in AWS Auto Scaling for Reliability: a chaos experiment is the only honest way to confirm your health checks and headroom actually absorb an AZ loss.

Game days: the human half

Automated experiments test your architecture. Game days test your people and process. A game day is a scheduled exercise where the team simulates a failure and practices the full response: detection, runbooks, communication, on-call handoff. It reveals gaps that no FIS experiment will, like a runbook that references a dashboard nobody can find or a break-glass credential that routes through the failing region.

The DR checklist prescribes quarterly game days against the three real failure classes: AZ loss, regional control-plane outage, and DNS/endpoint failure. Run them, measure the achieved recovery time against your target, and fix the gaps. A recovery plan that has never missed its target has never been tested hard enough.

Detection is part of resilience

You cannot respond to, or fail over from, an incident you have not noticed. Build independent detection so a real event does not depend on a customer ticket to reach you: external monitoring plus instant outage alerts typically beats the first support ticket by 20 to 40 minutes.

When you are ready to widen the aperture beyond your own systems, the reliability research at clouddowntime.com/data tracks how AWS actually fails across regions and services, and if a provider incident breaches an SLA you may be owed credits, checkable at cloudslacredit.com. For detection wired directly into your stack, Next Signal (sponsor) watches provider status so the game day you never scheduled does not become the incident you find out about last.

Frequently asked questions

What is chaos engineering?

Chaos engineering is the practice of deliberately injecting controlled failures into a system to verify it behaves as designed under stress. You form a hypothesis about steady-state behavior, inject a fault such as an instance termination or added latency, and compare the result to your hypothesis. It surfaces hidden weaknesses before a real incident does.

What is AWS Fault Injection Service (FIS)?

AWS Fault Injection Service is a managed service for running fault-injection experiments on AWS workloads. It can terminate instances, stress CPU and memory, add network latency, throttle APIs, and simulate AZ impairments. Experiments define a target scope, actions, and stop conditions tied to CloudWatch alarms so a run aborts automatically if it goes too far.

Is chaos engineering safe to run in production?

It can be, with discipline. Start in non-production, define a small blast radius, and attach automated stop conditions that abort the experiment if steady state breaks. Only expand to production once you trust your monitoring and recovery, and always run during a planned window with the team watching. The point is controlled learning, not gambling with real traffic.

What is a game day?

A game day is a scheduled exercise where a team simulates a failure and practices detecting and responding to it end to end. Unlike an automated experiment, a game day involves people: on-call engineers, runbooks, and communication. It reveals gaps in process and tooling, not just architecture, and builds the reflexes a real incident demands.

See the patterns in practice in the outage post-mortems, or get instant outage alerts.