Generated banner for AWS Fault Injection Service
Generated logo for AWS Fault Injection Service

AWS Fault Injection Service

AWSOfficialPublished by AWS

  • Skill
  • Tool integration
  • Cloud and DevOps
  • Apache-2.0
  • No issues found

From the author

Plans, builds, runs, and analyzes fault injection experiments with AWS Fault Injection Service (AWS FIS) to validate application resilience through chaos engineering. Covers experiment templates (actions, targets, stop conditions), the FIS actions catalog and action selection, the scenario library (AZ power interruption, cross-Region connectivity, EC2/EKS/EBS stress), experiment lifecycle and monitoring, logging and reports, multi-account experiments, the experiment IAM role, and blast-radius safety. Applies when a user mentions AWS FIS or fault injection, asks what experiment to run for a failure mode (AZ, Region, API errors/throttling, instance/pod/DB/cache failure, latency, packet loss), wants to author an experiment template or CLI/CloudFormation, or needs to safely run chaos experiments in pre-production or production. For the broader resilience program across Resilience Hub and ARC, see aws-resilience-lifecycle; for ARC routing controls and zonal shift, see recovery-controller-setup.
— the description by AWS

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides domain expertise for AWS Fault Injection Service (AWS FIS), a managed service for running controlled fault injection experiments on AWS resources. It helps users design experiment templates, select appropriate fault actions, manage the experiment lifecycle, and ensure safety through stop conditions and IAM role configuration. The skill covers the full workflow from mapping failure scenarios to specific FIS actions to monitoring and reporting on experiment outcomes.

What it does

  • Maps failure scenarios to specific AWS FIS actions and scenarios.
  • Assists in authoring experiment templates including targets, actions, and stop conditions.
  • Provides guidance on configuring IAM roles and permissions for FIS experiments.
  • Explains the experiment lifecycle from creation to execution and monitoring.
  • Offers troubleshooting for common experiment failures and target resolution issues.
  • Provides a canonical reference for AWS FIS API operations and parameter structures.

When to use it

  • When you need to validate application resilience through chaos engineering.
  • When you want to test how your infrastructure responds to specific failure modes like AZ outages or API throttling.
  • When you are authoring experiment templates using CLI, SDK, or CloudFormation.
  • When you need to safely configure blast-radius guardrails for fault injection experiments.

Advantages

  • Reduces risk by providing guidance on bounded blast-radius safety and stop conditions.
  • Prevents common API usage errors through a curated hallucination-rejection reference.
  • Streamlines the design of experiments by mapping failure modes to verified FIS actions.
  • Supports secure experiment execution through proper IAM role and trust policy configuration.

Usage examples

“What FIS action should I use to test how my application handles a single AZ power interruption?”
The agent identifies the AZ Availability: Power Interruption scenario and explains how to scope the target to the specific AZ.
“Help me create an experiment template to inject API throttling errors into my service.”
The agent provides the JSON structure for an experiment template using the aws:fis:inject-api-throttle-error action and includes a required CloudWatch alarm stop condition.

Install

  1. Download the skill as a ZIP:

    https://mp-staging.autogineer.com/agent-skills/aws/aws-fault-injection-service/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip aws-fault-injection-service.zip -d .agents/skills

Documentation by AWS

AWS Fault Injection Service (FIS) Experiments

Overview

Domain expertise for AWS Fault Injection Service (AWS FIS) — a managed chaos-engineering service that runs controlled fault injection experiments on real AWS resources so you can observe how an application responds to disruption and improve its resilience.

This skill lets an agent do three things:

  1. Suggest the right experiment — map a user's failure scenario or resilience question to the correct FIS action(s), scenario, or experiment design, and explain the trade-offs.

  2. Build and run experiments — author experiment templates (actions, targets, stop conditions, logging, reports), wire up the experiment IAM role, and drive the run/monitor/stop lifecycle via CLI, SDK, or CloudFormation.

  3. Inform the user — answer conceptual questions about FIS terminology, safety, pricing, supported services, and how FIS fits into a resilience program.

AWS FIS carries out real actions on real AWS resources. Before running any experiment in production, plan it, run it first in pre-production, and always bound the blast radius with a stop condition. Treat fault injection as a privileged, potentially disruptive operation.

The AWS MCP server is recommended for executing this skill's AWS API calls — it provides sandboxed execution and audit logging — but it is not required; all operations also work with the AWS CLI (aws fis ...) directly.

Guardrail — where this skill's own files live (MCP vs local install)

