Skip to content

Commit

Permalink
feat(client-emr): Update APIs to allow modification of ODCR options, …
Browse files Browse the repository at this point in the history
…allocation strategy, and InstanceTypeConfigs on running InstanceFleet clusters.
  • Loading branch information
awstools committed Sep 12, 2024
1 parent b2fefb3 commit b3df65a
Show file tree
Hide file tree
Showing 7 changed files with 245 additions and 85 deletions.
11 changes: 9 additions & 2 deletions clients/client-emr/src/commands/AddInstanceFleetCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,17 @@ export interface AddInstanceFleetCommandOutput extends AddInstanceFleetOutput, _
* },
* ResizeSpecifications: { // InstanceFleetResizingSpecifications
* SpotResizeSpecification: { // SpotResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "capacity-optimized" || "price-capacity-optimized" || "lowest-price" || "diversified" || "capacity-optimized-prioritized",
* },
* OnDemandResizeSpecification: { // OnDemandResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "lowest-price" || "prioritized",
* CapacityReservationOptions: {
* UsageStrategy: "use-capacity-reservations-first",
* CapacityReservationPreference: "open" || "none",
* CapacityReservationResourceGroupArn: "STRING_VALUE",
* },
* },
* },
* },
Expand Down
11 changes: 9 additions & 2 deletions clients/client-emr/src/commands/ListInstanceFleetsCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,17 @@ export interface ListInstanceFleetsCommandOutput extends ListInstanceFleetsOutpu
* // },
* // ResizeSpecifications: { // InstanceFleetResizingSpecifications
* // SpotResizeSpecification: { // SpotResizingSpecification
* // TimeoutDurationMinutes: Number("int"), // required
* // TimeoutDurationMinutes: Number("int"),
* // AllocationStrategy: "capacity-optimized" || "price-capacity-optimized" || "lowest-price" || "diversified" || "capacity-optimized-prioritized",
* // },
* // OnDemandResizeSpecification: { // OnDemandResizingSpecification
* // TimeoutDurationMinutes: Number("int"), // required
* // TimeoutDurationMinutes: Number("int"),
* // AllocationStrategy: "lowest-price" || "prioritized",
* // CapacityReservationOptions: {
* // UsageStrategy: "use-capacity-reservations-first",
* // CapacityReservationPreference: "open" || "none",
* // CapacityReservationResourceGroupArn: "STRING_VALUE",
* // },
* // },
* // },
* // },
Expand Down
52 changes: 50 additions & 2 deletions clients/client-emr/src/commands/ModifyInstanceFleetCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,60 @@ export interface ModifyInstanceFleetCommandOutput extends __MetadataBearer {}
* TargetSpotCapacity: Number("int"),
* ResizeSpecifications: { // InstanceFleetResizingSpecifications
* SpotResizeSpecification: { // SpotResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "capacity-optimized" || "price-capacity-optimized" || "lowest-price" || "diversified" || "capacity-optimized-prioritized",
* },
* OnDemandResizeSpecification: { // OnDemandResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "lowest-price" || "prioritized",
* CapacityReservationOptions: { // OnDemandCapacityReservationOptions
* UsageStrategy: "use-capacity-reservations-first",
* CapacityReservationPreference: "open" || "none",
* CapacityReservationResourceGroupArn: "STRING_VALUE",
* },
* },
* },
* InstanceTypeConfigs: [ // InstanceTypeConfigList
* { // InstanceTypeConfig
* InstanceType: "STRING_VALUE", // required
* WeightedCapacity: Number("int"),
* BidPrice: "STRING_VALUE",
* BidPriceAsPercentageOfOnDemandPrice: Number("double"),
* EbsConfiguration: { // EbsConfiguration
* EbsBlockDeviceConfigs: [ // EbsBlockDeviceConfigList
* { // EbsBlockDeviceConfig
* VolumeSpecification: { // VolumeSpecification
* VolumeType: "STRING_VALUE", // required
* Iops: Number("int"),
* SizeInGB: Number("int"), // required
* Throughput: Number("int"),
* },
* VolumesPerInstance: Number("int"),
* },
* ],
* EbsOptimized: true || false,
* },
* Configurations: [ // ConfigurationList
* { // Configuration
* Classification: "STRING_VALUE",
* Configurations: [
* {
* Classification: "STRING_VALUE",
* Configurations: "<ConfigurationList>",
* Properties: { // StringMap
* "<keys>": "STRING_VALUE",
* },
* },
* ],
* Properties: {
* "<keys>": "STRING_VALUE",
* },
* },
* ],
* CustomAmiId: "STRING_VALUE",
* Priority: Number("double"),
* },
* ],
* },
* };
* const command = new ModifyInstanceFleetCommand(input);
Expand Down
11 changes: 9 additions & 2 deletions clients/client-emr/src/commands/RunJobFlowCommand.ts
Original file line number Diff line number Diff line change
Expand Up @@ -196,10 +196,17 @@ export interface RunJobFlowCommandOutput extends RunJobFlowOutput, __MetadataBea
* },
* ResizeSpecifications: { // InstanceFleetResizingSpecifications
* SpotResizeSpecification: { // SpotResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "capacity-optimized" || "price-capacity-optimized" || "lowest-price" || "diversified" || "capacity-optimized-prioritized",
* },
* OnDemandResizeSpecification: { // OnDemandResizingSpecification
* TimeoutDurationMinutes: Number("int"), // required
* TimeoutDurationMinutes: Number("int"),
* AllocationStrategy: "lowest-price" || "prioritized",
* CapacityReservationOptions: {
* UsageStrategy: "use-capacity-reservations-first",
* CapacityReservationPreference: "open" || "none",
* CapacityReservationResourceGroupArn: "STRING_VALUE",
* },
* },
* },
* },
Expand Down
151 changes: 89 additions & 62 deletions clients/client-emr/src/models/models_0.ts
Original file line number Diff line number Diff line change
Expand Up @@ -332,8 +332,7 @@ export interface SpotProvisioningSpecification {
}

