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
});