# AWS FIS Concepts & Terminology
Authoritative source: — verify specifics there, as FIS adds
actions, resource types, and scenarios over time.
## Contents
- What AWS FIS is
- Core concepts (official terminology)
- Lifecycle: template → experiment → analysis
- Experiment states
- Supported resource types
- Ways to work with FIS
- Pricing (high level)
- When to recommend FIS (and when not)
- How FIS fits the resilience lifecycle
- Security — see fis-security.md
## What AWS FIS is
AWS Fault Injection Service (AWS FIS) is a managed service for running **fault injection
experiments** on AWS workloads, based on the principles of **chaos engineering**. Experiments
stress an application with disruptive events so you can observe how it responds and then improve
its performance and resilience. FIS provides pre-built fault actions plus the controls and
guardrails (stop conditions, roll-back on threshold breach) needed to run experiments safely —
including in production.
**Important:** FIS carries out real actions on real AWS resources. Always plan first, run in
pre-production before production, and bound the blast radius with a stop condition.
## Core concepts (official terminology — use these exact terms)
| Term | Definition |
|---|---|
| **Experiment** | A single run that tests your theory of how the system behaves under fault. Started from an experiment template. Finishes when all actions complete, a stop condition triggers, an action errors, or you stop it manually. |
| **Experiment template** | The blueprint of an experiment. Contains **actions**, **targets**, **stop conditions**, an IAM **role**, and optional **logging**, **report configuration**, and **experiment options**. |
| **Action** | An activity FIS performs on a resource during an experiment (e.g., stop instances, inject latency). Runs for a set duration or until the experiment stops. Actions run sequentially (via `startAfter`) or in parallel. |
| **Target** | One or more AWS resources an action runs on. Selected by resource ARNs, tags, filters, or parameters, then narrowed by a **selection mode** (`ALL`, `COUNT(n)`, `PERCENT(n)`). |
| **Stop condition** | A guardrail that stops the experiment if a CloudWatch alarm enters ALARM state. Defines the safe boundary (blast radius) of the experiment. |
| **Scenario** | An AWS-owned, pre-built pattern (console-only "scenario library") of targets + actions for a common impairment. Used to create an experiment template. |
| **Experiment report** | An optional PDF summarizing an experiment's actions and (optionally) a CloudWatch dashboard snapshot; delivered to S3. |
| **Orchestrator / target account** | In multi-account experiments, the orchestrator account owns the template/experiment; target accounts hold the affected resources. |
## Lifecycle: template → experiment → analysis
1. **Create an experiment template** (`create-experiment-template`) — define actions, targets,
stop conditions, role, and optional logging/report/options.
2. **(Recommended) Preview targets** — verify which resources will be affected before running.
3. **Start an experiment** (`start-experiment`) from the template.
4. **Monitor** (`get-experiment`) — track state and resolved targets; view logs.
5. **Experiment finishes** when: all actions complete, a stop condition triggers, an action
errors, or you `stop-experiment` manually.
6. **Analyze** — review metrics/dashboards, logs, and (if enabled) the experiment report.
You **cannot resume** a stopped or failed experiment, and you cannot rerun a completed one — start
a new experiment from the (optionally updated) template.
## Experiment states
`pending` → `initiating` → `running` → `completed` | `stopping` → `stopped` | `failed`.
(Action states add `cancelled`.) A `failed` experiment usually means target resolution failed or
an action could not run; `stopped` usually means a stop condition fired or a manual stop.
## Supported resource types (target `resourceType`)
FIS adds support for new services over time, so **do not treat any list as exhaustive** — a stale
list will cause you to tell a user a resource type is unsupported when it is. Discover the current
set instead:
```bash
# every action, with the resource type each one targets
aws fis list-actions
aws fis get-action --id # inspect its targets
```
Illustrative examples of the shape these take: `aws:ec2:instance`, `aws:ecs:task`,
`aws:eks:pod`, `aws:rds:cluster`, `aws:lambda:function`, `aws:s3:bucket`. The authoritative list is
in the [FIS documentation](https://docs.aws.amazon.com/fis/latest/userguide/targets.html).
Each action supports exactly one resource type; a target must match the action's resource type.
## Ways to work with FIS
- **Console** — (only place with the scenario library).
- **AWS CLI** — `aws fis ...` ([CLI reference](https://docs.aws.amazon.com/cli/latest/reference/fis/)).
- **AWS CloudFormation** — `AWS::FIS::ExperimentTemplate` (and `AWS::FIS::TargetAccountConfiguration`).
- **AWS SDKs** — language-specific FIS clients.
- **HTTPS API** — [FIS API Reference](https://docs.aws.amazon.com/fis/latest/APIReference/).
## Pricing (high level)
FIS charges are based on action runtime and the number of target accounts; experiment logging
(vended logs to CloudWatch Logs / S3) and experiment reports (S3 storage plus the CloudWatch
`GetMetricWidgetImage`/`GetDashboard` calls) incur additional charges from those services.
Pricing details change — check for the current model rather
than quoting rates from here.
## When to recommend FIS (and when not)
**Recommend FIS when the user wants to:**
- Validate that an application actually survives a failure mode (AZ loss, Region isolation, DB
failover, dependency latency/errors, resource exhaustion) — not just assume it does.
- Prove a Resilience Hub finding's remediation with a reproduced failure before marking it
resolved (see `aws-resilience-lifecycle`).
- Run game days / continuous resilience testing with bounded, observable, auto-stopping faults.
**Redirect when:**
- They want to **set up** ARC routing controls or zonal shift → `recovery-controller-setup`
(FIS can *trigger* zonal autoshift via `aws:arc:start-zonal-autoshift`, but does not configure ARC).
- They want the **end-to-end resilience program** (Define → Test → Operate) → `aws-resilience-lifecycle`.
- They want CloudWatch **alarm/dashboard setup** itself → the AWS Observability skill.
## How FIS fits the resilience lifecycle
Define (Resilience Hub) → **Test (FIS)** → Operate (ARC). FIS is the "Test" phase: it reproduces
the failure modes surfaced during Define and validates the operational controls built for
Operate. Stop conditions reuse the same CloudWatch alarms that define steady state.
## Security
FIS performs real, potentially destructive actions on real resources, so treat every experiment as
a privileged operation. Full guidance is in [fis-security.md](fis-security.md):
- The experiment IAM role — trust policy with **confused-deputy** conditions
(`aws:SourceAccount` + `aws:SourceArn`), and least-privilege permissions scoped by ARN/tag.
- Restricting who may call `fis:StartExperiment`, including the caller's `iam:PassRole` condition.
- Bounding the blast radius — a mandatory CloudWatch-alarm stop condition, narrow targeting
(`COUNT(1)` / low `PERCENT`), target preview, and pre-production before production.
- Data handling — no PII or secrets in template/experiment string fields, and encryption for
experiment logs and reports.