/**
* <p>The launch specification for Spot Instances in the fleet, which determines the defined
* duration, provisioning timeout behavior, and allocation strategy.</p>
* <p>The launch specification for On-Demand and Spot Instances in the fleet.</p>
* <note>
* <p>The instance fleet configuration is available only in Amazon EMR releases
* 4.8.0 and later, excluding 5.0.x versions. On-Demand and Spot instance allocation
Expand All @@ -343,15 +342,15 @@ export interface SpotProvisioningSpecification {
*/
export interface InstanceFleetProvisioningSpecifications {
/**
* <p>The launch specification for Spot instances in the fleet, which determines the defined
* duration, provisioning timeout behavior, and allocation strategy.</p>
* <p>The launch specification for Spot instances in the fleet, which determines the allocation strategy, defined
* duration, and provisioning timeout behavior.</p>
* @public
*/
SpotSpecification?: SpotProvisioningSpecification;

/**
* <p> The launch specification for On-Demand Instances in the instance fleet, which
* determines the allocation strategy. </p>
* determines the allocation strategy and capacity reservation options.</p>
* <note>
* <p>The instance fleet configuration is available only in Amazon EMR releases
* 4.8.0 and later, excluding 5.0.x versions. On-Demand Instances allocation strategy is
Expand All @@ -377,7 +376,20 @@ export interface OnDemandResizingSpecification {
* Amazon EMR SDK ModifyInstanceFleet API) or by Amazon EMR due to Amazon EC2 Spot Reclamation.</p>
* @public
*/
TimeoutDurationMinutes: number | undefined;
TimeoutDurationMinutes?: number;

/**
* <p>Specifies the allocation strategy to use to launch On-Demand instances during a resize. The default is <code>lowest-price</code>.</p>
* @public
*/
AllocationStrategy?: OnDemandProvisioningAllocationStrategy;

/**
* <p>Describes the strategy for using unused Capacity Reservations for fulfilling On-Demand
* capacity.</p>
* @public
*/
CapacityReservationOptions?: OnDemandCapacityReservationOptions;
}

/**
Expand All @@ -395,7 +407,15 @@ export interface SpotResizingSpecification {
* modify-instance-fleet or Amazon EMR SDK ModifyInstanceFleet API) or by Amazon EMR due to Amazon EC2 Spot Reclamation.</p>
* @public
*/
TimeoutDurationMinutes: number | undefined;
TimeoutDurationMinutes?: number;

/**
* <p>Specifies the allocation strategy to use to launch Spot instances during a resize. If you run Amazon EMR releases 6.9.0 or higher,
* the default is <code>price-capacity-optimized</code>. If you run Amazon EMR releases 6.8.0 or lower, the default is
* <code>capacity-optimized</code>.</p>
* @public
*/
AllocationStrategy?: SpotProvisioningAllocationStrategy;
}

/**
Expand All @@ -405,14 +425,14 @@ export interface SpotResizingSpecification {
export interface InstanceFleetResizingSpecifications {
/**
* <p>The resize specification for Spot Instances in the instance fleet, which contains the
* resize timeout period. </p>
* allocation strategy and the resize timeout period. </p>
* @public
*/
SpotResizeSpecification?: SpotResizingSpecification;

/**
* <p>The resize specification for On-Demand Instances in the instance fleet, which contains
* the resize timeout period. </p>
* the allocation strategy, capacity reservation options, and the resize timeout period. </p>
* @public
*/
OnDemandResizeSpecification?: OnDemandResizingSpecification;
Expand Down Expand Up @@ -5446,59 +5466,6 @@ export interface ModifyClusterOutput {
StepConcurrencyLevel?: number;
}

