Skip to content

Commit 3589a0f

Browse files
author
awstools
committed
feat(client-auto-scaling): Auto Scaling groups now support the ability to strictly balance instances across Availability Zones by configuring the AvailabilityZoneDistribution parameter. If balanced-only is configured for a group, launches will always be attempted in the under scaled Availability Zone even if it is unhealthy.
1 parent 6607253 commit 3589a0f

File tree

6 files changed

+162
-0
lines changed

6 files changed

+162
-0
lines changed

clients/client-auto-scaling/src/commands/CreateAutoScalingGroupCommand.ts

+3
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ export interface CreateAutoScalingGroupCommandOutput extends __MetadataBearer {}
208208
* MinHealthyPercentage: Number("int"),
209209
* MaxHealthyPercentage: Number("int"),
210210
* },
211+
* AvailabilityZoneDistribution: { // AvailabilityZoneDistribution
212+
* CapacityDistributionStrategy: "balanced-only" || "balanced-best-effort",
213+
* },
211214
* };
212215
* const command = new CreateAutoScalingGroupCommand(input);
213216
* const response = await client.send(command);

clients/client-auto-scaling/src/commands/DescribeAutoScalingGroupsCommand.ts

+3
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,9 @@ export interface DescribeAutoScalingGroupsCommandOutput extends AutoScalingGroup
247247
* // MinHealthyPercentage: Number("int"),
248248
* // MaxHealthyPercentage: Number("int"),
249249
* // },
250+
* // AvailabilityZoneDistribution: { // AvailabilityZoneDistribution
251+
* // CapacityDistributionStrategy: "balanced-only" || "balanced-best-effort",
252+
* // },
250253
* // },
251254
* // ],
252255
* // NextToken: "STRING_VALUE",

clients/client-auto-scaling/src/commands/UpdateAutoScalingGroupCommand.ts

+3
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,9 @@ export interface UpdateAutoScalingGroupCommandOutput extends __MetadataBearer {}
204204
* MinHealthyPercentage: Number("int"),
205205
* MaxHealthyPercentage: Number("int"),
206206
* },
207+
* AvailabilityZoneDistribution: { // AvailabilityZoneDistribution
208+
* CapacityDistributionStrategy: "balanced-only" || "balanced-best-effort",
209+
* },
207210
* };
208211
* const command = new UpdateAutoScalingGroupCommand(input);
209212
* const response = await client.send(command);

clients/client-auto-scaling/src/models/models_0.ts

+62
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,46 @@ export interface CompleteLifecycleActionType {
744744
InstanceId?: string;
745745
}
746746

747+
/**
748+
* @public
749+
* @enum
750+
*/
751+
export const CapacityDistributionStrategy = {
752+
BALANCED_BEST_EFFORT: "balanced-best-effort",
753+
BALANCED_ONLY: "balanced-only",
754+
} as const;
755+
756+
/**
757+
* @public
758+
*/
759+
export type CapacityDistributionStrategy =
760+
(typeof CapacityDistributionStrategy)[keyof typeof CapacityDistributionStrategy];
761+
762+
/**
763+
* <p>
764+
* Describes an Availability Zone distribution.
765+
* </p>
766+
* @public
767+
*/
768+
export interface AvailabilityZoneDistribution {
769+
/**
770+
* <p>
771+
* If launches fail in an Availability Zone, the following strategies are available. The default is <code>balanced-best-effort</code>. </p>
772+
* <ul>
773+
* <li>
774+
* <p>
775+
* <code>balanced-only</code> - If launches fail in an Availability Zone, Auto Scaling will continue to attempt to launch in the unhealthy zone to preserve a balanced distribution.</p>
776+
* </li>
777+
* <li>
778+
* <p>
779+
* <code>balanced-best-effort</code> - If launches fail in an Availability Zone, Auto Scaling will attempt to launch in another healthy Availability Zone instead.</p>
780+
* </li>
781+
* </ul>
782+
* @public
783+
*/
784+
CapacityDistributionStrategy?: CapacityDistributionStrategy;
785+
}
786+
747787
/**
748788
* <p>Describes an instance maintenance policy.</p>
749789
* <p>For more information, see <a href="https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html">Set instance maintenance policy</a> in the
@@ -2103,6 +2143,12 @@ export interface CreateAutoScalingGroupType {
21032143
* @public
21042144
*/
21052145
InstanceMaintenancePolicy?: InstanceMaintenancePolicy;
2146+
2147+
/**
2148+
* <p>The instance capacity distribution across Availability Zones.</p>
2149+
* @public
2150+
*/
2151+
AvailabilityZoneDistribution?: AvailabilityZoneDistribution;
21062152
}
21072153

