Skip to content

Commit

Permalink
feat(stepfunctions-tasks): additional allocation strategies for spot …
Browse files Browse the repository at this point in the history
…instance fleets in EmrCreateCluster (aws#28525)

This PR adds new allocation strategies for spot instance fleets in EmrCreateCluster.

- price-capacity-optimized
  - recommended
- lowest-price
- diversified

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-emr-instancefleetconfig-spotprovisioningspecification.html

https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-allocation-strategy.html

----

*By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
  • Loading branch information
go-to-k authored Dec 30, 2023
1 parent e0b725c commit 94003ec
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,20 @@ export namespace EmrCreateCluster {
* Capacity-optimized, which launches instances from Spot Instance pools with optimal capacity for the number of instances that are launching.
*/
CAPACITY_OPTIMIZED = 'capacity-optimized',
/**
* Price-capacity-optimized, which launches instances from Spot Instance pools with the highest capacity availability for the number of instances that are launching.
*
* Recommended.
*/
PRICE_CAPACITY_OPTIMIZED = 'price-capacity-optimized',
/**
* Lowest-price, which launches instances from the lowest priced pool that has available capacity.
*/
LOWEST_PRICE = 'lowest-price',
/**
* Diversified, which launches instances across all Spot capacity pools.
*/
DIVERSIFIED = 'diversified',
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Template, Match } from '../../../assertions';
import { Template } from '../../../assertions';
import * as iam from '../../../aws-iam';
import * as sfn from '../../../aws-stepfunctions';
import * as cdk from '../../../core';
Expand Down Expand Up @@ -883,7 +883,12 @@ test('Create Cluster with Instances configuration', () => {
});
});

test('Create Cluster with InstanceFleet with allocation strategy=capacity-optimized for Spot instances', () => {
test.each([
[EmrCreateCluster.SpotAllocationStrategy.CAPACITY_OPTIMIZED, 'capacity-optimized'],
[EmrCreateCluster.SpotAllocationStrategy.PRICE_CAPACITY_OPTIMIZED, 'price-capacity-optimized'],
[EmrCreateCluster.SpotAllocationStrategy.LOWEST_PRICE, 'lowest-price'],
[EmrCreateCluster.SpotAllocationStrategy.DIVERSIFIED, 'diversified'],
])('Create Cluster with InstanceFleet with allocation strategy %s for Spot instances', (strategy, expected) => {
// WHEN
const task = new EmrCreateCluster(stack, 'Task', {
instances: {
Expand Down Expand Up @@ -913,7 +918,7 @@ test('Create Cluster with InstanceFleet with allocation strategy=capacity-optimi
}],
launchSpecifications: {
spotSpecification: {
allocationStrategy: EmrCreateCluster.SpotAllocationStrategy.CAPACITY_OPTIMIZED,
allocationStrategy: strategy,
blockDurationMinutes: 1,
timeoutAction: EmrCreateCluster.SpotTimeoutAction.TERMINATE_CLUSTER,
timeoutDurationMinutes: 5,
Expand Down Expand Up @@ -975,7 +980,7 @@ test('Create Cluster with InstanceFleet with allocation strategy=capacity-optimi
}],
LaunchSpecifications: {
SpotSpecification: {
AllocationStrategy: 'capacity-optimized',
AllocationStrategy: expected,
BlockDurationMinutes: 1,
TimeoutAction: 'TERMINATE_CLUSTER',
TimeoutDurationMinutes: 5,
Expand Down

0 comments on commit 94003ec

Please sign in to comment.