Before reading a reference file, determine how this skill was loaded:

  • Loaded via the AWS MCP retrieve_skill tool: the skill's reference files are not on the local filesystem. Fetch each one through retrieve_skill with the file parameter (e.g. file="references/fis-concepts.md") — do NOT file_read these paths locally or search the filesystem for them.

  • Installed locally (e.g. .kiro/skills/aws-fault-injection-service/ or ~/.claude/skills/aws-fault-injection-service/): read reference files from the local skill directory using the relative paths shown here.

This applies only to the skill's own reference files; always read and write user or session data in the working directory, never through retrieve_skill.

Start here — route the request

  • "What is FIS / when should I use it / what does X term mean / does it support Y?" → read references/fis-concepts.md.

  • "What experiment/action should I run to test a failure mode?" → read references/fis-actions-reference.md (action selection map + full catalog) and suggest an action or scenario.

  • "Build / create / run an experiment" (template, targets, stop conditions, logging, reports, scenarios, multi-account, monitoring) → follow references/fis-workflow.md exactly.

  • Any AWS CLI or API command for FIS → consult references/fis-api-reference.md FIRST — it is the canonical operation/parameter reference and includes a hallucination-rejection table.

  • IAM role, permissions, trust policy, confused-deputy, blast-radius safety → read references/fis-security.md.

API Reference (READ FIRST before producing any AWS CLI command)

The exact aws fis operation names and template parameters are documented in references/fis-api-reference.md, including a table mapping common wrong API/action names to correct ones. Always consult it before generating commands. Action IDs and resource types evolve — verify with aws fis list-actions and aws fis get-action --id <action-id> rather than trusting memory.

Suggesting experiments (behavioral contract)

When the user describes a failure they want to test rather than a command they want run:

  1. Identify the failure mode (AZ impairment, Region isolation, API errors/throttling, compute/DB/cache loss, latency, packet loss, resource exhaustion).

  2. Map it to a scenario (preferred when one fits — pre-built and AWS-owned) or a specific action using the selection map in references/fis-actions-reference.md.

  3. State the target (resource type + how to scope it) and a stop condition (CloudWatch alarm on your steady-state metric) so the blast radius is bounded.

  4. Recommend running in pre-production first, then production under change management.

  5. Offer to generate the experiment template — then follow references/fis-workflow.md.

Do not invent action IDs, resource types, or parameters. If unsure, say so and verify with aws fis list-actions / aws fis get-action or the FIS documentation.

Troubleshooting

"Experiment failed immediately / no targets found"

FIS resolves all targets at experiment start; if a target resolves to zero resources, the experiment fails (unless emptyTargetResolutionMode is skip). Check tags, filters, region, and account. Use a target preview before running (see workflow reference).

"Action failed with a permissions error"

The FIS experiment IAM role is missing permissions for the underlying service API (or SSM, or the confused-deputy trust conditions block the assume). See references/fis-security.md.

"Experiment stopped unexpectedly"

A stop condition (CloudWatch alarm) likely fired — this is the guardrail working. Check the experiment's state.reason and the alarm history. A stopped experiment cannot be resumed; start a new one from the template.

"Nitro / instance-type errors on EBS or network faults"

Some actions require Nitro-based instances or the SSM Agent. Verify prerequisites per action in references/fis-actions-reference.md.

Observability companion

For the CloudWatch alarms, dashboards, and metrics that back FIS stop conditions and experiment reports, recommend the AWS Observability skill for alarm/dashboard setup — keep this skill's guidance to how those signals feed experiment safety and post-experiment analysis.

Security Considerations

FIS runs real, potentially destructive actions. Key points (full guidance in references/fis-security.md):

  • Least privilege: scope the experiment role to only the actions and target ARNs each experiment needs — never *. Scope the human/CI principals allowed to call fis:StartExperiment.

  • Confused-deputy protection: the experiment role's trust policy MUST condition on aws:SourceAccount and aws:SourceArn (scoped to the experiment ARN pattern).

  • Bounded blast radius: always attach a CloudWatch-alarm stop condition; start with narrow targets (COUNT(1) / low PERCENT) and pre-production before production.

  • No sensitive data in string fields: experiment/template descriptions, tags, and logs surface in CloudTrail, CloudWatch Logs, S3 reports, and (multi-account) target-account Health dashboards — never embed PII, secrets, or sensitive architecture detail.

  • Encrypt logs/reports: experiment logs and PDF reports reveal resilience posture — use SSE-KMS on the S3 buckets, enforce TLS, and consider S3 Object Lock on report buckets.

  • Further reading: FIS Security and the AWS Well-Architected Reliability Pillar.

Files

references/fis-workflow.md

AWS FIS Experiment Workflow

Follow this procedure to build, run, monitor, and analyze a FIS experiment. Consult fis-api-reference.md before writing any command and fis-actions-reference.md to choose actions/targets.