21082154
/**
@@ -3481,6 +3527,14 @@ export interface AutoScalingGroup {
34813527
* @public
34823528
*/
34833529
InstanceMaintenancePolicy?: InstanceMaintenancePolicy;
3530+
3531+
/**
3532+
* <p>
3533+
* The instance capacity distribution across Availability Zones.
3534+
* </p>
3535+
* @public
3536+
*/
3537+
AvailabilityZoneDistribution?: AvailabilityZoneDistribution;
34843538
}
34853539

34863540
/**
@@ -8241,4 +8295,12 @@ export interface UpdateAutoScalingGroupType {
82418295
* @public
82428296
*/
82438297
InstanceMaintenancePolicy?: InstanceMaintenancePolicy;
8298+
8299+
/**
8300+
* <p>
8301+
* The instance capacity distribution across Availability Zones.
8302+
* </p>
8303+
* @public
8304+
*/
8305+
AvailabilityZoneDistribution?: AvailabilityZoneDistribution;
82448306
}

clients/client-auto-scaling/src/protocols/Aws_query.ts

+42
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ import {
253253
AutoScalingGroupsType,
254254
AutoScalingInstanceDetails,
255255
AutoScalingInstancesType,
256+
AvailabilityZoneDistribution,
256257
BaselineEbsBandwidthMbpsRequest,
257258
BatchDeleteScheduledActionAnswer,
258259
BatchDeleteScheduledActionType,
@@ -3248,6 +3249,17 @@ const se_AutoScalingNotificationTypes = (input: string[], context: __SerdeContex
32483249
return entries;
32493250
};
32503251

3252+
/**
3253+
* serializeAws_queryAvailabilityZoneDistribution
3254+
*/
3255+
const se_AvailabilityZoneDistribution = (input: AvailabilityZoneDistribution, context: __SerdeContext): any => {
3256+
const entries: any = {};
3257+
if (input[_CDS] != null) {
3258+
entries[_CDS] = input[_CDS];
3259+
}
3260+
return entries;
3261+
};
3262+
32513263
/**
32523264
* serializeAws_queryAvailabilityZones
32533265
*/
@@ -3598,6 +3610,13 @@ const se_CreateAutoScalingGroupType = (input: CreateAutoScalingGroupType, contex
35983610
entries[loc] = value;
35993611
});
36003612
}
3613+
if (input[_AZD] != null) {
3614+
const memberEntries = se_AvailabilityZoneDistribution(input[_AZD], context);
3615+
Object.entries(memberEntries).forEach(([key, value]) => {
3616+
const loc = `AvailabilityZoneDistribution.${key}`;
3617+
entries[loc] = value;
3618+
});
3619+
}
36013620
return entries;
36023621
};
36033622

@@ -6359,6 +6378,13 @@ const se_UpdateAutoScalingGroupType = (input: UpdateAutoScalingGroupType, contex
63596378
entries[loc] = value;
63606379
});
63616380
}
6381+
if (input[_AZD] != null) {
6382+
const memberEntries = se_AvailabilityZoneDistribution(input[_AZD], context);
6383+
Object.entries(memberEntries).forEach(([key, value]) => {
6384+
const loc = `AvailabilityZoneDistribution.${key}`;
6385+
entries[loc] = value;
6386+
});
6387+
}
63626388
return entries;
63636389
};
63646390

@@ -6800,6 +6826,9 @@ const de_AutoScalingGroup = (output: any, context: __SerdeContext): AutoScalingG
68006826
if (output[_IMP] != null) {
68016827
contents[_IMP] = de_InstanceMaintenancePolicy(output[_IMP], context);
68026828
}
6829+
if (output[_AZD] != null) {
6830+
contents[_AZD] = de_AvailabilityZoneDistribution(output[_AZD], context);
6831+
}
68036832
return contents;
68046833
};
68056834

@@ -6906,6 +6935,17 @@ const de_AutoScalingNotificationTypes = (output: any, context: __SerdeContext):
69066935
});
69076936
};
69086937

6938+
/**
6939+
* deserializeAws_queryAvailabilityZoneDistribution
6940+
*/
6941+
const de_AvailabilityZoneDistribution = (output: any, context: __SerdeContext): AvailabilityZoneDistribution => {
6942+
const contents: any = {};
6943+
if (output[_CDS] != null) {
6944+
contents[_CDS] = __expectString(output[_CDS]);
6945+
}
6946+
return contents;
6947+
};
6948+
69096949
/**
69106950
* deserializeAws_queryAvailabilityZones
69116951
*/
@@ -9425,6 +9465,7 @@ const _ATS = "AttachTrafficSources";
94259465
const _ATd = "AdjustmentType";
94269466
const _ATdj = "AdjustmentTypes";
94279467
const _AZ = "AvailabilityZones";
9468+
const _AZD = "AvailabilityZoneDistribution";
94289469
const _AZv = "AvailabilityZone";
94299470
const _Ac = "Activities";
94309471
const _Act = "Activity";
@@ -9441,6 +9482,7 @@ const _C = "Context";
94419482
const _CASG = "CreateAutoScalingGroup";
94429483
const _CCMS = "CustomizedCapacityMetricSpecification";
94439484
const _CD = "CheckpointDelay";
9485+
const _CDS = "CapacityDistributionStrategy";
94449486
const _CF = "CapacityForecast";
94459487
const _CIR = "CancelInstanceRefresh";
94469488
const _CLA = "CompleteLifecycleAction";

