Skip to content
GitHubXDiscord

EC2Fleet

The EC2Fleet resource allows you to manage AWS EC2 Fleets for deploying and scaling Amazon EC2 instances across different instance types and purchasing options. This resource provides a way to create a fleet of EC2 instances that can include both On-Demand and Spot instances.

Create a basic EC2 Fleet with required properties and some common optional configurations:

import AWS from "alchemy/aws/control";
const ec2Fleet = await AWS.EC2.EC2Fleet("myEc2Fleet", {
TargetCapacitySpecification: {
TotalTargetCapacity: 5,
OnDemandTargetCapacity: 3,
SpotTargetCapacity: 2
},
LaunchTemplateConfigs: [
{
LaunchTemplateSpecification: {
LaunchTemplateId: "lt-0123456789abcdef0",
Version: "$Latest"
},
Overrides: [
{
InstanceType: "t3.micro",
WeightedCapacity: "1"
},
{
InstanceType: "t3.small",
WeightedCapacity: "1"
}
]
}
],
OnDemandOptions: {
MaxTotalPrice: "10.00",
AllocationStrategy: "lowestPrice"
}
});

Configure an EC2 Fleet with more advanced options like Spot instance settings and termination policies:

const advancedEc2Fleet = await AWS.EC2.EC2Fleet("advancedEc2Fleet", {
TargetCapacitySpecification: {
TotalTargetCapacity: 10,
OnDemandTargetCapacity: 5,
SpotTargetCapacity: 5
},
LaunchTemplateConfigs: [
{
LaunchTemplateSpecification: {
LaunchTemplateId: "lt-0123456789abcdef1",
Version: "$Latest"
},
Overrides: [
{
InstanceType: "t3.medium",
WeightedCapacity: "2"
},
{
InstanceType: "t3.large",
WeightedCapacity: "3"
}
]
}
],
SpotOptions: {
AllocationStrategy: "capacityOptimized",
InstanceInterruptionBehavior: "terminate",
MaxPrice: "0.05"
},
Type: "instant",
ExcessCapacityTerminationPolicy: "noTermination",
ReplaceUnhealthyInstances: true,
TagSpecifications: [
{
ResourceType: "instance",
Tags: [
{
Key: "Environment",
Value: "Production"
}
]
}
]
});

Create an EC2 Fleet that automatically terminates instances after a specified expiration time:

const expiringEc2Fleet = await AWS.EC2.EC2Fleet("expiringEc2Fleet", {
TargetCapacitySpecification: {
TotalTargetCapacity: 4
},
LaunchTemplateConfigs: [
{
LaunchTemplateSpecification: {
LaunchTemplateId: "lt-9876543210abcdef0",
Version: "$Latest"
},
Overrides: [
{
InstanceType: "t3.small",
WeightedCapacity: "1"
}
]
}
],
ValidFrom: new Date().toISOString(),
ValidUntil: new Date(Date.now() + 3600000).toISOString(), // valid for 1 hour
TerminateInstancesWithExpiration: true
});