/**
* <p>Configuration parameters for an instance fleet modification request.</p>
* <note>
* <p>The instance fleet configuration is available only in Amazon EMR releases
* 4.8.0 and later, excluding 5.0.x versions.</p>
* </note>
* @public
*/
export interface InstanceFleetModifyConfig {
/**
* <p>A unique identifier for the instance fleet.</p>
* @public
*/
InstanceFleetId: string | undefined;

/**
* <p>The target capacity of On-Demand units for the instance fleet. For more information see
* <a>InstanceFleetConfig$TargetOnDemandCapacity</a>.</p>
* @public
*/
TargetOnDemandCapacity?: number;

/**
* <p>The target capacity of Spot units for the instance fleet. For more information, see
* <a>InstanceFleetConfig$TargetSpotCapacity</a>.</p>
* @public
*/
TargetSpotCapacity?: number;

/**
* <p>The resize specification for the instance fleet.</p>
* @public
*/
ResizeSpecifications?: InstanceFleetResizingSpecifications;
}

/**
* @public
*/
export interface ModifyInstanceFleetInput {
/**
* <p>The unique identifier of the cluster.</p>
* @public
*/
ClusterId: string | undefined;

/**
* <p>The configuration parameters of the instance fleet.</p>
* @public
*/
InstanceFleet: InstanceFleetModifyConfig | undefined;
}

/**
* @public
* @enum
Expand Down Expand Up @@ -6981,6 +6948,49 @@ export interface InstanceFleetConfig {
ResizeSpecifications?: InstanceFleetResizingSpecifications;
}

/**
* <p>Configuration parameters for an instance fleet modification request.</p>
* <note>
* <p>The instance fleet configuration is available only in Amazon EMR releases
* 4.8.0 and later, excluding 5.0.x versions.</p>
* </note>
* @public
*/
export interface InstanceFleetModifyConfig {
/**
* <p>A unique identifier for the instance fleet.</p>
* @public
*/
InstanceFleetId: string | undefined;

/**
* <p>The target capacity of On-Demand units for the instance fleet. For more information see
* <a>InstanceFleetConfig$TargetOnDemandCapacity</a>.</p>
* @public
*/
TargetOnDemandCapacity?: number;

/**
* <p>The target capacity of Spot units for the instance fleet. For more information, see
* <a>InstanceFleetConfig$TargetSpotCapacity</a>.</p>
* @public
*/
TargetSpotCapacity?: number;

/**
* <p>The resize specification for the instance fleet.</p>
* @public
*/
ResizeSpecifications?: InstanceFleetResizingSpecifications;

/**
* <p>An array of InstanceTypeConfig objects that specify how Amazon EMR provisions Amazon EC2 instances
* when it fulfills On-Demand and Spot capacities. For more information, see <a href="https://docs.aws.amazon.com/emr/latest/APIReference/API_InstanceTypeConfig.html">InstanceTypeConfig</a>.</p>
* @public
*/
InstanceTypeConfigs?: InstanceTypeConfig[];
}

/**
* <p>Change the size of some instance groups.</p>
* @public
Expand Down Expand Up @@ -7146,6 +7156,23 @@ export interface InstanceGroup {
CustomAmiId?: string;
}

/**
* @public
*/
export interface ModifyInstanceFleetInput {
/**
* <p>The unique identifier of the cluster.</p>
* @public
*/
ClusterId: string | undefined;

/**
* <p>The configuration parameters of the instance fleet.</p>
* @public
*/
InstanceFleet: InstanceFleetModifyConfig | undefined;
}

/**
* @public
*/
Expand Down
25 changes: 22 additions & 3 deletions clients/client-emr/src/protocols/Aws_json1_1.ts
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,7 @@ export const se_ModifyInstanceFleetCommand = async (
): Promise<__HttpRequest> => {
const headers: __HeaderBag = sharedHeaders("ModifyInstanceFleet");
let body: any;
body = JSON.stringify(_json(input));
body = JSON.stringify(se_ModifyInstanceFleetInput(input, context));
return buildHttpRpcRequest(context, headers, "/", undefined, body);
};

Expand Down Expand Up @@ -2428,7 +2428,18 @@ const se_InstanceFleetConfigList = (input: InstanceFleetConfig[], context: __Ser
});
};

// se_InstanceFleetModifyConfig omitted.
/**
* serializeAws_json1_1InstanceFleetModifyConfig
*/
const se_InstanceFleetModifyConfig = (input: InstanceFleetModifyConfig, context: __SerdeContext): any => {
return take(input, {
InstanceFleetId: [],
InstanceTypeConfigs: (_) => se_InstanceTypeConfigList(_, context),
ResizeSpecifications: _json,
TargetOnDemandCapacity: [],
TargetSpotCapacity: [],
});
};

// se_InstanceFleetProvisioningSpecifications omitted.

Expand Down Expand Up @@ -2609,7 +2620,15 @@ const se_ListNotebookExecutionsInput = (input: ListNotebookExecutionsInput, cont

// se_ModifyClusterInput omitted.

// se_ModifyInstanceFleetInput omitted.
/**
* serializeAws_json1_1ModifyInstanceFleetInput
*/
const se_ModifyInstanceFleetInput = (input: ModifyInstanceFleetInput, context: __SerdeContext): any => {
return take(input, {
ClusterId: [],
InstanceFleet: (_) => se_InstanceFleetModifyConfig(_, context),
});
};

/**
* serializeAws_json1_1ModifyInstanceGroupsInput
Expand Down
Loading

0 comments on commit b3df65a

Please sign in to comment.