codegen/sdk-codegen/aws-models/auto-scaling.json

+49
Original file line numberDiff line numberDiff line change
@@ -918,6 +918,12 @@
918918
"traits": {
919919
"smithy.api#documentation": "<p>An instance maintenance policy.</p>"
920920
}
921+
},
922+
"AvailabilityZoneDistribution": {
923+
"target": "com.amazonaws.autoscaling#AvailabilityZoneDistribution",
924+
"traits": {
925+
"smithy.api#documentation": "<p>\n The instance capacity distribution across Availability Zones.\n </p>"
926+
}
921927
}
922928
},
923929
"traits": {
@@ -2299,6 +2305,20 @@
22992305
}
23002306
}
23012307
},
2308+
"com.amazonaws.autoscaling#AvailabilityZoneDistribution": {
2309+
"type": "structure",
2310+
"members": {
2311+
"CapacityDistributionStrategy": {
2312+
"target": "com.amazonaws.autoscaling#CapacityDistributionStrategy",
2313+
"traits": {
2314+
"smithy.api#documentation": "<p>\n If launches fail in an Availability Zone, the following strategies are available. The default is <code>balanced-best-effort</code>. </p>\n <ul>\n <li>\n <p>\n <code>balanced-only</code> - If launches fail in an Availability Zone, Auto Scaling will continue to attempt to launch in the unhealthy zone to preserve a balanced distribution.</p>\n </li>\n <li>\n <p>\n <code>balanced-best-effort</code> - If launches fail in an Availability Zone, Auto Scaling will attempt to launch in another healthy Availability Zone instead.</p>\n </li>\n </ul>"
2315+
}
2316+
}
2317+
},
2318+
"traits": {
2319+
"smithy.api#documentation": "<p>\n Describes an Availability Zone distribution.\n </p>"
2320+
}
2321+
},
23022322
"com.amazonaws.autoscaling#AvailabilityZones": {
23032323
"type": "list",
23042324
"member": {
@@ -2625,6 +2645,23 @@
26252645
}
26262646
}
26272647
},
2648+
"com.amazonaws.autoscaling#CapacityDistributionStrategy": {
2649+
"type": "enum",
2650+
"members": {
2651+
"BALANCED_ONLY": {
2652+
"target": "smithy.api#Unit",
2653+
"traits": {
2654+
"smithy.api#enumValue": "balanced-only"
2655+
}
2656+
},
2657+
"BALANCED_BEST_EFFORT": {
2658+
"target": "smithy.api#Unit",
2659+
"traits": {
2660+
"smithy.api#enumValue": "balanced-best-effort"
2661+
}
2662+
}
2663+
}
2664+
},
26282665
"com.amazonaws.autoscaling#CapacityForecast": {
26292666
"type": "structure",
26302667
"members": {
@@ -3098,6 +3135,12 @@
30983135
"traits": {
30993136
"smithy.api#documentation": "<p>An instance maintenance policy. For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html\">Set instance maintenance policy</a> in the\n <i>Amazon EC2 Auto Scaling User Guide</i>.</p>"
31003137
}
3138+
},
3139+
"AvailabilityZoneDistribution": {
3140+
"target": "com.amazonaws.autoscaling#AvailabilityZoneDistribution",
3141+
"traits": {
3142+
"smithy.api#documentation": "<p>The instance capacity distribution across Availability Zones.</p>"
3143+
}
31013144
}
31023145
}
31033146
},
@@ -10912,6 +10955,12 @@
1091210955
"traits": {
1091310956
"smithy.api#documentation": "<p>An instance maintenance policy. For more information, see <a href=\"https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html\">Set instance maintenance policy</a> in the\n <i>Amazon EC2 Auto Scaling User Guide</i>.</p>"
1091410957
}
10958+
},
10959+
"AvailabilityZoneDistribution": {
10960+
"target": "com.amazonaws.autoscaling#AvailabilityZoneDistribution",
10961+
"traits": {
10962+
"smithy.api#documentation": "<p>\n The instance capacity distribution across Availability Zones.\n </p>"
10963+
}
1091510964
}
1091610965
}
1091710966
},

0 commit comments

Comments
 (0)