ExperimentTemplate ​
The ExperimentTemplate resource allows you to define and manage AWS Fault Injection Simulator (FIS) ExperimentTemplates, which are used to orchestrate chaos engineering experiments. For more details, refer to the AWS FIS ExperimentTemplates documentation.
Minimal Example ​
Create a simple ExperimentTemplate with necessary properties and some common optional configurations.
ts
import AWS from "alchemy/aws/control";
const basicExperimentTemplate = await AWS.FIS.ExperimentTemplate("basic-experiment", {
Description: "A basic experiment to test service resilience.",
StopConditions: [
{
Source: "aws:cloudwatch:alarm",
Value: "my-alarm"
}
],
Targets: {
myTarget: {
ResourceType: "aws:ec2:instance",
SelectionMode: "ALL"
}
},
Actions: {
myAction: {
ActionId: "aws:ec2:stop-instances",
Parameters: {
"target": "myTarget"
},
Duration: "PT30S"
}
},
RoleArn: "arn:aws:iam::123456789012:role/MyFISRole",
Tags: {
Environment: "test",
Project: "ChaosEngineering"
}
});
Advanced Configuration ​
Configure an ExperimentTemplate with a detailed report configuration and additional options for complex experiments.
ts
const advancedExperimentTemplate = await AWS.FIS.ExperimentTemplate("advanced-experiment", {
Description: "An advanced experiment for testing failover mechanisms.",
StopConditions: [
{
Source: "aws:cloudwatch:alarm",
Value: "failover-alarm"
}
],
Targets: {
myTarget: {
ResourceType: "aws:ec2:instance",
SelectionMode: "ALL"
}
},
Actions: {
myAction: {
ActionId: "aws:ec2:stop-instances",
Parameters: {
"target": "myTarget"
},
Duration: "PT1M"
}
},
ExperimentReportConfiguration: {
S3Bucket: "my-experiment-reports",
S3Prefix: "experiments/"
},
ExperimentOptions: {
Include: ["monitoring"],
Timeout: "PT10M"
},
RoleArn: "arn:aws:iam::123456789012:role/MyFISRole",
Tags: {
Environment: "production",
Project: "ChaosEngineering"
}
});
Using Log Configuration ​
Create an ExperimentTemplate that includes logging configurations to capture detailed experiment logs.
ts
const loggingExperimentTemplate = await AWS.FIS.ExperimentTemplate("logging-experiment", {
Description: "An experiment with logging enabled for detailed insights.",
StopConditions: [
{
Source: "aws:cloudwatch:alarm",
Value: "log-alarm"
}
],
Targets: {
myTarget: {
ResourceType: "aws:ec2:instance",
SelectionMode: "ALL"
}
},
Actions: {
myAction: {
ActionId: "aws:ec2:stop-instances",
Parameters: {
"target": "myTarget"
},
Duration: "PT30S"
}
},
LogConfiguration: {
LogGroupArn: "arn:aws:logs:us-west-2:123456789012:log-group:my-log-group",
LogStreamName: "experiment-logs"
},
RoleArn: "arn:aws:iam::123456789012:role/MyFISRole",
Tags: {
Environment: "staging",
Project: "ChaosEngineering"
}
});
Adopting Existing Resources ​
If you want to adopt an existing ExperimentTemplate instead of failing when it already exists, you can set the adopt
property to true
.
ts
const adoptExistingExperimentTemplate = await AWS.FIS.ExperimentTemplate("adopt-experiment", {
Description: "An experiment template that adopts existing configurations.",
StopConditions: [
{
Source: "aws:cloudwatch:alarm",
Value: "adopt-alarm"
}
],
Targets: {
myTarget: {
ResourceType: "aws:ec2:instance",
SelectionMode: "ALL"
}
},
Actions: {
myAction: {
ActionId: "aws:ec2:stop-instances",
Parameters: {
"target": "myTarget"
},
Duration: "PT45S"
}
},
RoleArn: "arn:aws:iam::123456789012:role/MyFISRole",
Tags: {
Environment: "production",
Project: "ChaosEngineering"
},
adopt: true
});