1532 lines
58 KiB
TypeScript
1532 lines
58 KiB
TypeScript
import type { Construct } from 'constructs';
|
|
import { CfnAutoScalingGroup } from './autoscaling.generated';
|
|
import type { BasicLifecycleHookProps } from './lifecycle-hook';
|
|
import { LifecycleHook } from './lifecycle-hook';
|
|
import type { BasicScheduledActionProps } from './scheduled-action';
|
|
import { ScheduledAction } from './scheduled-action';
|
|
import type { BasicStepScalingPolicyProps } from './step-scaling-policy';
|
|
import { StepScalingPolicy } from './step-scaling-policy';
|
|
import type { BaseTargetTrackingProps } from './target-tracking-scaling-policy';
|
|
import { TargetTrackingScalingPolicy } from './target-tracking-scaling-policy';
|
|
import { TerminationPolicy } from './termination-policy';
|
|
import type { BlockDevice } from './volume';
|
|
import type { WarmPoolOptions } from './warm-pool';
|
|
import { WarmPool } from './warm-pool';
|
|
import type * as cloudwatch from '../../aws-cloudwatch';
|
|
import * as ec2 from '../../aws-ec2';
|
|
import type * as elb from '../../aws-elasticloadbalancing';
|
|
import * as elbv2 from '../../aws-elasticloadbalancingv2';
|
|
import * as iam from '../../aws-iam';
|
|
import type * as sns from '../../aws-sns';
|
|
import type { CfnCreationPolicy, CfnUpdatePolicy, IResource } from '../../core';
|
|
import { Duration, Resource } from '../../core';
|
|
import type { AutoScalingGroupReference, IAutoScalingGroupRef } from '../../interfaces/generated/aws-autoscaling-interfaces.generated';
|
|
/**
|
|
* The monitoring mode for instances launched in an autoscaling group
|
|
*/
|
|
export declare enum Monitoring {
|
|
/**
|
|
* Generates metrics every 5 minutes
|
|
*/
|
|
BASIC = 0,
|
|
/**
|
|
* Generates metrics every minute
|
|
*/
|
|
DETAILED = 1
|
|
}
|
|
/**
|
|
* Deletion protection level for Auto Scaling group
|
|
*/
|
|
export declare enum DeletionProtection {
|
|
/**
|
|
* No deletion protection
|
|
*/
|
|
NONE = "none",
|
|
/**
|
|
* Block force delete operations
|
|
*/
|
|
PREVENT_FORCE_DELETION = "prevent-force-deletion",
|
|
/**
|
|
* Block all delete operations
|
|
*/
|
|
PREVENT_ALL_DELETION = "prevent-all-deletion"
|
|
}
|
|
/**
|
|
* Basic properties of an AutoScalingGroup, except the exact machines to run and where they should run
|
|
*
|
|
* Constructs that want to create AutoScalingGroups can inherit
|
|
* this interface and specialize the essential parts in various ways.
|
|
*/
|
|
export interface CommonAutoScalingGroupProps {
|
|
/**
|
|
* Minimum number of instances in the fleet
|
|
*
|
|
* @default 1
|
|
*/
|
|
readonly minCapacity?: number;
|
|
/**
|
|
* Maximum number of instances in the fleet
|
|
*
|
|
* @default desiredCapacity
|
|
*/
|
|
readonly maxCapacity?: number;
|
|
/**
|
|
* Initial amount of instances in the fleet
|
|
*
|
|
* If this is set to a number, every deployment will reset the amount of
|
|
* instances to this number. It is recommended to leave this value blank.
|
|
*
|
|
* @default minCapacity, and leave unchanged during deployment
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-desiredcapacity
|
|
*/
|
|
readonly desiredCapacity?: number;
|
|
/**
|
|
* Name of SSH keypair to grant access to instances
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* You can either specify `keyPair` or `keyName`, not both.
|
|
*
|
|
* @default - No SSH access will be possible.
|
|
* @deprecated - Use `keyPair` instead - https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2-readme.html#using-an-existing-ec2-key-pair
|
|
*/
|
|
readonly keyName?: string;
|
|
/**
|
|
* The SSH keypair to grant access to the instance.
|
|
*
|
|
* Feature flag `AUTOSCALING_GENERATE_LAUNCH_TEMPLATE` must be enabled to use this property.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified.
|
|
*
|
|
* You can either specify `keyPair` or `keyName`, not both.
|
|
*
|
|
* @default - No SSH access will be possible.
|
|
*/
|
|
readonly keyPair?: ec2.IKeyPair;
|
|
/**
|
|
* Where to place instances within the VPC
|
|
*
|
|
* @default - All Private subnets.
|
|
*/
|
|
readonly vpcSubnets?: ec2.SubnetSelection;
|
|
/**
|
|
* Configure autoscaling group to send notifications about fleet changes to an SNS topic(s)
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-notificationconfigurations
|
|
* @default - No fleet change notifications will be sent.
|
|
*/
|
|
readonly notifications?: NotificationConfiguration[];
|
|
/**
|
|
* Whether the instances can initiate connections to anywhere by default
|
|
*
|
|
* @default true
|
|
*/
|
|
readonly allowAllOutbound?: boolean;
|
|
/**
|
|
* If the ASG has scheduled actions, don't reset unchanged group sizes
|
|
*
|
|
* Only used if the ASG has scheduled actions (which may scale your ASG up
|
|
* or down regardless of cdk deployments). If true, the size of the group
|
|
* will only be reset if it has been changed in the CDK app. If false, the
|
|
* sizes will always be changed back to what they were in the CDK app
|
|
* on deployment.
|
|
*
|
|
* @default true
|
|
*/
|
|
readonly ignoreUnmodifiedSizeProperties?: boolean;
|
|
/**
|
|
* Default scaling cooldown for this AutoScalingGroup
|
|
*
|
|
* @default Duration.minutes(5)
|
|
*/
|
|
readonly cooldown?: Duration;
|
|
/**
|
|
* Whether instances in the Auto Scaling Group should have public
|
|
* IP addresses associated with them.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default - Use subnet setting.
|
|
*/
|
|
readonly associatePublicIpAddress?: boolean;
|
|
/**
|
|
* The maximum hourly price (in USD) to be paid for any Spot Instance launched to fulfill the request. Spot Instances are
|
|
* launched when the price you specify exceeds the current Spot market price.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default none
|
|
*/
|
|
readonly spotPrice?: string;
|
|
/**
|
|
* Configuration for health checks
|
|
*
|
|
* @default - HealthCheck.ec2 with no grace period
|
|
* @deprecated Use `healthChecks` instead
|
|
*/
|
|
readonly healthCheck?: HealthCheck;
|
|
/**
|
|
* Configuration for EC2 or additional health checks
|
|
*
|
|
* Even when using `HealthChecks.withAdditionalChecks()`, the EC2 type is implicitly included.
|
|
*
|
|
* @default - EC2 type with no grace period
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-health-checks.html
|
|
*/
|
|
readonly healthChecks?: HealthChecks;
|
|
/**
|
|
* Specifies how block devices are exposed to the instance. You can specify virtual devices and EBS volumes.
|
|
*
|
|
* Each instance that is launched has an associated root device volume,
|
|
* either an Amazon EBS volume or an instance store volume.
|
|
* You can use block device mappings to specify additional EBS volumes or
|
|
* instance store volumes to attach to an instance when it is launched.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @see https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html
|
|
*
|
|
* @default - Uses the block device mapping of the AMI
|
|
*/
|
|
readonly blockDevices?: BlockDevice[];
|
|
/**
|
|
* The maximum amount of time that an instance can be in service. The maximum duration applies
|
|
* to all current and future instances in the group. As an instance approaches its maximum duration,
|
|
* it is terminated and replaced, and cannot be used again.
|
|
*
|
|
* You must specify a value of at least 86,400 seconds (one day). To clear a previously set value,
|
|
* leave this property undefined.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-max-instance-lifetime.html
|
|
*
|
|
* @default none
|
|
*/
|
|
readonly maxInstanceLifetime?: Duration;
|
|
/**
|
|
* Controls whether instances in this group are launched with detailed or basic monitoring.
|
|
*
|
|
* When detailed monitoring is enabled, Amazon CloudWatch generates metrics every minute and your account
|
|
* is charged a fee. When you disable detailed monitoring, CloudWatch generates metrics every 5 minutes.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/latest/userguide/as-instance-monitoring.html#enable-as-instance-metrics
|
|
*
|
|
* @default - Monitoring.DETAILED
|
|
*/
|
|
readonly instanceMonitoring?: Monitoring;
|
|
/**
|
|
* Enable monitoring for group metrics, these metrics describe the group rather than any of its instances.
|
|
* To report all group metrics use `GroupMetrics.all()`
|
|
* Group metrics are reported in a granularity of 1 minute at no additional charge.
|
|
* @default - no group metrics will be reported
|
|
*
|
|
*/
|
|
readonly groupMetrics?: GroupMetrics[];
|
|
/**
|
|
* Configure waiting for signals during deployment
|
|
*
|
|
* Use this to pause the CloudFormation deployment to wait for the instances
|
|
* in the AutoScalingGroup to report successful startup during
|
|
* creation and updates. The UserData script needs to invoke `cfn-signal`
|
|
* with a success or failure code after it is done setting up the instance.
|
|
*
|
|
* Without waiting for signals, the CloudFormation deployment will proceed as
|
|
* soon as the AutoScalingGroup has been created or updated but before the
|
|
* instances in the group have been started.
|
|
*
|
|
* For example, to have instances wait for an Elastic Load Balancing health check before
|
|
* they signal success, add a health-check verification by using the
|
|
* cfn-init helper script. For an example, see the verify_instance_health
|
|
* command in the Auto Scaling rolling updates sample template:
|
|
*
|
|
* https://github.com/awslabs/aws-cloudformation-templates/blob/master/aws/services/AutoScaling/AutoScalingRollingUpdates.yaml
|
|
*
|
|
* @default - Do not wait for signals
|
|
*/
|
|
readonly signals?: Signals;
|
|
/**
|
|
* What to do when an AutoScalingGroup's instance configuration is changed
|
|
*
|
|
* This is applied when any of the settings on the ASG are changed that
|
|
* affect how the instances should be created (VPC, instance type, startup
|
|
* scripts, etc.). It indicates how the existing instances should be
|
|
* replaced with new instances matching the new config. By default, nothing
|
|
* is done and only new instances are launched with the new config.
|
|
*
|
|
* @default - `UpdatePolicy.rollingUpdate()` if using `init`, `UpdatePolicy.none()` otherwise
|
|
*/
|
|
readonly updatePolicy?: UpdatePolicy;
|
|
/**
|
|
* Whether newly-launched instances are protected from termination by Amazon
|
|
* EC2 Auto Scaling when scaling in.
|
|
*
|
|
* By default, Auto Scaling can terminate an instance at any time after launch
|
|
* when scaling in an Auto Scaling Group, subject to the group's termination
|
|
* policy. However, you may wish to protect newly-launched instances from
|
|
* being scaled in if they are going to run critical applications that should
|
|
* not be prematurely terminated.
|
|
*
|
|
* This flag must be enabled if the Auto Scaling Group will be associated with
|
|
* an ECS Capacity Provider with managed termination protection.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly newInstancesProtectedFromScaleIn?: boolean;
|
|
/**
|
|
* The name of the Auto Scaling group. This name must be unique per Region per account.
|
|
* @default - Auto generated by CloudFormation
|
|
*/
|
|
readonly autoScalingGroupName?: string;
|
|
/**
|
|
* A policy or a list of policies that are used to select the instances to
|
|
* terminate. The policies are executed in the order that you list them.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-instance-termination.html
|
|
*
|
|
* @default - `TerminationPolicy.DEFAULT`
|
|
*/
|
|
readonly terminationPolicies?: TerminationPolicy[];
|
|
/**
|
|
* A lambda function Arn that can be used as a custom termination policy to select the instances
|
|
* to terminate. This property must be specified if the TerminationPolicy.CUSTOM_LAMBDA_FUNCTION
|
|
* is used.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/lambda-custom-termination-policy.html
|
|
*
|
|
* @default - No lambda function Arn will be supplied
|
|
*/
|
|
readonly terminationPolicyCustomLambdaFunctionArn?: string;
|
|
/**
|
|
* The amount of time, in seconds, until a newly launched instance can contribute to the Amazon CloudWatch metrics.
|
|
* This delay lets an instance finish initializing before Amazon EC2 Auto Scaling aggregates instance metrics,
|
|
* resulting in more reliable usage data. Set this value equal to the amount of time that it takes for resource
|
|
* consumption to become stable after an instance reaches the InService state.
|
|
*
|
|
* To optimize the performance of scaling policies that scale continuously, such as target tracking and
|
|
* step scaling policies, we strongly recommend that you enable the default instance warmup, even if its value is set to 0 seconds
|
|
*
|
|
* Default instance warmup will not be added if no value is specified
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-default-instance-warmup.html
|
|
*
|
|
* @default None
|
|
*/
|
|
readonly defaultInstanceWarmup?: Duration;
|
|
/**
|
|
* Indicates whether Capacity Rebalancing is enabled. When you turn on Capacity Rebalancing, Amazon EC2 Auto Scaling
|
|
* attempts to launch a Spot Instance whenever Amazon EC2 notifies that a Spot Instance is at an elevated risk of
|
|
* interruption. After launching a new instance, it then terminates an old instance.
|
|
*
|
|
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-as-group.html#cfn-as-group-capacityrebalance
|
|
*
|
|
* @default false
|
|
*
|
|
*/
|
|
readonly capacityRebalance?: boolean;
|
|
/**
|
|
* Add SSM session permissions to the instance role
|
|
*
|
|
* Setting this to `true` adds the necessary permissions to connect
|
|
* to the instance using SSM Session Manager. You can do this
|
|
* from the AWS Console.
|
|
*
|
|
* NOTE: Setting this flag to `true` may not be enough by itself.
|
|
* You must also use an AMI that comes with the SSM Agent, or install
|
|
* the SSM Agent yourself. See
|
|
* [Working with SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)
|
|
* in the SSM Developer Guide.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly ssmSessionPermissions?: boolean;
|
|
/**
|
|
* The strategy for distributing instances across Availability Zones.
|
|
* @default None
|
|
*/
|
|
readonly azCapacityDistributionStrategy?: CapacityDistributionStrategy;
|
|
/**
|
|
* Deletion protection for the Auto Scaling group.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/resource-deletion-protection.html#asg-deletion-protection
|
|
*
|
|
* @default DeletionProtection.NONE
|
|
*/
|
|
readonly deletionProtection?: DeletionProtection;
|
|
/**
|
|
* An instance lifecycle policy that defines how instances should be handled
|
|
* during lifecycle events, particularly when lifecycle hooks are abandoned or fail.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/instance-lifecycle-policy.html
|
|
*
|
|
* @default None
|
|
*/
|
|
readonly instanceLifecyclePolicy?: InstanceLifecyclePolicy;
|
|
}
|
|
/**
|
|
* MixedInstancesPolicy allows you to configure a group that diversifies across On-Demand Instances
|
|
* and Spot Instances of multiple instance types. For more information, see Auto Scaling groups with
|
|
* multiple instance types and purchase options in the Amazon EC2 Auto Scaling User Guide:
|
|
*
|
|
* https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html
|
|
*/
|
|
export interface MixedInstancesPolicy {
|
|
/**
|
|
* InstancesDistribution to use.
|
|
*
|
|
* @default - The value for each property in it uses a default value.
|
|
*/
|
|
readonly instancesDistribution?: InstancesDistribution;
|
|
/**
|
|
* Launch template to use.
|
|
*/
|
|
readonly launchTemplate: ec2.ILaunchTemplate;
|
|
/**
|
|
* Launch template overrides.
|
|
*
|
|
* The maximum number of instance types that can be associated with an Auto Scaling group is 40.
|
|
*
|
|
* The maximum number of distinct launch templates you can define for an Auto Scaling group is 20.
|
|
*
|
|
* @default - Do not provide any overrides
|
|
*/
|
|
readonly launchTemplateOverrides?: LaunchTemplateOverrides[];
|
|
}
|
|
/**
|
|
* Indicates how to allocate instance types to fulfill On-Demand capacity.
|
|
*/
|
|
export declare enum OnDemandAllocationStrategy {
|
|
/**
|
|
* This strategy uses the order of instance types in the LaunchTemplateOverrides to define the launch
|
|
* priority of each instance type. The first instance type in the array is prioritized higher than the
|
|
* last. If all your On-Demand capacity cannot be fulfilled using your highest priority instance, then
|
|
* the Auto Scaling group launches the remaining capacity using the second priority instance type, and
|
|
* so on.
|
|
*/
|
|
PRIORITIZED = "prioritized",
|
|
/**
|
|
* This strategy uses the lowest-price instance types in each Availability Zone based on the current
|
|
* On-Demand instance price.
|
|
*
|
|
* To meet your desired capacity, you might receive On-Demand Instances of more than one instance type
|
|
* in each Availability Zone. This depends on how much capacity you request.
|
|
*/
|
|
LOWEST_PRICE = "lowest-price"
|
|
}
|
|
/**
|
|
* Indicates how to allocate instance types to fulfill Spot capacity.
|
|
*/
|
|
export declare enum SpotAllocationStrategy {
|
|
/**
|
|
* The Auto Scaling group launches instances using the Spot pools with the lowest price, and evenly
|
|
* allocates your instances across the number of Spot pools that you specify.
|
|
*/
|
|
LOWEST_PRICE = "lowest-price",
|
|
/**
|
|
* The Auto Scaling group launches instances using Spot pools that are optimally chosen based on the
|
|
* available Spot capacity.
|
|
*
|
|
* Recommended.
|
|
*/
|
|
CAPACITY_OPTIMIZED = "capacity-optimized",
|
|
/**
|
|
* When you use this strategy, you need to set the order of instance types in the list of launch template
|
|
* overrides from highest to lowest priority (from first to last in the list). Amazon EC2 Auto Scaling
|
|
* honors the instance type priorities on a best-effort basis but optimizes for capacity first.
|
|
*/
|
|
CAPACITY_OPTIMIZED_PRIORITIZED = "capacity-optimized-prioritized",
|
|
/**
|
|
* The price and capacity optimized allocation strategy looks at both price and
|
|
* capacity to select the Spot Instance pools that are the least likely to be
|
|
* interrupted and have the lowest possible price.
|
|
*/
|
|
PRICE_CAPACITY_OPTIMIZED = "price-capacity-optimized"
|
|
}
|
|
/**
|
|
* InstancesDistribution is a subproperty of MixedInstancesPolicy that describes an instances distribution
|
|
* for an Auto Scaling group. The instances distribution specifies the distribution of On-Demand Instances
|
|
* and Spot Instances, the maximum price to pay for Spot Instances, and how the Auto Scaling group allocates
|
|
* instance types to fulfill On-Demand and Spot capacities.
|
|
*
|
|
* For more information and example configurations, see Auto Scaling groups with multiple instance types
|
|
* and purchase options in the Amazon EC2 Auto Scaling User Guide:
|
|
*
|
|
* https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html
|
|
*/
|
|
export interface InstancesDistribution {
|
|
/**
|
|
* Indicates how to allocate instance types to fulfill On-Demand capacity. The only valid value is prioritized,
|
|
* which is also the default value.
|
|
*
|
|
* @default OnDemandAllocationStrategy.PRIORITIZED
|
|
*/
|
|
readonly onDemandAllocationStrategy?: OnDemandAllocationStrategy;
|
|
/**
|
|
* The minimum amount of the Auto Scaling group's capacity that must be fulfilled by On-Demand Instances. This
|
|
* base portion is provisioned first as your group scales. Defaults to 0 if not specified. If you specify weights
|
|
* for the instance types in the overrides, set the value of OnDemandBaseCapacity in terms of the number of
|
|
* capacity units, and not the number of instances.
|
|
*
|
|
* @default 0
|
|
*/
|
|
readonly onDemandBaseCapacity?: number;
|
|
/**
|
|
* Controls the percentages of On-Demand Instances and Spot Instances for your additional capacity beyond
|
|
* OnDemandBaseCapacity. Expressed as a number (for example, 20 specifies 20% On-Demand Instances, 80% Spot Instances).
|
|
* Defaults to 100 if not specified. If set to 100, only On-Demand Instances are provisioned.
|
|
*
|
|
* @default 100
|
|
*/
|
|
readonly onDemandPercentageAboveBaseCapacity?: number;
|
|
/**
|
|
* If the allocation strategy is lowest-price, the Auto Scaling group launches instances using the Spot pools with the
|
|
* lowest price, and evenly allocates your instances across the number of Spot pools that you specify. Defaults to
|
|
* lowest-price if not specified.
|
|
*
|
|
* If the allocation strategy is capacity-optimized (recommended), the Auto Scaling group launches instances using Spot
|
|
* pools that are optimally chosen based on the available Spot capacity. Alternatively, you can use capacity-optimized-prioritized
|
|
* and set the order of instance types in the list of launch template overrides from highest to lowest priority
|
|
* (from first to last in the list). Amazon EC2 Auto Scaling honors the instance type priorities on a best-effort basis but
|
|
* optimizes for capacity first.
|
|
*
|
|
* @default SpotAllocationStrategy.LOWEST_PRICE
|
|
*/
|
|
readonly spotAllocationStrategy?: SpotAllocationStrategy;
|
|
/**
|
|
* The number of Spot Instance pools to use to allocate your Spot capacity. The Spot pools are determined from the different instance
|
|
* types in the overrides. Valid only when the Spot allocation strategy is lowest-price. Value must be in the range of 1 to 20.
|
|
* Defaults to 2 if not specified.
|
|
*
|
|
* @default 2
|
|
*/
|
|
readonly spotInstancePools?: number;
|
|
/**
|
|
* The maximum price per unit hour that you are willing to pay for a Spot Instance. If you leave the value at its default (empty),
|
|
* Amazon EC2 Auto Scaling uses the On-Demand price as the maximum Spot price. To remove a value that you previously set, include
|
|
* the property but specify an empty string ("") for the value.
|
|
*
|
|
* @default "" - On-Demand price
|
|
*/
|
|
readonly spotMaxPrice?: string;
|
|
}
|
|
/**
|
|
* LaunchTemplateOverrides is a subproperty of LaunchTemplate that describes an override for a launch template.
|
|
*/
|
|
export interface LaunchTemplateOverrides {
|
|
/**
|
|
* The instance requirements. Amazon EC2 Auto Scaling uses your specified requirements to identify instance types.
|
|
* Then, it uses your On-Demand and Spot allocation strategies to launch instances from these instance types.
|
|
*
|
|
* You can specify up to four separate sets of instance requirements per Auto Scaling group.
|
|
* This is useful for provisioning instances from different Amazon Machine Images (AMIs) in the same Auto Scaling group.
|
|
* To do this, create the AMIs and create a new launch template for each AMI.
|
|
* Then, create a compatible set of instance requirements for each launch template.
|
|
*
|
|
* You must specify one of instanceRequirements or instanceType.
|
|
*
|
|
* @default - Do not override instance type
|
|
*/
|
|
readonly instanceRequirements?: CfnAutoScalingGroup.InstanceRequirementsProperty;
|
|
/**
|
|
* The instance type, such as m3.xlarge. You must use an instance type that is supported in your requested Region
|
|
* and Availability Zones.
|
|
*
|
|
* You must specify one of instanceRequirements or instanceType.
|
|
*
|
|
* @default - Do not override instance type
|
|
*/
|
|
readonly instanceType?: ec2.InstanceType;
|
|
/**
|
|
* Provides the launch template to be used when launching the instance type. For example, some instance types might
|
|
* require a launch template with a different AMI. If not provided, Amazon EC2 Auto Scaling uses the launch template
|
|
* that's defined for your mixed instances policy.
|
|
*
|
|
* @default - Do not override launch template
|
|
*/
|
|
readonly launchTemplate?: ec2.ILaunchTemplate;
|
|
/**
|
|
* The number of capacity units provided by the specified instance type in terms of virtual CPUs, memory, storage,
|
|
* throughput, or other relative performance characteristic. When a Spot or On-Demand Instance is provisioned, the
|
|
* capacity units count toward the desired capacity. Amazon EC2 Auto Scaling provisions instances until the desired
|
|
* capacity is totally fulfilled, even if this results in an overage. Value must be in the range of 1 to 999.
|
|
*
|
|
* For example, If there are 2 units remaining to fulfill capacity, and Amazon EC2 Auto Scaling can only provision
|
|
* an instance with a WeightedCapacity of 5 units, the instance is provisioned, and the desired capacity is exceeded
|
|
* by 3 units.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-weighting.html
|
|
*
|
|
* @default - Do not provide weight
|
|
*/
|
|
readonly weightedCapacity?: number;
|
|
}
|
|
/**
|
|
* Properties of a Fleet
|
|
*/
|
|
export interface AutoScalingGroupProps extends CommonAutoScalingGroupProps {
|
|
/**
|
|
* VPC to launch these instances in.
|
|
*/
|
|
readonly vpc: ec2.IVpc;
|
|
/**
|
|
* Launch template to use.
|
|
*
|
|
* Launch configuration related settings and MixedInstancesPolicy must not be specified when a
|
|
* launch template is specified.
|
|
*
|
|
* @default - Do not provide any launch template
|
|
*/
|
|
readonly launchTemplate?: ec2.ILaunchTemplate;
|
|
/**
|
|
* Whether safety guardrail should be enforced when migrating to the launch template.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly migrateToLaunchTemplate?: boolean;
|
|
/**
|
|
* Mixed Instances Policy to use.
|
|
*
|
|
* Launch configuration related settings and Launch Template must not be specified when a
|
|
* MixedInstancesPolicy is specified.
|
|
*
|
|
* @default - Do not provide any MixedInstancesPolicy
|
|
*/
|
|
readonly mixedInstancesPolicy?: MixedInstancesPolicy;
|
|
/**
|
|
* Type of instance to launch
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default - Do not provide any instance type
|
|
*/
|
|
readonly instanceType?: ec2.InstanceType;
|
|
/**
|
|
* AMI to launch
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default - Do not provide any machine image
|
|
*/
|
|
readonly machineImage?: ec2.IMachineImage;
|
|
/**
|
|
* Security group to launch the instances in.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default - A SecurityGroup will be created if none is specified.
|
|
*/
|
|
readonly securityGroup?: ec2.ISecurityGroup;
|
|
/**
|
|
* Specific UserData to use
|
|
*
|
|
* The UserData may still be mutated after creation.
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @default - A UserData object appropriate for the MachineImage's
|
|
* Operating System is created.
|
|
*/
|
|
readonly userData?: ec2.UserData;
|
|
/**
|
|
* An IAM role to associate with the instance profile assigned to this Auto Scaling Group.
|
|
*
|
|
* The role must be assumable by the service principal `ec2.amazonaws.com`:
|
|
*
|
|
* `launchTemplate` and `mixedInstancesPolicy` must not be specified when this property is specified
|
|
*
|
|
* @example
|
|
*
|
|
* const role = new iam.Role(this, 'MyRole', {
|
|
* assumedBy: new iam.ServicePrincipal('ec2.amazonaws.com')
|
|
* });
|
|
*
|
|
* @default A role will automatically be created, it can be accessed via the `role` property
|
|
*/
|
|
readonly role?: iam.IRole;
|
|
/**
|
|
* Apply the given CloudFormation Init configuration to the instances in the AutoScalingGroup at startup
|
|
*
|
|
* If you specify `init`, you must also specify `signals` to configure
|
|
* the number of instances to wait for and the timeout for waiting for the
|
|
* init process.
|
|
*
|
|
* @default - no CloudFormation init
|
|
*/
|
|
readonly init?: ec2.CloudFormationInit;
|
|
/**
|
|
* Use the given options for applying CloudFormation Init
|
|
*
|
|
* Describes the configsets to use and the timeout to wait
|
|
*
|
|
* @default - default options
|
|
*/
|
|
readonly initOptions?: ApplyCloudFormationInitOptions;
|
|
/**
|
|
* Whether IMDSv2 should be required on launched instances.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly requireImdsv2?: boolean;
|
|
/**
|
|
* Specifies the upper threshold as a percentage of the desired capacity of the Auto Scaling group.
|
|
* It represents the maximum percentage of the group that can be in service and healthy, or pending,
|
|
* to support your workload when replacing instances.
|
|
*
|
|
* Value range is 0 to 100. After it's set, both `minHealthyPercentage` and `maxHealthyPercentage` to
|
|
* -1 will clear the previously set value.
|
|
*
|
|
* Both or neither of `minHealthyPercentage` and `maxHealthyPercentage` must be specified, and the
|
|
* difference between them cannot be greater than 100. A large range increases the number of
|
|
* instances that can be replaced at the same time.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html
|
|
*
|
|
* @default - No instance maintenance policy.
|
|
*/
|
|
readonly maxHealthyPercentage?: number;
|
|
/**
|
|
* Specifies the lower threshold as a percentage of the desired capacity of the Auto Scaling group.
|
|
* It represents the minimum percentage of the group to keep in service, healthy, and ready to use
|
|
* to support your workload when replacing instances.
|
|
*
|
|
* Value range is 0 to 100. After it's set, both `minHealthyPercentage` and `maxHealthyPercentage` to
|
|
* -1 will clear the previously set value.
|
|
*
|
|
* Both or neither of `minHealthyPercentage` and `maxHealthyPercentage` must be specified, and the
|
|
* difference between them cannot be greater than 100. A large range increases the number of
|
|
* instances that can be replaced at the same time.
|
|
*
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-instance-maintenance-policy.html
|
|
*
|
|
* @default - No instance maintenance policy.
|
|
*/
|
|
readonly minHealthyPercentage?: number;
|
|
}
|
|
/**
|
|
* Configure whether the AutoScalingGroup waits for signals
|
|
*
|
|
* If you do configure waiting for signals, you should make sure the instances
|
|
* invoke `cfn-signal` somewhere in their UserData to signal that they have
|
|
* started up (either successfully or unsuccessfully).
|
|
*
|
|
* Signals are used both during intial creation and subsequent updates.
|
|
*/
|
|
export declare abstract class Signals {
|
|
/**
|
|
* Wait for the desiredCapacity of the AutoScalingGroup amount of signals to have been received
|
|
*
|
|
* If no desiredCapacity has been configured, wait for minCapacity signals intead.
|
|
*
|
|
* This number is used during initial creation and during replacing updates.
|
|
* During rolling updates, all updated instances must send a signal.
|
|
*/
|
|
static waitForAll(options?: SignalsOptions): Signals;
|
|
/**
|
|
* Wait for the minCapacity of the AutoScalingGroup amount of signals to have been received
|
|
*
|
|
* This number is used during initial creation and during replacing updates.
|
|
* During rolling updates, all updated instances must send a signal.
|
|
*/
|
|
static waitForMinCapacity(options?: SignalsOptions): Signals;
|
|
/**
|
|
* Wait for a specific amount of signals to have been received
|
|
*
|
|
* You should send one signal per instance, so this represents the number of
|
|
* instances to wait for.
|
|
*
|
|
* This number is used during initial creation and during replacing updates.
|
|
* During rolling updates, all updated instances must send a signal.
|
|
*/
|
|
static waitForCount(count: number, options?: SignalsOptions): Signals;
|
|
/**
|
|
* Render the ASG's CreationPolicy
|
|
*/
|
|
abstract renderCreationPolicy(renderOptions: RenderSignalsOptions): CfnCreationPolicy;
|
|
/**
|
|
* Helper to render the actual creation policy, as the logic between them is quite similar
|
|
*/
|
|
protected doRender(options: SignalsOptions, count?: number): CfnCreationPolicy;
|
|
}
|
|
/**
|
|
* Input for Signals.renderCreationPolicy
|
|
*/
|
|
export interface RenderSignalsOptions {
|
|
/**
|
|
* The desiredCapacity of the ASG
|
|
*
|
|
* @default - desired capacity not configured
|
|
*/
|
|
readonly desiredCapacity?: number;
|
|
/**
|
|
* The minSize of the ASG
|
|
*
|
|
* @default - minCapacity not configured
|
|
*/
|
|
readonly minCapacity?: number;
|
|
}
|
|
/**
|
|
* Customization options for Signal handling
|
|
*/
|
|
export interface SignalsOptions {
|
|
/**
|
|
* The percentage of signals that need to be successful
|
|
*
|
|
* If this number is less than 100, a percentage of signals may be failure
|
|
* signals while still succeeding the creation or update in CloudFormation.
|
|
*
|
|
* @default 100
|
|
*/
|
|
readonly minSuccessPercentage?: number;
|
|
/**
|
|
* How long to wait for the signals to be sent
|
|
*
|
|
* This should reflect how long it takes your instances to start up
|
|
* (including instance start time and instance initialization time).
|
|
*
|
|
* @default Duration.minutes(5)
|
|
*/
|
|
readonly timeout?: Duration;
|
|
}
|
|
/**
|
|
* How existing instances should be updated
|
|
*/
|
|
export declare abstract class UpdatePolicy {
|
|
/**
|
|
* Create a new AutoScalingGroup and switch over to it
|
|
*/
|
|
static replacingUpdate(): UpdatePolicy;
|
|
/**
|
|
* Replace the instances in the AutoScalingGroup one by one, or in batches
|
|
*/
|
|
static rollingUpdate(options?: RollingUpdateOptions): UpdatePolicy;
|
|
/**
|
|
* Render the ASG's CreationPolicy
|
|
* @internal
|
|
*/
|
|
abstract _renderUpdatePolicy(renderOptions: RenderUpdateOptions): CfnUpdatePolicy;
|
|
}
|
|
/**
|
|
* Options for rendering UpdatePolicy
|
|
*/
|
|
interface RenderUpdateOptions {
|
|
/**
|
|
* The Creation Policy already created
|
|
*
|
|
* @default - no CreationPolicy configured
|
|
*/
|
|
readonly creationPolicy?: CfnCreationPolicy;
|
|
}
|
|
/**
|
|
* Options for customizing the rolling update
|
|
*/
|
|
export interface RollingUpdateOptions {
|
|
/**
|
|
* The maximum number of instances that AWS CloudFormation updates at once.
|
|
*
|
|
* This number affects the speed of the replacement.
|
|
*
|
|
* @default 1
|
|
*/
|
|
readonly maxBatchSize?: number;
|
|
/**
|
|
* The minimum number of instances that must be in service before more instances are replaced.
|
|
*
|
|
* This number affects the speed of the replacement.
|
|
*
|
|
* @default 0
|
|
*/
|
|
readonly minInstancesInService?: number;
|
|
/**
|
|
* Specifies the Auto Scaling processes to suspend during a stack update.
|
|
*
|
|
* Suspending processes prevents Auto Scaling from interfering with a stack
|
|
* update.
|
|
*
|
|
* @default HealthCheck, ReplaceUnhealthy, AZRebalance, AlarmNotification, ScheduledActions.
|
|
*/
|
|
readonly suspendProcesses?: ScalingProcess[];
|
|
/**
|
|
* Specifies whether the Auto Scaling group waits on signals from new instances during an update.
|
|
*
|
|
* @default true if you configured `signals` on the AutoScalingGroup, false otherwise
|
|
*/
|
|
readonly waitOnResourceSignals?: boolean;
|
|
/**
|
|
* The pause time after making a change to a batch of instances.
|
|
*
|
|
* @default - The `timeout` configured for `signals` on the AutoScalingGroup
|
|
*/
|
|
readonly pauseTime?: Duration;
|
|
/**
|
|
* The percentage of instances that must signal success for the update to succeed.
|
|
*
|
|
* @default - The `minSuccessPercentage` configured for `signals` on the AutoScalingGroup
|
|
*/
|
|
readonly minSuccessPercentage?: number;
|
|
}
|
|
/**
|
|
* A set of group metrics
|
|
*/
|
|
export declare class GroupMetrics {
|
|
/**
|
|
* Report all group metrics.
|
|
*/
|
|
static all(): GroupMetrics;
|
|
/**
|
|
* @internal
|
|
*/
|
|
_metrics: Set<GroupMetric>;
|
|
constructor(...metrics: GroupMetric[]);
|
|
}
|
|
/**
|
|
* Group metrics that an Auto Scaling group sends to Amazon CloudWatch.
|
|
*/
|
|
export declare class GroupMetric {
|
|
/**
|
|
* The minimum size of the Auto Scaling group
|
|
*/
|
|
static readonly MIN_SIZE: GroupMetric;
|
|
/**
|
|
* The maximum size of the Auto Scaling group
|
|
*/
|
|
static readonly MAX_SIZE: GroupMetric;
|
|
/**
|
|
* The number of instances that the Auto Scaling group attempts to maintain
|
|
*/
|
|
static readonly DESIRED_CAPACITY: GroupMetric;
|
|
/**
|
|
* The number of instances that are running as part of the Auto Scaling group
|
|
* This metric does not include instances that are pending or terminating
|
|
*/
|
|
static readonly IN_SERVICE_INSTANCES: GroupMetric;
|
|
/**
|
|
* The number of instances that are pending
|
|
* A pending instance is not yet in service, this metric does not include instances that are in service or terminating
|
|
*/
|
|
static readonly PENDING_INSTANCES: GroupMetric;
|
|
/**
|
|
* The number of instances that are in a Standby state
|
|
* Instances in this state are still running but are not actively in service
|
|
*/
|
|
static readonly STANDBY_INSTANCES: GroupMetric;
|
|
/**
|
|
* The number of instances that are in the process of terminating
|
|
* This metric does not include instances that are in service or pending
|
|
*/
|
|
static readonly TERMINATING_INSTANCES: GroupMetric;
|
|
/**
|
|
* The total number of instances in the Auto Scaling group
|
|
* This metric identifies the number of instances that are in service, pending, and terminating
|
|
*/
|
|
static readonly TOTAL_INSTANCES: GroupMetric;
|
|
/**
|
|
* The name of the group metric
|
|
*/
|
|
readonly name: string;
|
|
constructor(name: string);
|
|
}
|
|
/**
|
|
* The strategies for when launches fail in an Availability Zone.
|
|
*/
|
|
export declare enum CapacityDistributionStrategy {
|
|
/**
|
|
* If launches fail in an Availability Zone, Auto Scaling will continue to attempt to launch in the unhealthy zone to preserve a balanced distribution.
|
|
*/
|
|
BALANCED_ONLY = "balanced-only",
|
|
/**
|
|
* If launches fail in an Availability Zone, Auto Scaling will attempt to launch in another healthy Availability Zone instead.
|
|
*/
|
|
BALANCED_BEST_EFFORT = "balanced-best-effort"
|
|
}
|
|
/**
|
|
* Actions for when a termination lifecycle hook is abandoned
|
|
*/
|
|
export declare enum TerminateHookAbandonAction {
|
|
/**
|
|
* Move instances to a Retained state when termination hook is abandoned
|
|
*/
|
|
RETAIN = "retain",
|
|
/**
|
|
* Terminate instances normally when termination hook is abandoned (default behavior)
|
|
*/
|
|
TERMINATE = "terminate"
|
|
}
|
|
/**
|
|
* Instance lifecycle policy for an Auto Scaling group
|
|
*/
|
|
export interface InstanceLifecyclePolicy {
|
|
/**
|
|
* Retention triggers for the instance lifecycle policy
|
|
*
|
|
* @default - No retention triggers configured
|
|
*/
|
|
readonly retentionTriggers?: RetentionTriggers;
|
|
}
|
|
/**
|
|
* Defines the specific triggers that cause instances to be retained in a Retained state
|
|
* rather than terminated. Each trigger corresponds to a different failure scenario during
|
|
* the instance lifecycle. This allows fine-grained control over when to preserve instances
|
|
* for manual intervention.
|
|
*/
|
|
export interface RetentionTriggers {
|
|
/**
|
|
* Specifies the action when a termination lifecycle hook is abandoned due to failure,
|
|
* timeout, or explicit abandonment (calling CompleteLifecycleAction).
|
|
*
|
|
* Set to Retain to move instances to a Retained state. Set to Terminate for default termination behavior.
|
|
*
|
|
* Retained instances don't count toward desired capacity and remain
|
|
* until you call TerminateInstanceInAutoScalingGroup.
|
|
*
|
|
* @default - No action specified
|
|
*/
|
|
readonly terminateHookAbandon?: TerminateHookAbandonAction;
|
|
}
|
|
declare abstract class AutoScalingGroupBase extends Resource implements IAutoScalingGroup {
|
|
abstract autoScalingGroupName: string;
|
|
abstract autoScalingGroupArn: string;
|
|
abstract readonly osType: ec2.OperatingSystemType;
|
|
protected albTargetGroup?: elbv2.ApplicationTargetGroup;
|
|
readonly grantPrincipal: iam.IPrincipal;
|
|
protected hasCalledScaleOnRequestCount: boolean;
|
|
get autoScalingGroupRef(): AutoScalingGroupReference;
|
|
/**
|
|
* Send a message to either an SQS queue or SNS topic when instances launch or terminate
|
|
*/
|
|
addLifecycleHook(id: string, props: BasicLifecycleHookProps): LifecycleHook;
|
|
/**
|
|
* Add a pool of pre-initialized EC2 instances that sits alongside an Auto Scaling group
|
|
*/
|
|
addWarmPool(options?: WarmPoolOptions): WarmPool;
|
|
/**
|
|
* Scale out or in based on time
|
|
*/
|
|
scaleOnSchedule(id: string, props: BasicScheduledActionProps): ScheduledAction;
|
|
/**
|
|
* Scale out or in to achieve a target CPU utilization
|
|
*/
|
|
scaleOnCpuUtilization(id: string, props: CpuUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in to achieve a target network ingress rate
|
|
*/
|
|
scaleOnIncomingBytes(id: string, props: NetworkUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in to achieve a target network egress rate
|
|
*/
|
|
scaleOnOutgoingBytes(id: string, props: NetworkUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in to achieve a target request handling rate
|
|
*
|
|
* The AutoScalingGroup must have been attached to an Application Load Balancer
|
|
* in order to be able to call this.
|
|
*/
|
|
scaleOnRequestCount(id: string, props: RequestCountScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in in order to keep a metric around a target value
|
|
*/
|
|
scaleToTrackMetric(id: string, props: MetricTargetTrackingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in, in response to a metric
|
|
*/
|
|
scaleOnMetric(id: string, props: BasicStepScalingPolicyProps): StepScalingPolicy;
|
|
addUserData(..._commands: string[]): void;
|
|
}
|
|
/**
|
|
* A Fleet represents a managed set of EC2 instances
|
|
*
|
|
* The Fleet models a number of AutoScalingGroups, a launch configuration, a
|
|
* security group and an instance role.
|
|
*
|
|
* It allows adding arbitrary commands to the startup scripts of the instances
|
|
* in the fleet.
|
|
*
|
|
* The ASG spans the availability zones specified by vpcSubnets, falling back to
|
|
* the Vpc default strategy if not specified.
|
|
*/
|
|
export declare class AutoScalingGroup extends AutoScalingGroupBase implements elb.ILoadBalancerTarget, ec2.IConnectable, elbv2.IApplicationLoadBalancerTarget, elbv2.INetworkLoadBalancerTarget {
|
|
/**
|
|
* Uniquely identifies this class.
|
|
*/
|
|
static readonly PROPERTY_INJECTION_ID: string;
|
|
static fromAutoScalingGroupName(scope: Construct, id: string, autoScalingGroupName: string): IAutoScalingGroup;
|
|
/**
|
|
* The type of OS instances of this fleet are running.
|
|
*/
|
|
readonly osType: ec2.OperatingSystemType;
|
|
/**
|
|
* The principal to grant permissions to
|
|
*/
|
|
readonly grantPrincipal: iam.IPrincipal;
|
|
/**
|
|
* Name of the AutoScalingGroup
|
|
*/
|
|
get autoScalingGroupName(): string;
|
|
/**
|
|
* Arn of the AutoScalingGroup
|
|
*/
|
|
get autoScalingGroupArn(): string;
|
|
/**
|
|
* The maximum spot price configured for the autoscaling group. `undefined`
|
|
* indicates that this group uses on-demand capacity.
|
|
*/
|
|
readonly spotPrice?: string;
|
|
/**
|
|
* The maximum amount of time that an instance can be in service.
|
|
*/
|
|
readonly maxInstanceLifetime?: Duration;
|
|
private readonly autoScalingGroup;
|
|
private readonly securityGroup?;
|
|
private readonly securityGroups?;
|
|
private readonly loadBalancerNames;
|
|
private readonly targetGroupArns;
|
|
private readonly groupMetrics;
|
|
private readonly notifications;
|
|
private readonly launchTemplate?;
|
|
private readonly _connections?;
|
|
private readonly _userData?;
|
|
private readonly _role?;
|
|
protected newInstancesProtectedFromScaleIn?: boolean;
|
|
constructor(scope: Construct, id: string, props: AutoScalingGroupProps);
|
|
/**
|
|
* Add the security group to all instances via the launch template
|
|
* security groups array.
|
|
*
|
|
* @param securityGroup: The security group to add
|
|
*/
|
|
addSecurityGroup(securityGroup: ec2.ISecurityGroup): void;
|
|
/**
|
|
* Attach to a classic load balancer
|
|
*/
|
|
attachToClassicLB(loadBalancer: elb.LoadBalancer): void;
|
|
/**
|
|
* Attach to ELBv2 Application Target Group
|
|
*/
|
|
attachToApplicationTargetGroup(targetGroup: elbv2.IApplicationTargetGroup): elbv2.LoadBalancerTargetProps;
|
|
/**
|
|
* Attach to ELBv2 Application Target Group
|
|
*/
|
|
attachToNetworkTargetGroup(targetGroup: elbv2.INetworkTargetGroup): elbv2.LoadBalancerTargetProps;
|
|
addUserData(...commands: string[]): void;
|
|
/**
|
|
* Adds a statement to the IAM role assumed by instances of this fleet.
|
|
*/
|
|
addToRolePolicy(statement: iam.PolicyStatement): void;
|
|
/**
|
|
* Use a CloudFormation Init configuration at instance startup
|
|
*
|
|
* This does the following:
|
|
*
|
|
* - Attaches the CloudFormation Init metadata to the AutoScalingGroup resource.
|
|
* - Add commands to the UserData to run `cfn-init` and `cfn-signal`.
|
|
* - Update the instance's CreationPolicy to wait for `cfn-init` to finish
|
|
* before reporting success.
|
|
*/
|
|
applyCloudFormationInit(init: ec2.CloudFormationInit, options?: ApplyCloudFormationInitOptions): void;
|
|
/**
|
|
* Ensures newly-launched instances are protected from scale-in.
|
|
*/
|
|
protectNewInstancesFromScaleIn(): void;
|
|
/**
|
|
* Returns `true` if newly-launched instances are protected from scale-in.
|
|
*/
|
|
areNewInstancesProtectedFromScaleIn(): boolean;
|
|
/**
|
|
* The network connections associated with this resource.
|
|
*/
|
|
get connections(): ec2.Connections;
|
|
/**
|
|
* The Base64-encoded user data to make available to the launched EC2 instances.
|
|
*
|
|
* @throws an error if a launch template is given and it does not provide a non-null `userData`
|
|
*/
|
|
get userData(): ec2.UserData;
|
|
/**
|
|
* The IAM Role in the instance profile
|
|
*
|
|
* @throws an error if a launch template is given
|
|
*/
|
|
get role(): iam.IRole;
|
|
private verifyNoLaunchConfigPropIsGiven;
|
|
/**
|
|
* Apply CloudFormation update policies for the AutoScalingGroup
|
|
*/
|
|
private applyUpdatePolicies;
|
|
/**
|
|
* Use 'signals' and 'updatePolicy' to determine the creation and update policies
|
|
*/
|
|
private applyNewSignalUpdatePolicies;
|
|
private applyLegacySignalUpdatePolicies;
|
|
private renderNotificationConfiguration;
|
|
private renderMetricsCollection;
|
|
private getLaunchSettings;
|
|
private convertILaunchTemplateToSpecification;
|
|
private validateTargetGroup;
|
|
private renderInstanceMaintenancePolicy;
|
|
private renderHealthChecks;
|
|
}
|
|
/**
|
|
* AutoScalingGroup fleet change notifications configurations.
|
|
* You can configure AutoScaling to send an SNS notification whenever your Auto Scaling group scales.
|
|
*/
|
|
export interface NotificationConfiguration {
|
|
/**
|
|
* SNS topic to send notifications about fleet scaling events
|
|
*/
|
|
readonly topic: sns.ITopic;
|
|
/**
|
|
* Which fleet scaling events triggers a notification
|
|
* @default ScalingEvents.ALL
|
|
*/
|
|
readonly scalingEvents?: ScalingEvents;
|
|
}
|
|
/**
|
|
* Fleet scaling events
|
|
*/
|
|
export declare enum ScalingEvent {
|
|
/**
|
|
* Notify when an instance was launched
|
|
*/
|
|
INSTANCE_LAUNCH = "autoscaling:EC2_INSTANCE_LAUNCH",
|
|
/**
|
|
* Notify when an instance was terminated
|
|
*/
|
|
INSTANCE_TERMINATE = "autoscaling:EC2_INSTANCE_TERMINATE",
|
|
/**
|
|
* Notify when an instance failed to terminate
|
|
*/
|
|
INSTANCE_TERMINATE_ERROR = "autoscaling:EC2_INSTANCE_TERMINATE_ERROR",
|
|
/**
|
|
* Notify when an instance failed to launch
|
|
*/
|
|
INSTANCE_LAUNCH_ERROR = "autoscaling:EC2_INSTANCE_LAUNCH_ERROR",
|
|
/**
|
|
* Send a test notification to the topic
|
|
*/
|
|
TEST_NOTIFICATION = "autoscaling:TEST_NOTIFICATION"
|
|
}
|
|
/**
|
|
* A list of ScalingEvents, you can use one of the predefined lists, such as ScalingEvents.ERRORS
|
|
* or create a custom group by instantiating a `NotificationTypes` object, e.g: `new NotificationTypes(`NotificationType.INSTANCE_LAUNCH`)`.
|
|
*/
|
|
export declare class ScalingEvents {
|
|
/**
|
|
* Fleet scaling errors
|
|
*/
|
|
static readonly ERRORS: ScalingEvents;
|
|
/**
|
|
* All fleet scaling events
|
|
*/
|
|
static readonly ALL: ScalingEvents;
|
|
/**
|
|
* Fleet scaling launch events
|
|
*/
|
|
static readonly LAUNCH_EVENTS: ScalingEvents;
|
|
/**
|
|
* Fleet termination launch events
|
|
*/
|
|
static readonly TERMINATION_EVENTS: ScalingEvents;
|
|
/**
|
|
* @internal
|
|
*/
|
|
readonly _types: ScalingEvent[];
|
|
constructor(...types: ScalingEvent[]);
|
|
}
|
|
export declare enum ScalingProcess {
|
|
LAUNCH = "Launch",
|
|
TERMINATE = "Terminate",
|
|
HEALTH_CHECK = "HealthCheck",
|
|
REPLACE_UNHEALTHY = "ReplaceUnhealthy",
|
|
AZ_REBALANCE = "AZRebalance",
|
|
ALARM_NOTIFICATION = "AlarmNotification",
|
|
SCHEDULED_ACTIONS = "ScheduledActions",
|
|
ADD_TO_LOAD_BALANCER = "AddToLoadBalancer",
|
|
INSTANCE_REFRESH = "InstanceRefresh"
|
|
}
|
|
/**
|
|
* EC2 Heath check options
|
|
*
|
|
* @deprecated Use Ec2HealthChecksOptions instead
|
|
*/
|
|
export interface Ec2HealthCheckOptions {
|
|
/**
|
|
* Specified the time Auto Scaling waits before checking the health status of an EC2 instance that has come into service
|
|
*
|
|
* @default Duration.seconds(0)
|
|
*/
|
|
readonly grace?: Duration;
|
|
}
|
|
/**
|
|
* ELB Heath check options
|
|
*
|
|
* @deprecated Use AdditionalHealthChecksOptions instead
|
|
*/
|
|
export interface ElbHealthCheckOptions {
|
|
/**
|
|
* Specified the time Auto Scaling waits before checking the health status of an EC2 instance that has come into service
|
|
*
|
|
* This option is required for ELB health checks.
|
|
*/
|
|
readonly grace: Duration;
|
|
}
|
|
/**
|
|
* Health check settings
|
|
*
|
|
* @deprecated Use HealthChecks instead
|
|
*/
|
|
export declare class HealthCheck {
|
|
readonly type: string;
|
|
readonly gracePeriod?: Duration | undefined;
|
|
/**
|
|
* Use EC2 for health checks
|
|
*
|
|
* @param options EC2 health check options
|
|
*/
|
|
static ec2(options?: Ec2HealthCheckOptions): HealthCheck;
|
|
/**
|
|
* Use ELB for health checks.
|
|
* It considers the instance unhealthy if it fails either the EC2 status checks or the load balancer health checks.
|
|
*
|
|
* @param options ELB health check options
|
|
*/
|
|
static elb(options: ElbHealthCheckOptions): HealthCheck;
|
|
private constructor();
|
|
}
|
|
/**
|
|
* Heath checks base options
|
|
*/
|
|
interface HealthChecksBaseOptions {
|
|
/**
|
|
* Specified the time Auto Scaling waits before checking the health status of an EC2 instance that has come into service
|
|
* and marking it unhealthy due to a failed health check.
|
|
*
|
|
* @default Duration.seconds(0)
|
|
* @see https://docs.aws.amazon.com/autoscaling/ec2/userguide/health-check-grace-period.html
|
|
*/
|
|
readonly gracePeriod?: Duration;
|
|
}
|
|
/**
|
|
* EC2 Heath checks options
|
|
*/
|
|
export interface Ec2HealthChecksOptions extends HealthChecksBaseOptions {
|
|
}
|
|
/**
|
|
* Additional Heath checks options
|
|
*/
|
|
export interface AdditionalHealthChecksOptions extends HealthChecksBaseOptions {
|
|
/**
|
|
* One or more health check types other than EC2.
|
|
*/
|
|
readonly additionalTypes: AdditionalHealthCheckType[];
|
|
}
|
|
/**
|
|
* Health check settings for multiple types
|
|
*/
|
|
export declare class HealthChecks {
|
|
readonly types: string[];
|
|
readonly gracePeriod?: Duration | undefined;
|
|
/**
|
|
* Use EC2 only for health checks.
|
|
*
|
|
* @param options EC2 health checks options
|
|
*/
|
|
static ec2(options?: Ec2HealthChecksOptions): HealthChecks;
|
|
/**
|
|
* Use additional health checks other than EC2.
|
|
*
|
|
* Specify types other than EC2, as EC2 is always enabled.
|
|
* It considers the instance unhealthy if it fails either the EC2 status checks or the additional health checks.
|
|
*
|
|
* @param options Additional health checks options
|
|
*/
|
|
static withAdditionalChecks(options: AdditionalHealthChecksOptions): HealthChecks;
|
|
private constructor();
|
|
}
|
|
/**
|
|
* Additional Health Check Type
|
|
*/
|
|
export declare enum AdditionalHealthCheckType {
|
|
/**
|
|
* ELB Health Check
|
|
*/
|
|
ELB = "ELB",
|
|
/**
|
|
* EBS Health Check
|
|
*/
|
|
EBS = "EBS",
|
|
/**
|
|
* VPC LATTICE Health Check
|
|
*/
|
|
VPC_LATTICE = "VPC_LATTICE"
|
|
}
|
|
/**
|
|
* An AutoScalingGroup
|
|
*/
|
|
export interface IAutoScalingGroup extends IAutoScalingGroupRef, IResource, iam.IGrantable {
|
|
/**
|
|
* The name of the AutoScalingGroup
|
|
* @attribute
|
|
*/
|
|
readonly autoScalingGroupName: string;
|
|
/**
|
|
* The arn of the AutoScalingGroup
|
|
* @attribute
|
|
*/
|
|
readonly autoScalingGroupArn: string;
|
|
/**
|
|
* The operating system family that the instances in this auto-scaling group belong to.
|
|
* Is 'UNKNOWN' for imported ASGs.
|
|
*/
|
|
readonly osType: ec2.OperatingSystemType;
|
|
/**
|
|
* Add command to the startup script of fleet instances.
|
|
* The command must be in the scripting language supported by the fleet's OS (i.e. Linux/Windows).
|
|
* Does nothing for imported ASGs.
|
|
*/
|
|
addUserData(...commands: string[]): void;
|
|
/**
|
|
* Send a message to either an SQS queue or SNS topic when instances launch or terminate
|
|
*/
|
|
addLifecycleHook(id: string, props: BasicLifecycleHookProps): LifecycleHook;
|
|
/**
|
|
* Add a pool of pre-initialized EC2 instances that sits alongside an Auto Scaling group
|
|
*/
|
|
addWarmPool(options?: WarmPoolOptions): WarmPool;
|
|
/**
|
|
* Scale out or in based on time
|
|
*/
|
|
scaleOnSchedule(id: string, props: BasicScheduledActionProps): ScheduledAction;
|
|
/**
|
|
* Scale out or in to achieve a target CPU utilization
|
|
*/
|
|
scaleOnCpuUtilization(id: string, props: CpuUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in to achieve a target network ingress rate
|
|
*/
|
|
scaleOnIncomingBytes(id: string, props: NetworkUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in to achieve a target network egress rate
|
|
*/
|
|
scaleOnOutgoingBytes(id: string, props: NetworkUtilizationScalingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in in order to keep a metric around a target value
|
|
*/
|
|
scaleToTrackMetric(id: string, props: MetricTargetTrackingProps): TargetTrackingScalingPolicy;
|
|
/**
|
|
* Scale out or in, in response to a metric
|
|
*/
|
|
scaleOnMetric(id: string, props: BasicStepScalingPolicyProps): StepScalingPolicy;
|
|
}
|
|
/**
|
|
* Properties for enabling scaling based on CPU utilization
|
|
*/
|
|
export interface CpuUtilizationScalingProps extends BaseTargetTrackingProps {
|
|
/**
|
|
* Target average CPU utilization across the task
|
|
*/
|
|
readonly targetUtilizationPercent: number;
|
|
}
|
|
/**
|
|
* Properties for enabling scaling based on network utilization
|
|
*/
|
|
export interface NetworkUtilizationScalingProps extends BaseTargetTrackingProps {
|
|
/**
|
|
* Target average bytes/seconds on each instance
|
|
*/
|
|
readonly targetBytesPerSecond: number;
|
|
}
|
|
/**
|
|
* Properties for enabling scaling based on request/second
|
|
*/
|
|
export interface RequestCountScalingProps extends BaseTargetTrackingProps {
|
|
/**
|
|
* Target average requests/minute on each instance
|
|
* @default - Specify exactly one of 'targetRequestsPerMinute' and 'targetRequestsPerSecond'
|
|
*/
|
|
readonly targetRequestsPerMinute?: number;
|
|
}
|
|
/**
|
|
* Properties for enabling tracking of an arbitrary metric
|
|
*/
|
|
export interface MetricTargetTrackingProps extends BaseTargetTrackingProps {
|
|
/**
|
|
* Metric to track
|
|
*
|
|
* The metric must represent a utilization, so that if it's higher than the
|
|
* target value, your ASG should scale out, and if it's lower it should
|
|
* scale in.
|
|
*/
|
|
readonly metric: cloudwatch.IMetric;
|
|
/**
|
|
* Value to keep the metric around
|
|
*/
|
|
readonly targetValue: number;
|
|
}
|
|
/**
|
|
* Options for applying CloudFormation init to an instance or instance group
|
|
*/
|
|
export interface ApplyCloudFormationInitOptions {
|
|
/**
|
|
* ConfigSet to activate
|
|
*
|
|
* @default ['default']
|
|
*/
|
|
readonly configSets?: string[];
|
|
/**
|
|
* Force instance replacement by embedding a config fingerprint
|
|
*
|
|
* If `true` (the default), a hash of the config will be embedded into the
|
|
* UserData, so that if the config changes, the UserData changes and
|
|
* instances will be replaced (given an UpdatePolicy has been configured on
|
|
* the AutoScalingGroup).
|
|
*
|
|
* If `false`, no such hash will be embedded, and if the CloudFormation Init
|
|
* config changes nothing will happen to the running instances. If a
|
|
* config update introduces errors, you will not notice until after the
|
|
* CloudFormation deployment successfully finishes and the next instance
|
|
* fails to launch.
|
|
*
|
|
* @default true
|
|
*/
|
|
readonly embedFingerprint?: boolean;
|
|
/**
|
|
* Print the results of running cfn-init to the Instance System Log
|
|
*
|
|
* By default, the output of running cfn-init is written to a log file
|
|
* on the instance. Set this to `true` to print it to the System Log
|
|
* (visible from the EC2 Console), `false` to not print it.
|
|
*
|
|
* (Be aware that the system log is refreshed at certain points in
|
|
* time of the instance life cycle, and successful execution may
|
|
* not always show up).
|
|
*
|
|
* @default true
|
|
*/
|
|
readonly printLog?: boolean;
|
|
/**
|
|
* Don't fail the instance creation when cfn-init fails
|
|
*
|
|
* You can use this to prevent CloudFormation from rolling back when
|
|
* instances fail to start up, to help in debugging.
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly ignoreFailures?: boolean;
|
|
/**
|
|
* Include --url argument when running cfn-init and cfn-signal commands
|
|
*
|
|
* This will be the cloudformation endpoint in the deployed region
|
|
* e.g. https://cloudformation.us-east-1.amazonaws.com
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly includeUrl?: boolean;
|
|
/**
|
|
* Include --role argument when running cfn-init and cfn-signal commands
|
|
*
|
|
* This will be the IAM instance profile attached to the EC2 instance
|
|
*
|
|
* @default false
|
|
*/
|
|
readonly includeRole?: boolean;
|
|
}
|
|
export {};
|