Tutorial: Use Spot Fleet with instance weighting
This tutorial uses a fictitious company called Example Corp to illustrate the process of requesting a Spot Fleet using instance weighting.
Objective
Example Corp, a pharmaceutical company, wants to leverage the computational power of Amazon EC2 for screening chemical compounds that might be used to fight cancer.
Planning
Example Corp first reviews Spot Best
Practices
Instance types
Example Corp has a compute- and memory-intensive application that performs best with at least 60 GB of memory and eight virtual CPUs (vCPUs). They want to maximize these resources for the application at the lowest possible price. Example Corp decides that any of the following EC2 instance types would meet their needs:
Instance type | Memory (GiB) | vCPUs |
---|---|---|
r3.2xlarge |
61 |
8 |
r3.4xlarge |
122 |
16 |
r3.8xlarge |
244 |
32 |
Target capacity in units
With instance weighting, target capacity can equal a number of instances (the default) or a combination of factors such as cores (vCPUs), memory (GiBs), and storage (GBs). By considering the base for their application (60 GB of RAM and eight vCPUs) as 1 unit, Example Corp decides that 20 times this amount would meet their needs. So the company sets the target capacity of their Spot Fleet request to 20.
Instance weights
After determining the target capacity, Example Corp calculates instance weights. To calculate the instance weight for each instance type, they determine the units of each instance type that are required to reach the target capacity as follows:
-
r3.2xlarge (61.0 GB, 8 vCPUs) = 1 unit of 20
-
r3.4xlarge (122.0 GB, 16 vCPUs) = 2 units of 20
-
r3.8xlarge (244.0 GB, 32 vCPUs) = 4 units of 20
Therefore, Example Corp assigns instance weights of 1, 2, and 4 to the respective launch configurations in their Spot Fleet request.
Price per unit hour
Example Corp uses the On-Demand
price
Instance type | On-Demand price | Instance weight | Price per unit hour |
---|---|---|---|
r3.2xLarge |
$0.7 |
1 |
$0.7 |
r3.4xLarge |
$1.4 |
2 |
$0.7 |
r3.8xLarge |
$2.8 |
4 |
$0.7 |
Example Corp could use a global price per unit hour of $0.7 and be competitive
for all three instance types. They could also use a global price per unit hour
of $0.7 and a specific price per unit hour of $0.9 in the
r3.8xlarge
launch specification.
Verify permissions
Before creating a Spot Fleet request, Example Corp verifies that it has an IAM role with the required permissions. For more information, see Spot Fleet permissions.
Create the request
Example Corp creates a file, config.json
, with the
following configuration for its Spot Fleet request:
{ "SpotPrice": "0.70", "TargetCapacity": 20, "IamFleetRole": "arn:aws:iam::123456789012:role/aws-ec2-spot-fleet-tagging-role", "LaunchSpecifications": [ { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.2xlarge", "SubnetId": "subnet-482e4972", "WeightedCapacity": 1 }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.4xlarge", "SubnetId": "subnet-482e4972", "WeightedCapacity": 2 }, { "ImageId": "ami-1a2b3c4d", "InstanceType": "r3.8xlarge", "SubnetId": "subnet-482e4972", "SpotPrice": "0.90", "WeightedCapacity": 4 } ] }
Example Corp creates the Spot Fleet request using the request-spot-fleet command.
aws ec2 request-spot-fleet --spot-fleet-request-config file://config.json
For more information, see Spot Fleet request types.
Fulfillment
The allocation strategy determines which Spot capacity pools your Spot Instances come from.
With the lowestPrice
strategy (which is the default strategy),
the Spot Instances come from the pool with the lowest price per unit at the time
of fulfillment. To provide 20 units of capacity, the Spot Fleet launches either 20
r3.2xlarge
instances (20 divided by 1), 10
r3.4xlarge
instances (20 divided by 2), or 5
r3.8xlarge
instances (20 divided by 4).
If Example Corp used the diversified
strategy, the Spot Instances would
come from all three pools. The Spot Fleet would launch 6 r3.2xlarge
instances (which provide 6 units), 3 r3.4xlarge
instances (which
provide 6 units), and 2 r3.8xlarge
instances (which provide 8
units), for a total of 20 units.