Contents

  • 0. Plan first (do not skip)

  • 1. Create (or reuse) the experiment IAM role

  • 2. Author the experiment template

  • 3. Add stop conditions (blast-radius guardrail)

  • 4. Enable experiment logging (strongly recommended)

  • 5. (Optional) Configure an experiment report

  • 6. (Optional) Experiment options & multi-account

  • 7. Preview targets before running (recommended)

  • 8. Start and monitor the experiment

  • 9. Stop manually if needed

  • 10. Analyze results

  • 11. Iterate the template

  • CloudFormation option

0. Plan first (do not skip)

  1. Define steady state — the business/technical metrics that mean the app is healthy (latency, error rate, successful transactions). These become your stop-condition alarm(s).

  2. Form a hypothesis — "when the fault is injected, the system stays within steady state because of a specific control."

  3. Decide blast radius — narrowest useful target (COUNT(1) / low PERCENT), pre-production first. Only widen after it passes.

  4. Confirm this is authorized — production fault injection needs change-management approval.

1. Create (or reuse) the experiment IAM role

The template needs a roleArn FIS assumes to perform actions. Create it with a trust policy for fis.amazonaws.com and confused-deputy conditions, plus least-privilege permissions for the target service APIs (and SSM / logs / report S3+CloudWatch if used). See fis-security.md for the exact trust policy and permission examples.

2. Author the experiment template

An experiment template combines: description, roleArn, actions, targets, stopConditions, optional logConfiguration, optional experimentReportConfiguration, optional experimentOptions, and tags.

Scenarios are console-only. In the FIS console: Scenario library → pick a scenario → Create template with scenario → fill missing parameters, choose the service-access role, add stop conditions and logging → Create experiment template. To automate later, export the created template's JSON. (See scenario list in fis-actions-reference.md.)

Option B — hand-authored template (CLI/JSON)

Build a JSON document and pass it to create-experiment-template. Minimal shape:

{
  "description": "Reboot one prod EC2 instance; stop if error rate alarms",
  "roleArn": "arn:aws:iam::123456789012:role/FISExperimentRole",
  "actions": {
    "RebootInstance": {
      "actionId": "aws:ec2:reboot-instances",
      "targets": { "Instances": "oneProdInstance" }
    }
  },
  "targets": {
    "oneProdInstance": {
      "resourceType": "aws:ec2:instance",
      "resourceTags": { "env": "prod" },
      "selectionMode": "COUNT(1)"
    }
  },
  "stopConditions": [
    { "source": "aws:cloudwatch:alarm",
      "value": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:HighErrorRate" }
  ],
  "tags": { "Name": "reboot-one-prod-instance", "team": "checkout" }
}

Create it:

aws fis create-experiment-template --cli-input-json file://template.json

stopConditions is required in the template. Use [{"source":"none"}] only when you genuinely have no alarm — strongly discouraged for anything beyond a sandbox. Prefer a real aws:cloudwatch:alarm on your steady-state metric.

Sequencing actions

Actions run in parallel by default. To sequence, set startAfter to the names of prerequisite actions. Use an aws:fis:wait action to insert a controlled pause (e.g., hold a fault for N minutes before a follow-on action or before letting steady state recover).

3. Add stop conditions (blast-radius guardrail)

A stop condition stops the experiment when a CloudWatch alarm enters ALARM. Base the alarm on the steady-state metric from step 0.

"stopConditions": [
  { "source": "aws:cloudwatch:alarm",
    "value": "arn:aws:cloudwatch:us-east-1:123456789012:alarm:P99LatencyHigh" }
]

You can specify multiple alarms (subject to the account quota). Alarm/dashboard creation itself belongs to the AWS Observability skill.

Capture per-experiment records (experiment-start, target-resolution-*, action-start/end/ error, experiment-end) to CloudWatch Logs and/or S3. logSchemaVersion must be 2.

FIS does not require logging, but without it there is no experiment-level audit trail beyond CloudTrail, which makes post-incident troubleshooting very difficult. Enable it for anything beyond a throwaway sandbox.

"logConfiguration": {
  "logSchemaVersion": 2,
  "cloudWatchLogsConfiguration": {
    "logGroupArn": "arn:aws:logs:us-east-1:123456789012:log-group:/aws/fis/experiments:*"
  },
  "s3Configuration": { "bucketName": "my-fis-logs", "prefix": "experiments" }
}

Grant FIS the vended-logs delivery permissions for each destination. First run to a new destination is delayed ~15 s to configure delivery. Logging is disabled by default; enable via create-experiment-template or add later with update-experiment-template. Use logs (not the report) to troubleshoot failed experiments.

Encrypt both destinations. Experiment logs reveal resilience posture and architectural weaknesses. Encrypt the CloudWatch Logs log group with a KMS key (kmsKeyId at creation, or aws logs associate-kms-key), and enable SSE-KMS on the S3 bucket with a bucket policy that denies non-TLS requests (aws:SecureTransport). See fis-security.md — Data handling.

5. (Optional) Configure an experiment report

Generate a PDF summarizing the experiment plus a CloudWatch dashboard snapshot, delivered to S3.

"experimentReportConfiguration": {
  "outputs": { "s3Configuration": { "bucketName": "my-fis-reports", "prefix": "checkout" } },
  "dataSources": {
    "cloudWatchDashboards": [
      { "dashboardIdentifier": "arn:aws:cloudwatch::123456789012:dashboard/CheckoutHealth" }
    ]
  },
  "preExperimentDuration": "PT20M",
  "postExperimentDuration": "PT20M"
}
  • Reports are NOT generated for cancelled runs or target-preview (actionsMode: skip-all) runs. preExperimentDuration and postExperimentDuration are ISO 8601 and default to 20 min each; both are capped, as is the number of dashboards per report. Check the current values in the FIS quotas documentation rather than assuming a fixed limit.

  • Encrypt the report bucket. Reports are PDFs summarizing resilience posture — enable SSE-KMS and enforce TLS with a bucket policy condition on aws:SecureTransport, the same way as the log destinations above.

  • Report role permissions: cloudwatch:GetDashboard, cloudwatch:GetMetricWidgetImage, s3:GetObject, s3:PutObject (+ kms:GenerateDataKey, kms:Decrypt for CMK-encrypted buckets). Use the report only for successfully completed runs — troubleshoot failures with logs.

6. (Optional) Experiment options & multi-account

experimentOptions on the template controls:

  • accountTargeting: single-account (default) or multi-account.

  • emptyTargetResolutionMode: fail (default) or skip (don't fail when a target resolves to zero resources).

  • actionsMode: run-all (normal) or skip-all (target preview — resolves targets without running actions).

Multi-account experiments run from an orchestrator account against resources in target accounts (same Region). Set accountTargeting: multi-account, then add a target account configuration per account (account ID + IAM role FIS assumes there + optional description):

aws fis create-target-account-configuration \
  --experiment-template-id EXTxxxx --account-id 222233334444 \
  --role-arn arn:aws:iam::222233334444:role/FISTargetAccountRole \
  --description "checkout target account"

Target accounts are notified via their AWS Health dashboards. Prefer consistent resource tags across accounts and target AZs by AZ ID. Per-account action quotas apply.

Generate a target preview (run with actionsMode: skip-all, or use the console/get-experiment resolved-targets view) to confirm the exact resources that will be affected. This is the cheapest way to catch an over-broad tag/filter before a real fault.

8. Start and monitor the experiment

# Start
aws fis start-experiment --experiment-template-id EXTxxxx \
  --tags Name=game-day-checkout

# Watch state
aws fis get-experiment --id EXPxxxx --query 'experiment.state'

# List which resources FIS actually selected
aws fis list-experiment-resolved-targets --id EXPxxxx

States: pending → initiating → running → completed | stopping → stopped | failed. Watch your steady-state dashboard live. A stopped/failed experiment cannot be resumed.

9. Stop manually if needed

aws fis stop-experiment --id EXPxxxx

Use this if you observe unacceptable impact the stop-condition alarm didn't catch. Afterward, consider tightening the alarm so the guardrail catches it automatically next time.

10. Analyze results

  1. Compare steady-state metrics before/during/after; confirm the hypothesis and measure actual recovery time (RTO) vs. objective.

  2. Read experiment logs for the action/target timeline and any action-error reasons.

  3. If enabled, retrieve the S3 experiment report as evidence of the test.

  4. If validating a Resilience Hub finding, only now mark it resolved (see aws-resilience-lifecycle).

  5. Iterate: widen blast radius, add multi-fault scenarios, or promote from pre-prod to prod under change management. If the experiment surfaced a defect, fix it and re-run to confirm.

11. Iterate the template

aws fis update-experiment-template --id EXTxxxx --cli-input-json file://template-v2.json
aws fis delete-experiment-template --id EXTxxxx   # when retiring

CloudFormation option

Model the template as AWS::FIS::ExperimentTemplate (and AWS::FIS::TargetAccountConfiguration for multi-account) so experiments are version-controlled and reviewed like other infrastructure. The property shape mirrors the CLI/JSON above.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an MCP server

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Published by
AWS
Publisher
AWS (Official)
Source
aws/agent-toolkit-for-aws · skills/specialized-skills/resilience-skills/aws-fault-injection-service · commit 0a218f8
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • NOTICE (added by AutoGineer from NOTICE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by AWS.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download aws-fault-injection-service.zip