// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Specifies the minimum and maximum for the AcceleratorCount object when you
// specify InstanceRequirements for an Auto Scaling group.
type AcceleratorCountRequest struct {

	// The maximum value.
	Max *int32

	// The minimum value.
	Min *int32

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the AcceleratorTotalMemoryMiB object when
// you specify InstanceRequirements for an Auto Scaling group.
type AcceleratorTotalMemoryMiBRequest struct {

	// The memory maximum in MiB.
	Max *int32

	// The memory minimum in MiB.
	Min *int32

	noSmithyDocumentSerde
}

// Describes scaling activity, which is a long-running process that represents a
// change to your Auto Scaling group, such as changing its size or replacing an
// instance.
type Activity struct {

	// The ID of the activity.
	//
	// This member is required.
	ActivityId *string

	// The name of the Auto Scaling group.
	//
	// This member is required.
	AutoScalingGroupName *string

	// The reason the activity began.
	//
	// This member is required.
	Cause *string

	// The start time of the activity.
	//
	// This member is required.
	StartTime *time.Time

	// The current status of the activity.
	//
	// This member is required.
	StatusCode ScalingActivityStatusCode

	// The Amazon Resource Name (ARN) of the Auto Scaling group.
	AutoScalingGroupARN *string

	// The state of the Auto Scaling group, which is either InService or Deleted .
	AutoScalingGroupState *string

	// A friendly, more verbose description of the activity.
	Description *string

	// The details about the activity.
	Details *string

	// The end time of the activity.
	EndTime *time.Time

	// A value between 0 and 100 that indicates the progress of the activity.
	Progress int32

	// A friendly, more verbose description of the activity status.
	StatusMessage *string

	noSmithyDocumentSerde
}

// Describes a policy adjustment type.
type AdjustmentType struct {

	// The policy adjustment type. The valid values are ChangeInCapacity ,
	// ExactCapacity , and PercentChangeInCapacity .
	AdjustmentType *string

	noSmithyDocumentSerde
}

// Describes an alarm.
type Alarm struct {

	// The Amazon Resource Name (ARN) of the alarm.
	AlarmARN *string

	// The name of the alarm.
	AlarmName *string

	noSmithyDocumentSerde
}

// Specifies the CloudWatch alarm specification to use in an instance refresh.
type AlarmSpecification struct {

	// The names of one or more CloudWatch alarms to monitor for the instance refresh.
	// You can specify up to 10 alarms.
	Alarms []string

	noSmithyDocumentSerde
}

// Describes an Auto Scaling group.
type AutoScalingGroup struct {

	// The name of the Auto Scaling group.
	//
	// This member is required.
	AutoScalingGroupName *string

	// One or more Availability Zones for the group.
	//
	// This member is required.
	AvailabilityZones []string

	// The date and time the group was created.
	//
	// This member is required.
	CreatedTime *time.Time

	// The duration of the default cooldown period, in seconds.
	//
	// This member is required.
	DefaultCooldown *int32

	// The desired size of the group.
	//
	// This member is required.
	DesiredCapacity *int32

	// A comma-separated value string of one or more health check types.
	//
	// This member is required.
	HealthCheckType *string

	// The maximum size of the group.
	//
	// This member is required.
	MaxSize *int32

	// The minimum size of the group.
	//
	// This member is required.
	MinSize *int32

	// The Amazon Resource Name (ARN) of the Auto Scaling group.
	AutoScalingGroupARN *string

	// Indicates whether Capacity Rebalancing is enabled.
	CapacityRebalance *bool

	// Reserved.
	Context *string

	// The duration of the default instance warmup, in seconds.
	DefaultInstanceWarmup *int32

	// The unit of measurement for the value specified for desired capacity. Amazon
	// EC2 Auto Scaling supports DesiredCapacityType for attribute-based instance type
	// selection only.
	DesiredCapacityType *string

	// The metrics enabled for the group.
	EnabledMetrics []EnabledMetric

	// The duration of the health check grace period, in seconds.
	HealthCheckGracePeriod *int32

	// The EC2 instances associated with the group.
	Instances []Instance

	// The name of the associated launch configuration.
	LaunchConfigurationName *string

	// The launch template for the group.
	LaunchTemplate *LaunchTemplateSpecification

	// One or more load balancers associated with the group.
	LoadBalancerNames []string

	// The maximum amount of time, in seconds, that an instance can be in service.
	// Valid Range: Minimum value of 0.
	MaxInstanceLifetime *int32

	// The mixed instances policy for the group.
	MixedInstancesPolicy *MixedInstancesPolicy

	// Indicates whether newly launched instances are protected from termination by
	// Amazon EC2 Auto Scaling when scaling in.
	NewInstancesProtectedFromScaleIn *bool

	// The name of the placement group into which to launch your instances, if any.
	PlacementGroup *string

	// The predicted capacity of the group when it has a predictive scaling policy.
	PredictedCapacity *int32

	// The Amazon Resource Name (ARN) of the service-linked role that the Auto Scaling
	// group uses to call other Amazon Web Services on your behalf.
	ServiceLinkedRoleARN *string

	// The current state of the group when the DeleteAutoScalingGroup operation is in
	// progress.
	Status *string

	// The suspended processes associated with the group.
	SuspendedProcesses []SuspendedProcess

	// The tags for the group.
	Tags []TagDescription

	// The Amazon Resource Names (ARN) of the target groups for your load balancer.
	TargetGroupARNs []string

	// The termination policies for the group.
	TerminationPolicies []string

	// The traffic sources associated with this Auto Scaling group.
	TrafficSources []TrafficSourceIdentifier

	// One or more subnet IDs, if applicable, separated by commas.
	VPCZoneIdentifier *string

	// The warm pool for the group.
	WarmPoolConfiguration *WarmPoolConfiguration

	// The current size of the warm pool.
	WarmPoolSize *int32

	noSmithyDocumentSerde
}

// Describes an EC2 instance associated with an Auto Scaling group.
type AutoScalingInstanceDetails struct {

	// The name of the Auto Scaling group for the instance.
	//
	// This member is required.
	AutoScalingGroupName *string

	// The Availability Zone for the instance.
	//
	// This member is required.
	AvailabilityZone *string

	// The last reported health status of this instance. Healthy means that the
	// instance is healthy and should remain in service. Unhealthy means that the
	// instance is unhealthy and Amazon EC2 Auto Scaling should terminate and replace
	// it.
	//
	// This member is required.
	HealthStatus *string

	// The ID of the instance.
	//
	// This member is required.
	InstanceId *string

	// The lifecycle state for the instance. The Quarantined state is not used. For
	// information about lifecycle states, see Instance lifecycle (https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html)
	// in the Amazon EC2 Auto Scaling User Guide. Valid values: Pending | Pending:Wait
	// | Pending:Proceed | Quarantined | InService | Terminating | Terminating:Wait |
	// Terminating:Proceed | Terminated | Detaching | Detached | EnteringStandby |
	// Standby | Warmed:Pending | Warmed:Pending:Wait | Warmed:Pending:Proceed |
	// Warmed:Terminating | Warmed:Terminating:Wait | Warmed:Terminating:Proceed |
	// Warmed:Terminated | Warmed:Stopped | Warmed:Running
	//
	// This member is required.
	LifecycleState *string

	// Indicates whether the instance is protected from termination by Amazon EC2 Auto
	// Scaling when scaling in.
	//
	// This member is required.
	ProtectedFromScaleIn *bool

	// The instance type of the EC2 instance.
	InstanceType *string

	// The launch configuration used to launch the instance. This value is not
	// available if you attached the instance to the Auto Scaling group.
	LaunchConfigurationName *string

	// The launch template for the instance.
	LaunchTemplate *LaunchTemplateSpecification

	// The number of capacity units contributed by the instance based on its instance
	// type. Valid Range: Minimum value of 1. Maximum value of 999.
	WeightedCapacity *string

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the BaselineEbsBandwidthMbps object when
// you specify InstanceRequirements for an Auto Scaling group.
type BaselineEbsBandwidthMbpsRequest struct {

	// The maximum value in Mbps.
	Max *int32

	// The minimum value in Mbps.
	Min *int32

	noSmithyDocumentSerde
}

// Describes a block device mapping.
type BlockDeviceMapping struct {

	// The device name assigned to the volume (for example, /dev/sdh or xvdh ). For
	// more information, see Device naming on Linux instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html)
	// in the Amazon EC2 User Guide for Linux Instances. To define a block device
	// mapping, set the device name and exactly one of the following properties: Ebs ,
	// NoDevice , or VirtualName .
	//
	// This member is required.
	DeviceName *string

	// Information to attach an EBS volume to an instance at launch.
	Ebs *Ebs

	// Setting this value to true prevents a volume that is included in the block
	// device mapping of the AMI from being mapped to the specified device name at
	// launch. If NoDevice is true for the root device, instances might fail the EC2
	// health check. In that case, Amazon EC2 Auto Scaling launches replacement
	// instances.
	NoDevice *bool

	// The name of the instance store volume (virtual device) to attach to an instance
	// at launch. The name must be in the form ephemeralX where X is a number starting
	// from zero (0), for example, ephemeral0 .
	VirtualName *string

	noSmithyDocumentSerde
}

// A GetPredictiveScalingForecast call returns the capacity forecast for a
// predictive scaling policy. This structure includes the data points for that
// capacity forecast, along with the timestamps of those data points.
type CapacityForecast struct {

	// The timestamps for the data points, in UTC format.
	//
	// This member is required.
	Timestamps []time.Time

	// The values of the data points.
	//
	// This member is required.
	Values []float64

	noSmithyDocumentSerde
}

// Represents a CloudWatch metric of your choosing for a target tracking scaling
// policy to use with Amazon EC2 Auto Scaling. To create your customized metric
// specification:
//   - Add values for each required property from CloudWatch. You can use an
//     existing metric, or a new metric that you create. To use your own metric, you
//     must first publish the metric to CloudWatch. For more information, see
//     Publish custom metrics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/publishingMetrics.html)
//     in the Amazon CloudWatch User Guide.
//   - Choose a metric that changes proportionally with capacity. The value of the
//     metric should increase or decrease in inverse proportion to the number of
//     capacity units. That is, the value of the metric should decrease when capacity
//     increases.
//
// For more information about the CloudWatch terminology below, see Amazon
// CloudWatch concepts (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)
// . Each individual service provides information about the metrics, namespace, and
// dimensions they use. For more information, see Amazon Web Services services
// that publish CloudWatch metrics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)
// in the Amazon CloudWatch User Guide.
type CustomizedMetricSpecification struct {

	// The dimensions of the metric. Conditional: If you published your metric with
	// dimensions, you must specify the same dimensions in your scaling policy.
	Dimensions []MetricDimension

	// The name of the metric. To get the exact metric name, namespace, and
	// dimensions, inspect the Metric (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html)
	// object that is returned by a call to ListMetrics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html)
	// .
	MetricName *string

	// The metrics to include in the target tracking scaling policy, as a metric data
	// query. This can include both raw metric and metric math expressions.
	Metrics []TargetTrackingMetricDataQuery

	// The namespace of the metric.
	Namespace *string

	// The statistic of the metric.
	Statistic MetricStatistic

	// The unit of the metric. For a complete list of the units that CloudWatch
	// supports, see the MetricDatum (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)
	// data type in the Amazon CloudWatch API Reference.
	Unit *string

	noSmithyDocumentSerde
}

// Describes the desired configuration for an instance refresh. If you specify a
// desired configuration, you must specify either a LaunchTemplate or a
// MixedInstancesPolicy .
type DesiredConfiguration struct {

	// Describes the launch template and the version of the launch template that
	// Amazon EC2 Auto Scaling uses to launch Amazon EC2 instances. For more
	// information about launch templates, see Launch templates (https://docs.aws.amazon.com/autoscaling/ec2/userguide/LaunchTemplates.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	LaunchTemplate *LaunchTemplateSpecification

	// Use this structure to launch multiple instance types and On-Demand Instances
	// and Spot Instances within a single Auto Scaling group. A mixed instances policy
	// contains information that Amazon EC2 Auto Scaling can use to launch instances
	// and help optimize your costs. For more information, see Auto Scaling groups
	// with multiple instance types and purchase options (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	MixedInstancesPolicy *MixedInstancesPolicy

	noSmithyDocumentSerde
}

// Describes information used to set up an Amazon EBS volume specified in a block
// device mapping.
type Ebs struct {

	// Indicates whether the volume is deleted on instance termination. For Amazon EC2
	// Auto Scaling, the default value is true .
	DeleteOnTermination *bool

	// Specifies whether the volume should be encrypted. Encrypted EBS volumes can
	// only be attached to instances that support Amazon EBS encryption. For more
	// information, see Supported instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#EBSEncryption_supported_instances)
	// . If your AMI uses encrypted volumes, you can also only launch it on supported
	// instance types. If you are creating a volume from a snapshot, you cannot create
	// an unencrypted volume from an encrypted snapshot. Also, you cannot specify a KMS
	// key ID when using a launch configuration. If you enable encryption by default,
	// the EBS volumes that you create are always encrypted, either using the Amazon
	// Web Services managed KMS key or a customer-managed KMS key, regardless of
	// whether the snapshot was encrypted. For more information, see Use Amazon Web
	// Services KMS keys to encrypt Amazon EBS volumes (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-data-protection.html#encryption)
	// in the Amazon EC2 Auto Scaling User Guide.
	Encrypted *bool

	// The number of input/output (I/O) operations per second (IOPS) to provision for
	// the volume. For gp3 and io1 volumes, this represents the number of IOPS that
	// are provisioned for the volume. For gp2 volumes, this represents the baseline
	// performance of the volume and the rate at which the volume accumulates I/O
	// credits for bursting. The following are the supported values for each volume
	// type:
	//   - gp3 : 3,000-16,000 IOPS
	//   - io1 : 100-64,000 IOPS
	// For io1 volumes, we guarantee 64,000 IOPS only for Instances built on the Nitro
	// System (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances)
	// . Other instance families guarantee performance up to 32,000 IOPS. Iops is
	// supported when the volume type is gp3 or io1 and required only when the volume
	// type is io1 . (Not used with standard , gp2 , st1 , or sc1 volumes.)
	Iops *int32

	// The snapshot ID of the volume to use. You must specify either a VolumeSize or a
	// SnapshotId .
	SnapshotId *string

	// The throughput (MiBps) to provision for a gp3 volume.
	Throughput *int32

	// The volume size, in GiBs. The following are the supported volumes sizes for
	// each volume type:
	//   - gp2 and gp3 : 1-16,384
	//   - io1 : 4-16,384
	//   - st1 and sc1 : 125-16,384
	//   - standard : 1-1,024
	// You must specify either a SnapshotId or a VolumeSize . If you specify both
	// SnapshotId and VolumeSize , the volume size must be equal or greater than the
	// size of the snapshot.
	VolumeSize *int32

	// The volume type. For more information, see Amazon EBS volume types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSVolumeTypes.html)
	// in the Amazon EC2 User Guide for Linux Instances. Valid values: standard | io1
	// | gp2 | st1 | sc1 | gp3
	VolumeType *string

	noSmithyDocumentSerde
}

// Describes an enabled Auto Scaling group metric.
type EnabledMetric struct {

	// The granularity of the metric. The only valid value is 1Minute .
	Granularity *string

	// One of the following metrics:
	//   - GroupMinSize
	//   - GroupMaxSize
	//   - GroupDesiredCapacity
	//   - GroupInServiceInstances
	//   - GroupPendingInstances
	//   - GroupStandbyInstances
	//   - GroupTerminatingInstances
	//   - GroupTotalInstances
	//   - GroupInServiceCapacity
	//   - GroupPendingCapacity
	//   - GroupStandbyCapacity
	//   - GroupTerminatingCapacity
	//   - GroupTotalCapacity
	//   - WarmPoolDesiredCapacity
	//   - WarmPoolWarmedCapacity
	//   - WarmPoolPendingCapacity
	//   - WarmPoolTerminatingCapacity
	//   - WarmPoolTotalCapacity
	//   - GroupAndWarmPoolDesiredCapacity
	//   - GroupAndWarmPoolTotalCapacity
	// For more information, see Auto Scaling group metrics (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-cloudwatch-monitoring.html#as-group-metrics)
	// in the Amazon EC2 Auto Scaling User Guide.
	Metric *string

	noSmithyDocumentSerde
}

// Describes a scheduled action that could not be created, updated, or deleted.
type FailedScheduledUpdateGroupActionRequest struct {

	// The name of the scheduled action.
	//
	// This member is required.
	ScheduledActionName *string

	// The error code.
	ErrorCode *string

	// The error message accompanying the error code.
	ErrorMessage *string

	noSmithyDocumentSerde
}

// Describes a filter that is used to return a more specific list of results from
// a describe operation. If you specify multiple filters, the filters are
// automatically logically joined with an AND , and the request returns only the
// results that match all of the specified filters. For more information, see Tag
// Auto Scaling groups and instances (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-tagging.html)
// in the Amazon EC2 Auto Scaling User Guide.
type Filter struct {

	// The name of the filter. The valid values for Name depend on which API operation
	// you're using with the filter ( DescribeAutoScalingGroups or DescribeTags ).
	// DescribeAutoScalingGroups Valid values for Name include the following:
	//   - tag-key - Accepts tag keys. The results only include information about the
	//   Auto Scaling groups associated with these tag keys.
	//   - tag-value - Accepts tag values. The results only include information about
	//   the Auto Scaling groups associated with these tag values.
	//   - tag: - Accepts the key/value combination of the tag. Use the tag key in the
	//   filter name and the tag value as the filter value. The results only include
	//   information about the Auto Scaling groups associated with the specified
	//   key/value combination.
	// DescribeTags Valid values for Name include the following:
	//   - auto-scaling-group - Accepts the names of Auto Scaling groups. The results
	//   only include information about the tags associated with these Auto Scaling
	//   groups.
	//   - key - Accepts tag keys. The results only include information about the tags
	//   associated with these tag keys.
	//   - value - Accepts tag values. The results only include information about the
	//   tags associated with these tag values.
	//   - propagate-at-launch - Accepts a Boolean value, which specifies whether tags
	//   propagate to instances at launch. The results only include information about the
	//   tags associated with the specified Boolean value.
	Name *string

	// One or more filter values. Filter values are case-sensitive. If you specify
	// multiple values for a filter, the values are automatically logically joined with
	// an OR , and the request returns all results that match any of the specified
	// values. For example, specify "tag:environment" for the filter name and
	// "production,development" for the filter values to find Auto Scaling groups with
	// the tag "environment=production" or "environment=development".
	Values []string

	noSmithyDocumentSerde
}

// Describes an EC2 instance.
type Instance struct {

	// The Availability Zone in which the instance is running.
	//
	// This member is required.
	AvailabilityZone *string

	// The last reported health status of the instance. Healthy means that the
	// instance is healthy and should remain in service. Unhealthy means that the
	// instance is unhealthy and that Amazon EC2 Auto Scaling should terminate and
	// replace it.
	//
	// This member is required.
	HealthStatus *string

	// The ID of the instance.
	//
	// This member is required.
	InstanceId *string

	// A description of the current lifecycle state. The Quarantined state is not
	// used. For information about lifecycle states, see Instance lifecycle (https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroupLifecycle.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	//
	// This member is required.
	LifecycleState LifecycleState

	// Indicates whether the instance is protected from termination by Amazon EC2 Auto
	// Scaling when scaling in.
	//
	// This member is required.
	ProtectedFromScaleIn *bool

	// The instance type of the EC2 instance.
	InstanceType *string

	// The launch configuration associated with the instance.
	LaunchConfigurationName *string

	// The launch template for the instance.
	LaunchTemplate *LaunchTemplateSpecification

	// The number of capacity units contributed by the instance based on its instance
	// type. Valid Range: Minimum value of 1. Maximum value of 999.
	WeightedCapacity *string

	noSmithyDocumentSerde
}

// The metadata options for the instances. For more information, see Configuring
// the Instance Metadata Options (https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html#launch-configurations-imds)
// in the Amazon EC2 Auto Scaling User Guide.
type InstanceMetadataOptions struct {

	// This parameter enables or disables the HTTP metadata endpoint on your
	// instances. If the parameter is not specified, the default state is enabled . If
	// you specify a value of disabled , you will not be able to access your instance
	// metadata.
	HttpEndpoint InstanceMetadataEndpointState

	// The desired HTTP PUT response hop limit for instance metadata requests. The
	// larger the number, the further instance metadata requests can travel. Default: 1
	HttpPutResponseHopLimit *int32

	// The state of token usage for your instance metadata requests. If the parameter
	// is not specified in the request, the default state is optional . If the state is
	// optional , you can choose to retrieve instance metadata with or without a signed
	// token header on your request. If you retrieve the IAM role credentials without a
	// token, the version 1.0 role credentials are returned. If you retrieve the IAM
	// role credentials using a valid signed token, the version 2.0 role credentials
	// are returned. If the state is required , you must send a signed token header
	// with any instance metadata retrieval requests. In this state, retrieving the IAM
	// role credentials always returns the version 2.0 credentials; the version 1.0
	// credentials are not available.
	HttpTokens InstanceMetadataHttpTokensState

	noSmithyDocumentSerde
}

// Describes whether detailed monitoring is enabled for the Auto Scaling instances.
type InstanceMonitoring struct {

	// If true , detailed monitoring is enabled. Otherwise, basic monitoring is enabled.
	Enabled *bool

	noSmithyDocumentSerde
}

// Describes an instance refresh for an Auto Scaling group.
type InstanceRefresh struct {

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string

	// Describes the desired configuration for the instance refresh.
	DesiredConfiguration *DesiredConfiguration

	// The date and time at which the instance refresh ended.
	EndTime *time.Time

	// The instance refresh ID.
	InstanceRefreshId *string

	// The number of instances remaining to update before the instance refresh is
	// complete. If you roll back the instance refresh, InstancesToUpdate shows you
	// the number of instances that were not yet updated by the instance refresh.
	// Therefore, these instances don't need to be replaced as part of the rollback.
	InstancesToUpdate *int32

	// The percentage of the instance refresh that is complete. For each instance
	// replacement, Amazon EC2 Auto Scaling tracks the instance's health status and
	// warm-up time. When the instance's health status changes to healthy and the
	// specified warm-up time passes, the instance is considered updated and is added
	// to the percentage complete. PercentageComplete does not include instances that
	// are replaced during a rollback. This value gradually goes back down to zero
	// during a rollback.
	PercentageComplete *int32

	// The preferences for an instance refresh.
	Preferences *RefreshPreferences

	// Additional progress details for an Auto Scaling group that has a warm pool.
	ProgressDetails *InstanceRefreshProgressDetails

	// The rollback details.
	RollbackDetails *RollbackDetails

	// The date and time at which the instance refresh began.
	StartTime *time.Time

	// The current status for the instance refresh operation:
	//   - Pending - The request was created, but the instance refresh has not started.
	//   - InProgress - An instance refresh is in progress.
	//   - Successful - An instance refresh completed successfully.
	//   - Failed - An instance refresh failed to complete. You can troubleshoot using
	//   the status reason and the scaling activities.
	//   - Cancelling - An ongoing instance refresh is being cancelled.
	//   - Cancelled - The instance refresh is cancelled.
	//   - RollbackInProgress - An instance refresh is being rolled back.
	//   - RollbackFailed - The rollback failed to complete. You can troubleshoot using
	//   the status reason and the scaling activities.
	//   - RollbackSuccessful - The rollback completed successfully.
	Status InstanceRefreshStatus

	// The explanation for the specific status assigned to this operation.
	StatusReason *string

	noSmithyDocumentSerde
}

// Reports progress on replacing instances that are in the Auto Scaling group.
type InstanceRefreshLivePoolProgress struct {

	// The number of instances remaining to update.
	InstancesToUpdate *int32

	// The percentage of instances in the Auto Scaling group that have been replaced.
	// For each instance replacement, Amazon EC2 Auto Scaling tracks the instance's
	// health status and warm-up time. When the instance's health status changes to
	// healthy and the specified warm-up time passes, the instance is considered
	// updated and is added to the percentage complete.
	PercentageComplete *int32

	noSmithyDocumentSerde
}

// Reports progress on replacing instances in an Auto Scaling group that has a
// warm pool. This includes separate details for instances in the warm pool and
// instances in the Auto Scaling group (the live pool).
type InstanceRefreshProgressDetails struct {

	// Reports progress on replacing instances that are in the Auto Scaling group.
	LivePoolProgress *InstanceRefreshLivePoolProgress

	// Reports progress on replacing instances that are in the warm pool.
	WarmPoolProgress *InstanceRefreshWarmPoolProgress

	noSmithyDocumentSerde
}

// Reports progress on replacing instances that are in the warm pool.
type InstanceRefreshWarmPoolProgress struct {

	// The number of instances remaining to update.
	InstancesToUpdate *int32

	// The percentage of instances in the warm pool that have been replaced. For each
	// instance replacement, Amazon EC2 Auto Scaling tracks the instance's health
	// status and warm-up time. When the instance's health status changes to healthy
	// and the specified warm-up time passes, the instance is considered updated and is
	// added to the percentage complete.
	PercentageComplete *int32

	noSmithyDocumentSerde
}

// The attributes for the instance types for a mixed instances policy. 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. When you specify multiple attributes, you get instance
// types that satisfy all of the specified attributes. If you specify multiple
// values for an attribute, you get instance types that satisfy any of the
// specified values. To limit the list of instance types from which Amazon EC2 Auto
// Scaling can identify matching instance types, you can use one of the following
// parameters, but not both in the same request:
//   - AllowedInstanceTypes - The instance types to include in the list. All other
//     instance types are ignored, even if they match your specified attributes.
//   - ExcludedInstanceTypes - The instance types to exclude from the list, even if
//     they match your specified attributes.
//
// You must specify VCpuCount and MemoryMiB . All other attributes are optional.
// Any unspecified optional attribute is set to its default. For more information,
// see Creating an Auto Scaling group using attribute-based instance type selection (https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-instance-type-requirements.html)
// in the Amazon EC2 Auto Scaling User Guide. For help determining which instance
// types match your attributes before you apply them to your Auto Scaling group,
// see Preview instance types with specified attributes (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-fleet-attribute-based-instance-type-selection.html#ec2fleet-get-instance-types-from-instance-requirements)
// in the Amazon EC2 User Guide for Linux Instances.
type InstanceRequirements struct {

	// The minimum and maximum instance memory size for an instance type, in MiB.
	//
	// This member is required.
	MemoryMiB *MemoryMiBRequest

	// The minimum and maximum number of vCPUs for an instance type.
	//
	// This member is required.
	VCpuCount *VCpuCountRequest

	// The minimum and maximum number of accelerators (GPUs, FPGAs, or Amazon Web
	// Services Inferentia chips) for an instance type. To exclude accelerator-enabled
	// instance types, set Max to 0 . Default: No minimum or maximum limits
	AcceleratorCount *AcceleratorCountRequest

	// Indicates whether instance types must have accelerators by specific
	// manufacturers.
	//   - For instance types with NVIDIA devices, specify nvidia .
	//   - For instance types with AMD devices, specify amd .
	//   - For instance types with Amazon Web Services devices, specify
	//   amazon-web-services .
	//   - For instance types with Xilinx devices, specify xilinx .
	// Default: Any manufacturer
	AcceleratorManufacturers []AcceleratorManufacturer

	// Lists the accelerators that must be on an instance type.
	//   - For instance types with NVIDIA A100 GPUs, specify a100 .
	//   - For instance types with NVIDIA V100 GPUs, specify v100 .
	//   - For instance types with NVIDIA K80 GPUs, specify k80 .
	//   - For instance types with NVIDIA T4 GPUs, specify t4 .
	//   - For instance types with NVIDIA M60 GPUs, specify m60 .
	//   - For instance types with AMD Radeon Pro V520 GPUs, specify radeon-pro-v520 .
	//   - For instance types with Xilinx VU9P FPGAs, specify vu9p .
	// Default: Any accelerator
	AcceleratorNames []AcceleratorName

	// The minimum and maximum total memory size for the accelerators on an instance
	// type, in MiB. Default: No minimum or maximum limits
	AcceleratorTotalMemoryMiB *AcceleratorTotalMemoryMiBRequest

	// Lists the accelerator types that must be on an instance type.
	//   - For instance types with GPU accelerators, specify gpu .
	//   - For instance types with FPGA accelerators, specify fpga .
	//   - For instance types with inference accelerators, specify inference .
	// Default: Any accelerator type
	AcceleratorTypes []AcceleratorType

	// The instance types to apply your specified attributes against. All other
	// instance types are ignored, even if they match your specified attributes. You
	// can use strings with one or more wild cards, represented by an asterisk ( * ),
	// to allow an instance type, size, or generation. The following are examples:
	// m5.8xlarge , c5*.* , m5a.* , r* , *3* . For example, if you specify c5* , Amazon
	// EC2 Auto Scaling will allow the entire C5 instance family, which includes all
	// C5a and C5n instance types. If you specify m5a.* , Amazon EC2 Auto Scaling will
	// allow all the M5a instance types, but not the M5n instance types. If you specify
	// AllowedInstanceTypes , you can't specify ExcludedInstanceTypes . Default: All
	// instance types
	AllowedInstanceTypes []string

	// Indicates whether bare metal instance types are included, excluded, or
	// required. Default: excluded
	BareMetal BareMetal

	// The minimum and maximum baseline bandwidth performance for an instance type, in
	// Mbps. For more information, see Amazon EBS–optimized instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)
	// in the Amazon EC2 User Guide for Linux Instances. Default: No minimum or maximum
	// limits
	BaselineEbsBandwidthMbps *BaselineEbsBandwidthMbpsRequest

	// Indicates whether burstable performance instance types are included, excluded,
	// or required. For more information, see Burstable performance instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)
	// in the Amazon EC2 User Guide for Linux Instances. Default: excluded
	BurstablePerformance BurstablePerformance

	// Lists which specific CPU manufacturers to include.
	//   - For instance types with Intel CPUs, specify intel .
	//   - For instance types with AMD CPUs, specify amd .
	//   - For instance types with Amazon Web Services CPUs, specify
	//   amazon-web-services .
	// Don't confuse the CPU hardware manufacturer with the CPU hardware architecture.
	// Instances will be launched with a compatible CPU architecture based on the
	// Amazon Machine Image (AMI) that you specify in your launch template. Default:
	// Any manufacturer
	CpuManufacturers []CpuManufacturer

	// The instance types to exclude. You can use strings with one or more wild cards,
	// represented by an asterisk ( * ), to exclude an instance family, type, size, or
	// generation. The following are examples: m5.8xlarge , c5*.* , m5a.* , r* , *3* .
	// For example, if you specify c5* , you are excluding the entire C5 instance
	// family, which includes all C5a and C5n instance types. If you specify m5a.* ,
	// Amazon EC2 Auto Scaling will exclude all the M5a instance types, but not the M5n
	// instance types. If you specify ExcludedInstanceTypes , you can't specify
	// AllowedInstanceTypes . Default: No excluded instance types
	ExcludedInstanceTypes []string

	// Indicates whether current or previous generation instance types are included.
	//   - For current generation instance types, specify current . The current
	//   generation includes EC2 instance types currently recommended for use. This
	//   typically includes the latest two to three generations in each instance family.
	//   For more information, see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	//   in the Amazon EC2 User Guide for Linux Instances.
	//   - For previous generation instance types, specify previous .
	// Default: Any current or previous generation
	InstanceGenerations []InstanceGeneration

	// Indicates whether instance types with instance store volumes are included,
	// excluded, or required. For more information, see Amazon EC2 instance store (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html)
	// in the Amazon EC2 User Guide for Linux Instances. Default: included
	LocalStorage LocalStorage

	// Indicates the type of local storage that is required.
	//   - For instance types with hard disk drive (HDD) storage, specify hdd .
	//   - For instance types with solid state drive (SSD) storage, specify ssd .
	// Default: Any local storage type
	LocalStorageTypes []LocalStorageType

	// The minimum and maximum amount of memory per vCPU for an instance type, in GiB.
	// Default: No minimum or maximum limits
	MemoryGiBPerVCpu *MemoryGiBPerVCpuRequest

	// The minimum and maximum amount of network bandwidth, in gigabits per second
	// (Gbps). Default: No minimum or maximum limits
	NetworkBandwidthGbps *NetworkBandwidthGbpsRequest

	// The minimum and maximum number of network interfaces for an instance type.
	// Default: No minimum or maximum limits
	NetworkInterfaceCount *NetworkInterfaceCountRequest

	// The price protection threshold for On-Demand Instances. This is the maximum
	// you’ll pay for an On-Demand Instance, expressed as a percentage higher than the
	// least expensive current generation M, C, or R instance type with your specified
	// attributes. When Amazon EC2 Auto Scaling selects instance types with your
	// attributes, we will exclude instance types whose price is higher than your
	// threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling
	// interprets as a percentage. To turn off price protection, specify a high value,
	// such as 999999 . If you set DesiredCapacityType to vcpu or memory-mib , the
	// price protection threshold is applied based on the per vCPU or per memory price
	// instead of the per instance price. Default: 20
	OnDemandMaxPricePercentageOverLowestPrice *int32

	// Indicates whether instance types must provide On-Demand Instance hibernation
	// support. Default: false
	RequireHibernateSupport *bool

	// The price protection threshold for Spot Instances. This is the maximum you’ll
	// pay for a Spot Instance, expressed as a percentage higher than the least
	// expensive current generation M, C, or R instance type with your specified
	// attributes. When Amazon EC2 Auto Scaling selects instance types with your
	// attributes, we will exclude instance types whose price is higher than your
	// threshold. The parameter accepts an integer, which Amazon EC2 Auto Scaling
	// interprets as a percentage. To turn off price protection, specify a high value,
	// such as 999999 . If you set DesiredCapacityType to vcpu or memory-mib , the
	// price protection threshold is applied based on the per vCPU or per memory price
	// instead of the per instance price. Default: 100
	SpotMaxPricePercentageOverLowestPrice *int32

	// The minimum and maximum total local storage size for an instance type, in GB.
	// Default: No minimum or maximum limits
	TotalLocalStorageGB *TotalLocalStorageGBRequest

	noSmithyDocumentSerde
}

// Describes an instance reuse policy for a warm pool. For more information, see
// Warm pools for Amazon EC2 Auto Scaling (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-warm-pools.html)
// in the Amazon EC2 Auto Scaling User Guide.
type InstanceReusePolicy struct {

	// Specifies whether instances in the Auto Scaling group can be returned to the
	// warm pool on scale in.
	ReuseOnScaleIn *bool

	noSmithyDocumentSerde
}

// Use this structure to specify the distribution of On-Demand Instances and Spot
// Instances and the allocation strategies used to fulfill On-Demand and Spot
// capacities for a mixed instances policy.
type InstancesDistribution struct {

	// The allocation strategy to apply to your On-Demand Instances when they are
	// launched. Possible instance types are determined by the launch template
	// overrides that you specify. The following lists the valid values: lowest-price
	// Uses price to determine which instance types are the highest priority, launching
	// the lowest priced instance types within an Availability Zone first. This is the
	// default value for Auto Scaling groups that specify InstanceRequirements .
	// prioritized You set the order of instance types for the launch template
	// overrides from highest to lowest priority (from first to last in the list).
	// Amazon EC2 Auto Scaling launches your highest priority instance types first. If
	// all your On-Demand capacity cannot be fulfilled using your highest priority
	// instance type, then Amazon EC2 Auto Scaling launches the remaining capacity
	// using the second priority instance type, and so on. This is the default value
	// for Auto Scaling groups that don't specify InstanceRequirements and cannot be
	// used for groups that do.
	OnDemandAllocationStrategy *string

	// The minimum amount of the Auto Scaling group's capacity that must be fulfilled
	// by On-Demand Instances. This base portion is launched first as your group
	// scales. This number has the same unit of measurement as the group's desired
	// capacity. If you change the default unit of measurement (number of instances) by
	// specifying weighted capacity values in your launch template overrides list, or
	// by changing the default desired capacity type setting of the group, you must
	// specify this number using the same unit of measurement. Default: 0
	OnDemandBaseCapacity *int32

	// 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). If set to
	// 100, only On-Demand Instances are used. Default: 100
	OnDemandPercentageAboveBaseCapacity *int32

	// The allocation strategy to apply to your Spot Instances when they are launched.
	// Possible instance types are determined by the launch template overrides that you
	// specify. The following lists the valid values: capacity-optimized Requests Spot
	// Instances using pools that are optimally chosen based on the available Spot
	// capacity. This strategy has the lowest risk of interruption. To give certain
	// instance types a higher chance of launching first, use
	// capacity-optimized-prioritized . capacity-optimized-prioritized You set the
	// order of instance types for the 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. Note that if the On-Demand allocation strategy is set to prioritized ,
	// the same priority is applied when fulfilling On-Demand capacity. This is not a
	// valid value for Auto Scaling groups that specify InstanceRequirements .
	// lowest-price Requests Spot Instances using the lowest priced pools within an
	// Availability Zone, across the number of Spot pools that you specify for the
	// SpotInstancePools property. To ensure that your desired capacity is met, you
	// might receive Spot Instances from several pools. This is the default value, but
	// it might lead to high interruption rates because this strategy only considers
	// instance price and not available capacity. price-capacity-optimized
	// (recommended) 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.
	SpotAllocationStrategy *string

	// The number of Spot Instance pools across which to allocate your Spot Instances.
	// The Spot pools are determined from the different instance types in the
	// overrides. Valid only when the SpotAllocationStrategy is lowest-price . Value
	// must be in the range of 1–20. Default: 2
	SpotInstancePools *int32

	// The maximum price per unit hour that you are willing to pay for a Spot
	// Instance. If your maximum price is lower than the Spot price for the instance
	// types that you selected, your Spot Instances are not launched. We do not
	// recommend specifying a maximum price because it can lead to increased
	// interruptions. When Spot Instances launch, you pay the current Spot price. To
	// remove a maximum price that you previously set, include the property but specify
	// an empty string ("") for the value. If you specify a maximum price, your
	// instances will be interrupted more frequently than if you do not specify one.
	// Valid Range: Minimum value of 0.001
	SpotMaxPrice *string

	noSmithyDocumentSerde
}

// Describes a launch configuration.
type LaunchConfiguration struct {

	// The creation date and time for the launch configuration.
	//
	// This member is required.
	CreatedTime *time.Time

	// The ID of the Amazon Machine Image (AMI) to use to launch your EC2 instances.
	// For more information, see Find a Linux AMI (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	//
	// This member is required.
	ImageId *string

	// The instance type for the instances. For information about available instance
	// types, see Available instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)
	// in the Amazon EC2 User Guide for Linux Instances.
	//
	// This member is required.
	InstanceType *string

	// The name of the launch configuration.
	//
	// This member is required.
	LaunchConfigurationName *string

	// Specifies whether to assign a public IPv4 address to the group's instances. If
	// the instance is launched into a default subnet, the default is to assign a
	// public IPv4 address, unless you disabled the option to assign a public IPv4
	// address on the subnet. If the instance is launched into a nondefault subnet, the
	// default is not to assign a public IPv4 address, unless you enabled the option to
	// assign a public IPv4 address on the subnet. For more information, see Launching
	// Auto Scaling instances in a VPC (https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-in-vpc.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	AssociatePublicIpAddress *bool

	// The block device mapping entries that define the block devices to attach to the
	// instances at launch. By default, the block devices specified in the block device
	// mapping for the AMI are used. For more information, see Block Device Mapping (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	BlockDeviceMappings []BlockDeviceMapping

	// Available for backward compatibility.
	ClassicLinkVPCId *string

	// Available for backward compatibility.
	ClassicLinkVPCSecurityGroups []string

	// Specifies whether the launch configuration is optimized for EBS I/O ( true ) or
	// not ( false ). For more information, see Amazon EBS-Optimized Instances (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSOptimized.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	EbsOptimized *bool

	// The name or the Amazon Resource Name (ARN) of the instance profile associated
	// with the IAM role for the instance. The instance profile contains the IAM role.
	// For more information, see IAM role for applications that run on Amazon EC2
	// instances (https://docs.aws.amazon.com/autoscaling/ec2/userguide/us-iam-role.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	IamInstanceProfile *string

	// Controls whether instances in this group are launched with detailed ( true ) or
	// basic ( false ) monitoring. For more information, see Configure Monitoring for
	// Auto Scaling Instances (https://docs.aws.amazon.com/autoscaling/latest/userguide/enable-as-instance-metrics.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	InstanceMonitoring *InstanceMonitoring

	// The ID of the kernel associated with the AMI.
	KernelId *string

	// The name of the key pair. For more information, see Amazon EC2 Key Pairs (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)
	// in the Amazon EC2 User Guide for Linux Instances.
	KeyName *string

	// The Amazon Resource Name (ARN) of the launch configuration.
	LaunchConfigurationARN *string

	// The metadata options for the instances. For more information, see Configuring
	// the Instance Metadata Options (https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-config.html#launch-configurations-imds)
	// in the Amazon EC2 Auto Scaling User Guide.
	MetadataOptions *InstanceMetadataOptions

	// The tenancy of the instance, either default or dedicated . An instance with
	// dedicated tenancy runs on isolated, single-tenant hardware and can only be
	// launched into a VPC. For more information, see Configuring instance tenancy
	// with Amazon EC2 Auto Scaling (https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-dedicated-instances.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	PlacementTenancy *string

	// The ID of the RAM disk associated with the AMI.
	RamdiskId *string

	// A list that contains the security groups to assign to the instances in the Auto
	// Scaling group. For more information, see Security Groups for Your VPC (https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html)
	// in the Amazon Virtual Private Cloud User Guide.
	SecurityGroups []string

	// The maximum hourly price 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 price. For more information, see Requesting Spot Instances (https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-launch-spot-instances.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	SpotPrice *string

	// The user data to make available to the launched EC2 instances. For more
	// information, see Instance metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)
	// (Linux) and Instance metadata and user data (https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-instance-metadata.html)
	// (Windows). If you are using a command line tool, base64-encoding is performed
	// for you, and you can load the text from a file. Otherwise, you must provide
	// base64-encoded text. User data is limited to 16 KB.
	UserData *string

	noSmithyDocumentSerde
}

// Use this structure to specify the launch templates and instance types
// (overrides) for a mixed instances policy.
type LaunchTemplate struct {

	// The launch template.
	LaunchTemplateSpecification *LaunchTemplateSpecification

	// Any properties that you specify override the same properties in the launch
	// template.
	Overrides []LaunchTemplateOverrides

	noSmithyDocumentSerde
}

// Use this structure to let Amazon EC2 Auto Scaling do the following when the
// Auto Scaling group has a mixed instances policy:
//   - Override the instance type that is specified in the launch template.
//   - Use multiple instance types.
//
// Specify the instance types that you want, or define your instance requirements
// instead and let Amazon EC2 Auto Scaling provision the available instance types
// that meet your requirements. This can provide Amazon EC2 Auto Scaling with a
// larger selection of instance types to choose from when fulfilling Spot and
// On-Demand capacities. You can view which instance types are matched before you
// apply the instance requirements to your Auto Scaling group. After you define
// your instance requirements, you don't have to keep updating these settings to
// get new EC2 instance types automatically. Amazon EC2 Auto Scaling uses the
// instance requirements of the Auto Scaling group to determine whether a new EC2
// instance type can be used.
type LaunchTemplateOverrides struct {

	// 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. If you specify
	// InstanceRequirements , you can't specify InstanceType .
	InstanceRequirements *InstanceRequirements

	// The instance type, such as m3.xlarge . You must specify an instance type that is
	// supported in your requested Region and Availability Zones. For more information,
	// see Instance types (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)
	// in the Amazon Elastic Compute Cloud User Guide. You can specify up to 40
	// instance types per Auto Scaling group.
	InstanceType *string

	// Provides a launch template for the specified instance type or set of instance
	// requirements. 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 specified in the LaunchTemplate definition. For more
	// information, see Specifying a different launch template for an instance type (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-launch-template-overrides.html)
	// in the Amazon EC2 Auto Scaling User Guide. You can specify up to 20 launch
	// templates per Auto Scaling group. The launch templates specified in the
	// overrides and in the LaunchTemplate definition count towards this limit.
	LaunchTemplateSpecification *LaunchTemplateSpecification

	// If you provide a list of instance types to use, you can specify the number of
	// capacity units provided by each instance type in terms of virtual CPUs, memory,
	// storage, throughput, or other relative performance characteristic. When a Spot
	// or On-Demand Instance is launched, the capacity units count toward the desired
	// capacity. Amazon EC2 Auto Scaling launches instances until the desired capacity
	// is totally fulfilled, even if this results in an overage. For example, if there
	// are two units remaining to fulfill capacity, and Amazon EC2 Auto Scaling can
	// only launch an instance with a WeightedCapacity of five units, the instance is
	// launched, and the desired capacity is exceeded by three units. For more
	// information, see Configuring instance weighting for Amazon EC2 Auto Scaling (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups-instance-weighting.html)
	// in the Amazon EC2 Auto Scaling User Guide. Value must be in the range of 1–999.
	// If you specify a value for WeightedCapacity for one instance type, you must
	// specify a value for WeightedCapacity for all of them. Every Auto Scaling group
	// has three size parameters ( DesiredCapacity , MaxSize , and MinSize ). Usually,
	// you set these sizes based on a specific number of instances. However, if you
	// configure a mixed instances policy that defines weights for the instance types,
	// you must specify these sizes with the same units that you use for weighting
	// instances.
	WeightedCapacity *string

	noSmithyDocumentSerde
}

// Describes the launch template and the version of the launch template that
// Amazon EC2 Auto Scaling uses to launch Amazon EC2 instances. For more
// information about launch templates, see Launch templates (https://docs.aws.amazon.com/autoscaling/ec2/userguide/LaunchTemplates.html)
// in the Amazon EC2 Auto Scaling User Guide.
type LaunchTemplateSpecification struct {

	// The ID of the launch template. To get the template ID, use the Amazon EC2
	// DescribeLaunchTemplates (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html)
	// API operation. New launch templates can be created using the Amazon EC2
	// CreateLaunchTemplate (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)
	// API. Conditional: You must specify either a LaunchTemplateId or a
	// LaunchTemplateName .
	LaunchTemplateId *string

	// The name of the launch template. To get the template name, use the Amazon EC2
	// DescribeLaunchTemplates (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplates.html)
	// API operation. New launch templates can be created using the Amazon EC2
	// CreateLaunchTemplate (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplate.html)
	// API. Conditional: You must specify either a LaunchTemplateId or a
	// LaunchTemplateName .
	LaunchTemplateName *string

	// The version number, $Latest , or $Default . To get the version number, use the
	// Amazon EC2 DescribeLaunchTemplateVersions (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeLaunchTemplateVersions.html)
	// API operation. New launch template versions can be created using the Amazon EC2
	// CreateLaunchTemplateVersion (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateLaunchTemplateVersion.html)
	// API. If the value is $Latest , Amazon EC2 Auto Scaling selects the latest
	// version of the launch template when launching instances. If the value is
	// $Default , Amazon EC2 Auto Scaling selects the default version of the launch
	// template when launching instances. The default value is $Default .
	Version *string

	noSmithyDocumentSerde
}

// Describes a lifecycle hook. A lifecycle hook lets you create solutions that are
// aware of events in the Auto Scaling instance lifecycle, and then perform a
// custom action on instances when the corresponding lifecycle event occurs.
type LifecycleHook struct {

	// The name of the Auto Scaling group for the lifecycle hook.
	AutoScalingGroupName *string

	// The action the Auto Scaling group takes when the lifecycle hook timeout elapses
	// or if an unexpected failure occurs. Valid values: CONTINUE | ABANDON
	DefaultResult *string

	// The maximum time, in seconds, that an instance can remain in a wait state. The
	// maximum is 172800 seconds (48 hours) or 100 times HeartbeatTimeout , whichever
	// is smaller.
	GlobalTimeout *int32

	// The maximum time, in seconds, that can elapse before the lifecycle hook times
	// out. If the lifecycle hook times out, Amazon EC2 Auto Scaling performs the
	// action that you specified in the DefaultResult property.
	HeartbeatTimeout *int32

	// The name of the lifecycle hook.
	LifecycleHookName *string

	// The lifecycle transition. Valid values: autoscaling:EC2_INSTANCE_LAUNCHING |
	// autoscaling:EC2_INSTANCE_TERMINATING
	LifecycleTransition *string

	// Additional information that is included any time Amazon EC2 Auto Scaling sends
	// a message to the notification target.
	NotificationMetadata *string

	// The ARN of the target that Amazon EC2 Auto Scaling sends notifications to when
	// an instance is in a wait state for the lifecycle hook.
	NotificationTargetARN *string

	// The ARN of the IAM role that allows the Auto Scaling group to publish to the
	// specified notification target (an Amazon SNS topic or an Amazon SQS queue).
	RoleARN *string

	noSmithyDocumentSerde
}

// Describes information used to specify a lifecycle hook for an Auto Scaling
// group. For more information, see Amazon EC2 Auto Scaling lifecycle hooks (https://docs.aws.amazon.com/autoscaling/ec2/userguide/lifecycle-hooks.html)
// in the Amazon EC2 Auto Scaling User Guide.
type LifecycleHookSpecification struct {

	// The name of the lifecycle hook.
	//
	// This member is required.
	LifecycleHookName *string

	// The lifecycle transition. For Auto Scaling groups, there are two major
	// lifecycle transitions.
	//   - To create a lifecycle hook for scale-out events, specify
	//   autoscaling:EC2_INSTANCE_LAUNCHING .
	//   - To create a lifecycle hook for scale-in events, specify
	//   autoscaling:EC2_INSTANCE_TERMINATING .
	//
	// This member is required.
	LifecycleTransition *string

	// The action the Auto Scaling group takes when the lifecycle hook timeout elapses
	// or if an unexpected failure occurs. The default value is ABANDON . Valid values:
	// CONTINUE | ABANDON
	DefaultResult *string

	// The maximum time, in seconds, that can elapse before the lifecycle hook times
	// out. The range is from 30 to 7200 seconds. The default value is 3600 seconds (1
	// hour).
	HeartbeatTimeout *int32

	// Additional information that you want to include any time Amazon EC2 Auto
	// Scaling sends a message to the notification target.
	NotificationMetadata *string

	// The Amazon Resource Name (ARN) of the notification target that Amazon EC2 Auto
	// Scaling sends notifications to when an instance is in a wait state for the
	// lifecycle hook. You can specify an Amazon SNS topic or an Amazon SQS queue.
	NotificationTargetARN *string

	// The ARN of the IAM role that allows the Auto Scaling group to publish to the
	// specified notification target. For information about creating this role, see
	// Configure a notification target for a lifecycle hook (https://docs.aws.amazon.com/autoscaling/ec2/userguide/prepare-for-lifecycle-notifications.html#lifecycle-hook-notification-target)
	// in the Amazon EC2 Auto Scaling User Guide. Valid only if the notification target
	// is an Amazon SNS topic or an Amazon SQS queue.
	RoleARN *string

	noSmithyDocumentSerde
}

// Describes the state of a Classic Load Balancer.
type LoadBalancerState struct {

	// The name of the load balancer.
	LoadBalancerName *string

	// One of the following load balancer states:
	//   - Adding - The Auto Scaling instances are being registered with the load
	//   balancer.
	//   - Added - All Auto Scaling instances are registered with the load balancer.
	//   - InService - At least one Auto Scaling instance passed an ELB health check.
	//   - Removing - The Auto Scaling instances are being deregistered from the load
	//   balancer. If connection draining is enabled, Elastic Load Balancing waits for
	//   in-flight requests to complete before deregistering the instances.
	//   - Removed - All Auto Scaling instances are deregistered from the load
	//   balancer.
	State *string

	noSmithyDocumentSerde
}

// Describes the state of a target group.
type LoadBalancerTargetGroupState struct {

	// The Amazon Resource Name (ARN) of the target group.
	LoadBalancerTargetGroupARN *string

	// The state of the target group.
	//   - Adding - The Auto Scaling instances are being registered with the target
	//   group.
	//   - Added - All Auto Scaling instances are registered with the target group.
	//   - InService - At least one Auto Scaling instance passed an ELB health check.
	//   - Removing - The Auto Scaling instances are being deregistered from the target
	//   group. If connection draining is enabled, Elastic Load Balancing waits for
	//   in-flight requests to complete before deregistering the instances.
	//   - Removed - All Auto Scaling instances are deregistered from the target group.
	State *string

	noSmithyDocumentSerde
}

// A GetPredictiveScalingForecast call returns the load forecast for a predictive
// scaling policy. This structure includes the data points for that load forecast,
// along with the timestamps of those data points and the metric specification.
type LoadForecast struct {

	// The metric specification for the load forecast.
	//
	// This member is required.
	MetricSpecification *PredictiveScalingMetricSpecification

	// The timestamps for the data points, in UTC format.
	//
	// This member is required.
	Timestamps []time.Time

	// The values of the data points.
	//
	// This member is required.
	Values []float64

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the MemoryGiBPerVCpu object when you
// specify InstanceRequirements for an Auto Scaling group.
type MemoryGiBPerVCpuRequest struct {

	// The memory maximum in GiB.
	Max *float64

	// The memory minimum in GiB.
	Min *float64

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the MemoryMiB object when you specify
// InstanceRequirements for an Auto Scaling group.
type MemoryMiBRequest struct {

	// The memory minimum in MiB.
	//
	// This member is required.
	Min *int32

	// The memory maximum in MiB.
	Max *int32

	noSmithyDocumentSerde
}

// Represents a specific metric.
type Metric struct {

	// The name of the metric.
	//
	// This member is required.
	MetricName *string

	// The namespace of the metric. For more information, see the table in Amazon Web
	// Services services that publish CloudWatch metrics  (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)
	// in the Amazon CloudWatch User Guide.
	//
	// This member is required.
	Namespace *string

	// The dimensions for the metric. For the list of available dimensions, see the
	// Amazon Web Services documentation available from the table in Amazon Web
	// Services services that publish CloudWatch metrics  (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-services-cloudwatch-metrics.html)
	// in the Amazon CloudWatch User Guide. Conditional: If you published your metric
	// with dimensions, you must specify the same dimensions in your scaling policy.
	Dimensions []MetricDimension

	noSmithyDocumentSerde
}

// Describes a metric.
type MetricCollectionType struct {

	// One of the following metrics:
	//   - GroupMinSize
	//   - GroupMaxSize
	//   - GroupDesiredCapacity
	//   - GroupInServiceInstances
	//   - GroupPendingInstances
	//   - GroupStandbyInstances
	//   - GroupTerminatingInstances
	//   - GroupTotalInstances
	//   - GroupInServiceCapacity
	//   - GroupPendingCapacity
	//   - GroupStandbyCapacity
	//   - GroupTerminatingCapacity
	//   - GroupTotalCapacity
	//   - WarmPoolDesiredCapacity
	//   - WarmPoolWarmedCapacity
	//   - WarmPoolPendingCapacity
	//   - WarmPoolTerminatingCapacity
	//   - WarmPoolTotalCapacity
	//   - GroupAndWarmPoolDesiredCapacity
	//   - GroupAndWarmPoolTotalCapacity
	Metric *string

	noSmithyDocumentSerde
}

// The metric data to return. Also defines whether this call is returning data for
// one metric only, or whether it is performing a math expression on the values of
// returned metric statistics to create a new time series. A time series is a
// series of data points, each of which is associated with a timestamp. For more
// information and examples, see Advanced predictive scaling policy configurations
// using custom metrics (https://docs.aws.amazon.com/autoscaling/ec2/userguide/predictive-scaling-customized-metric-specification.html)
// in the Amazon EC2 Auto Scaling User Guide.
type MetricDataQuery struct {

	// A short name that identifies the object's results in the response. This name
	// must be unique among all MetricDataQuery objects specified for a single scaling
	// policy. If you are performing math expressions on this set of data, this name
	// represents that data and can serve as a variable in the mathematical expression.
	// The valid characters are letters, numbers, and underscores. The first character
	// must be a lowercase letter.
	//
	// This member is required.
	Id *string

	// The math expression to perform on the returned data, if this object is
	// performing a math expression. This expression can use the Id of the other
	// metrics to refer to those metrics, and can also use the Id of other expressions
	// to use the result of those expressions. Conditional: Within each MetricDataQuery
	// object, you must specify either Expression or MetricStat , but not both.
	Expression *string

	// A human-readable label for this metric or expression. This is especially useful
	// if this is a math expression, so that you know what the value represents.
	Label *string

	// Information about the metric data to return. Conditional: Within each
	// MetricDataQuery object, you must specify either Expression or MetricStat , but
	// not both.
	MetricStat *MetricStat

	// Indicates whether to return the timestamps and raw data values of this metric.
	// If you use any math expressions, specify true for this value for only the final
	// math expression that the metric specification is based on. You must specify
	// false for ReturnData for all the other metrics and expressions used in the
	// metric specification. If you are only retrieving metrics and not performing any
	// math expressions, do not specify anything for ReturnData . This sets it to its
	// default ( true ).
	ReturnData *bool

	noSmithyDocumentSerde
}

// Describes the dimension of a metric.
type MetricDimension struct {

	// The name of the dimension.
	//
	// This member is required.
	Name *string

	// The value of the dimension.
	//
	// This member is required.
	Value *string

	noSmithyDocumentSerde
}

// Describes a granularity of a metric.
type MetricGranularityType struct {

	// The granularity. The only valid value is 1Minute .
	Granularity *string

	noSmithyDocumentSerde
}

// This structure defines the CloudWatch metric to return, along with the
// statistic, period, and unit. For more information about the CloudWatch
// terminology below, see Amazon CloudWatch concepts (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)
// in the Amazon CloudWatch User Guide.
type MetricStat struct {

	// The CloudWatch metric to return, including the metric name, namespace, and
	// dimensions. To get the exact metric name, namespace, and dimensions, inspect the
	// Metric (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_Metric.html)
	// object that is returned by a call to ListMetrics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html)
	// .
	//
	// This member is required.
	Metric *Metric

	// The statistic to return. It can include any CloudWatch statistic or extended
	// statistic. For a list of valid values, see the table in Statistics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic)
	// in the Amazon CloudWatch User Guide. The most commonly used metrics for
	// predictive scaling are Average and Sum .
	//
	// This member is required.
	Stat *string

	// The unit to use for the returned data points. For a complete list of the units
	// that CloudWatch supports, see the MetricDatum (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)
	// data type in the Amazon CloudWatch API Reference.
	Unit *string

	noSmithyDocumentSerde
}

// Use this structure to launch multiple instance types and On-Demand Instances
// and Spot Instances within a single Auto Scaling group. A mixed instances policy
// contains information that Amazon EC2 Auto Scaling can use to launch instances
// and help optimize your costs. For more information, see Auto Scaling groups
// with multiple instance types and purchase options (https://docs.aws.amazon.com/autoscaling/ec2/userguide/ec2-auto-scaling-mixed-instances-groups.html)
// in the Amazon EC2 Auto Scaling User Guide.
type MixedInstancesPolicy struct {

	// The instances distribution.
	InstancesDistribution *InstancesDistribution

	// One or more launch templates and the instance types (overrides) that are used
	// to launch EC2 instances to fulfill On-Demand and Spot capacities.
	LaunchTemplate *LaunchTemplate

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the NetworkBandwidthGbps object when you
// specify InstanceRequirements for an Auto Scaling group. Setting the minimum
// bandwidth does not guarantee that your instance will achieve the minimum
// bandwidth. Amazon EC2 will identify instance types that support the specified
// minimum bandwidth, but the actual bandwidth of your instance might go below the
// specified minimum at times. For more information, see Available instance
// bandwidth (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html#available-instance-bandwidth)
// in the Amazon EC2 User Guide for Linux Instances.
type NetworkBandwidthGbpsRequest struct {

	// The maximum amount of network bandwidth, in gigabits per second (Gbps).
	Max *float64

	// The minimum amount of network bandwidth, in gigabits per second (Gbps).
	Min *float64

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the NetworkInterfaceCount object when you
// specify InstanceRequirements for an Auto Scaling group.
type NetworkInterfaceCountRequest struct {

	// The maximum number of network interfaces.
	Max *int32

	// The minimum number of network interfaces.
	Min *int32

	noSmithyDocumentSerde
}

// Describes a notification.
type NotificationConfiguration struct {

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string

	// One of the following event notification types:
	//   - autoscaling:EC2_INSTANCE_LAUNCH
	//   - autoscaling:EC2_INSTANCE_LAUNCH_ERROR
	//   - autoscaling:EC2_INSTANCE_TERMINATE
	//   - autoscaling:EC2_INSTANCE_TERMINATE_ERROR
	//   - autoscaling:TEST_NOTIFICATION
	NotificationType *string

	// The Amazon Resource Name (ARN) of the Amazon SNS topic.
	TopicARN *string

	noSmithyDocumentSerde
}

// Represents a predefined metric for a target tracking scaling policy to use with
// Amazon EC2 Auto Scaling.
type PredefinedMetricSpecification struct {

	// The metric type. The following predefined metrics are available:
	//   - ASGAverageCPUUtilization - Average CPU utilization of the Auto Scaling
	//   group.
	//   - ASGAverageNetworkIn - Average number of bytes received on all network
	//   interfaces by the Auto Scaling group.
	//   - ASGAverageNetworkOut - Average number of bytes sent out on all network
	//   interfaces by the Auto Scaling group.
	//   - ALBRequestCountPerTarget - Average Application Load Balancer request count
	//   per target for your Auto Scaling group.
	//
	// This member is required.
	PredefinedMetricType MetricType

	// A label that uniquely identifies a specific Application Load Balancer target
	// group from which to determine the average request count served by your Auto
	// Scaling group. You can't specify a resource label unless the target group is
	// attached to the Auto Scaling group. You create the resource label by appending
	// the final portion of the load balancer ARN and the final portion of the target
	// group ARN into a single value, separated by a forward slash (/). The format of
	// the resource label is:
	// app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff .
	// Where:
	//   - app// is the final portion of the load balancer ARN
	//   - targetgroup// is the final portion of the target group ARN.
	// To find the ARN for an Application Load Balancer, use the DescribeLoadBalancers (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html)
	// API operation. To find the ARN for the target group, use the
	// DescribeTargetGroups (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html)
	// API operation.
	ResourceLabel *string

	noSmithyDocumentSerde
}

// Represents a predictive scaling policy configuration to use with Amazon EC2
// Auto Scaling.
type PredictiveScalingConfiguration struct {

	// This structure includes the metrics and target utilization to use for
	// predictive scaling. This is an array, but we currently only support a single
	// metric specification. That is, you can specify a target value and a single
	// metric pair, or a target value and one scaling metric and one load metric.
	//
	// This member is required.
	MetricSpecifications []PredictiveScalingMetricSpecification

	// Defines the behavior that should be applied if the forecast capacity approaches
	// or exceeds the maximum capacity of the Auto Scaling group. Defaults to
	// HonorMaxCapacity if not specified. The following are possible values:
	//   - HonorMaxCapacity - Amazon EC2 Auto Scaling cannot scale out capacity higher
	//   than the maximum capacity. The maximum capacity is enforced as a hard limit.
	//   - IncreaseMaxCapacity - Amazon EC2 Auto Scaling can scale out capacity higher
	//   than the maximum capacity when the forecast capacity is close to or exceeds the
	//   maximum capacity. The upper limit is determined by the forecasted capacity and
	//   the value for MaxCapacityBuffer .
	MaxCapacityBreachBehavior PredictiveScalingMaxCapacityBreachBehavior

	// The size of the capacity buffer to use when the forecast capacity is close to
	// or exceeds the maximum capacity. The value is specified as a percentage relative
	// to the forecast capacity. For example, if the buffer is 10, this means a 10
	// percent buffer, such that if the forecast capacity is 50, and the maximum
	// capacity is 40, then the effective maximum capacity is 55. If set to 0, Amazon
	// EC2 Auto Scaling may scale capacity higher than the maximum capacity to equal
	// but not exceed forecast capacity. Required if the MaxCapacityBreachBehavior
	// property is set to IncreaseMaxCapacity , and cannot be used otherwise.
	MaxCapacityBuffer *int32

	// The predictive scaling mode. Defaults to ForecastOnly if not specified.
	Mode PredictiveScalingMode

	// The amount of time, in seconds, by which the instance launch time can be
	// advanced. For example, the forecast says to add capacity at 10:00 AM, and you
	// choose to pre-launch instances by 5 minutes. In that case, the instances will be
	// launched at 9:55 AM. The intention is to give resources time to be provisioned.
	// It can take a few minutes to launch an EC2 instance. The actual amount of time
	// required depends on several factors, such as the size of the instance and
	// whether there are startup scripts to complete. The value must be less than the
	// forecast interval duration of 3600 seconds (60 minutes). Defaults to 300 seconds
	// if not specified.
	SchedulingBufferTime *int32

	noSmithyDocumentSerde
}

// Describes a customized capacity metric for a predictive scaling policy.
type PredictiveScalingCustomizedCapacityMetric struct {

	// One or more metric data queries to provide the data points for a capacity
	// metric. Use multiple metric data queries only if you are performing a math
	// expression on returned data.
	//
	// This member is required.
	MetricDataQueries []MetricDataQuery

	noSmithyDocumentSerde
}

// Describes a custom load metric for a predictive scaling policy.
type PredictiveScalingCustomizedLoadMetric struct {

	// One or more metric data queries to provide the data points for a load metric.
	// Use multiple metric data queries only if you are performing a math expression on
	// returned data.
	//
	// This member is required.
	MetricDataQueries []MetricDataQuery

	noSmithyDocumentSerde
}

// Describes a custom scaling metric for a predictive scaling policy.
type PredictiveScalingCustomizedScalingMetric struct {

	// One or more metric data queries to provide the data points for a scaling
	// metric. Use multiple metric data queries only if you are performing a math
	// expression on returned data.
	//
	// This member is required.
	MetricDataQueries []MetricDataQuery

	noSmithyDocumentSerde
}

// This structure specifies the metrics and target utilization settings for a
// predictive scaling policy. You must specify either a metric pair, or a load
// metric and a scaling metric individually. Specifying a metric pair instead of
// individual metrics provides a simpler way to configure metrics for a scaling
// policy. You choose the metric pair, and the policy automatically knows the
// correct sum and average statistics to use for the load metric and the scaling
// metric. Example
//   - You create a predictive scaling policy and specify ALBRequestCount as the
//     value for the metric pair and 1000.0 as the target value. For this type of
//     metric, you must provide the metric dimension for the corresponding target
//     group, so you also provide a resource label for the Application Load Balancer
//     target group that is attached to your Auto Scaling group.
//   - The number of requests the target group receives per minute provides the
//     load metric, and the request count averaged between the members of the target
//     group provides the scaling metric. In CloudWatch, this refers to the
//     RequestCount and RequestCountPerTarget metrics, respectively.
//   - For optimal use of predictive scaling, you adhere to the best practice of
//     using a dynamic scaling policy to automatically scale between the minimum
//     capacity and maximum capacity in response to real-time changes in resource
//     utilization.
//   - Amazon EC2 Auto Scaling consumes data points for the load metric over the
//     last 14 days and creates an hourly load forecast for predictive scaling. (A
//     minimum of 24 hours of data is required.)
//   - After creating the load forecast, Amazon EC2 Auto Scaling determines when
//     to reduce or increase the capacity of your Auto Scaling group in each hour of
//     the forecast period so that the average number of requests received by each
//     instance is as close to 1000 requests per minute as possible at all times.
//
// For information about using custom metrics with predictive scaling, see
// Advanced predictive scaling policy configurations using custom metrics (https://docs.aws.amazon.com/autoscaling/ec2/userguide/predictive-scaling-customized-metric-specification.html)
// in the Amazon EC2 Auto Scaling User Guide.
type PredictiveScalingMetricSpecification struct {

	// Specifies the target utilization. Some metrics are based on a count instead of
	// a percentage, such as the request count for an Application Load Balancer or the
	// number of messages in an SQS queue. If the scaling policy specifies one of these
	// metrics, specify the target utilization as the optimal average request or
	// message count per instance during any one-minute interval.
	//
	// This member is required.
	TargetValue *float64

	// The customized capacity metric specification.
	CustomizedCapacityMetricSpecification *PredictiveScalingCustomizedCapacityMetric

	// The customized load metric specification.
	CustomizedLoadMetricSpecification *PredictiveScalingCustomizedLoadMetric

	// The customized scaling metric specification.
	CustomizedScalingMetricSpecification *PredictiveScalingCustomizedScalingMetric

	// The predefined load metric specification.
	PredefinedLoadMetricSpecification *PredictiveScalingPredefinedLoadMetric

	// The predefined metric pair specification from which Amazon EC2 Auto Scaling
	// determines the appropriate scaling metric and load metric to use.
	PredefinedMetricPairSpecification *PredictiveScalingPredefinedMetricPair

	// The predefined scaling metric specification.
	PredefinedScalingMetricSpecification *PredictiveScalingPredefinedScalingMetric

	noSmithyDocumentSerde
}

// Describes a load metric for a predictive scaling policy. When returned in the
// output of DescribePolicies , it indicates that a predictive scaling policy uses
// individually specified load and scaling metrics instead of a metric pair.
type PredictiveScalingPredefinedLoadMetric struct {

	// The metric type.
	//
	// This member is required.
	PredefinedMetricType PredefinedLoadMetricType

	// A label that uniquely identifies a specific Application Load Balancer target
	// group from which to determine the request count served by your Auto Scaling
	// group. You can't specify a resource label unless the target group is attached to
	// the Auto Scaling group. You create the resource label by appending the final
	// portion of the load balancer ARN and the final portion of the target group ARN
	// into a single value, separated by a forward slash (/). The format of the
	// resource label is:
	// app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff .
	// Where:
	//   - app// is the final portion of the load balancer ARN
	//   - targetgroup// is the final portion of the target group ARN.
	// To find the ARN for an Application Load Balancer, use the DescribeLoadBalancers (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html)
	// API operation. To find the ARN for the target group, use the
	// DescribeTargetGroups (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html)
	// API operation.
	ResourceLabel *string

	noSmithyDocumentSerde
}

// Represents a metric pair for a predictive scaling policy.
type PredictiveScalingPredefinedMetricPair struct {

	// Indicates which metrics to use. There are two different types of metrics for
	// each metric type: one is a load metric and one is a scaling metric. For example,
	// if the metric type is ASGCPUUtilization , the Auto Scaling group's total CPU
	// metric is used as the load metric, and the average CPU metric is used for the
	// scaling metric.
	//
	// This member is required.
	PredefinedMetricType PredefinedMetricPairType

	// A label that uniquely identifies a specific Application Load Balancer target
	// group from which to determine the total and average request count served by your
	// Auto Scaling group. You can't specify a resource label unless the target group
	// is attached to the Auto Scaling group. You create the resource label by
	// appending the final portion of the load balancer ARN and the final portion of
	// the target group ARN into a single value, separated by a forward slash (/). The
	// format of the resource label is:
	// app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff .
	// Where:
	//   - app// is the final portion of the load balancer ARN
	//   - targetgroup// is the final portion of the target group ARN.
	// To find the ARN for an Application Load Balancer, use the DescribeLoadBalancers (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html)
	// API operation. To find the ARN for the target group, use the
	// DescribeTargetGroups (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html)
	// API operation.
	ResourceLabel *string

	noSmithyDocumentSerde
}

// Describes a scaling metric for a predictive scaling policy. When returned in
// the output of DescribePolicies , it indicates that a predictive scaling policy
// uses individually specified load and scaling metrics instead of a metric pair.
type PredictiveScalingPredefinedScalingMetric struct {

	// The metric type.
	//
	// This member is required.
	PredefinedMetricType PredefinedScalingMetricType

	// A label that uniquely identifies a specific Application Load Balancer target
	// group from which to determine the average request count served by your Auto
	// Scaling group. You can't specify a resource label unless the target group is
	// attached to the Auto Scaling group. You create the resource label by appending
	// the final portion of the load balancer ARN and the final portion of the target
	// group ARN into a single value, separated by a forward slash (/). The format of
	// the resource label is:
	// app/my-alb/778d41231b141a0f/targetgroup/my-alb-target-group/943f017f100becff .
	// Where:
	//   - app// is the final portion of the load balancer ARN
	//   - targetgroup// is the final portion of the target group ARN.
	// To find the ARN for an Application Load Balancer, use the DescribeLoadBalancers (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html)
	// API operation. To find the ARN for the target group, use the
	// DescribeTargetGroups (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html)
	// API operation.
	ResourceLabel *string

	noSmithyDocumentSerde
}

// Describes a process type. For more information, see Scaling processes (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html#process-types)
// in the Amazon EC2 Auto Scaling User Guide.
type ProcessType struct {

	// One of the following processes:
	//   - Launch
	//   - Terminate
	//   - AddToLoadBalancer
	//   - AlarmNotification
	//   - AZRebalance
	//   - HealthCheck
	//   - InstanceRefresh
	//   - ReplaceUnhealthy
	//   - ScheduledActions
	//
	// This member is required.
	ProcessName *string

	noSmithyDocumentSerde
}

// Describes the preferences for an instance refresh.
type RefreshPreferences struct {

	// (Optional) The CloudWatch alarm specification. CloudWatch alarms can be used to
	// identify any issues and fail the operation if an alarm threshold is met.
	AlarmSpecification *AlarmSpecification

	// (Optional) Indicates whether to roll back the Auto Scaling group to its
	// previous configuration if the instance refresh fails or a CloudWatch alarm
	// threshold is met. The default is false . A rollback is not supported in the
	// following situations:
	//   - There is no desired configuration specified for the instance refresh.
	//   - The Auto Scaling group has a launch template that uses an Amazon Web
	//   Services Systems Manager parameter instead of an AMI ID for the ImageId
	//   property.
	//   - The Auto Scaling group uses the launch template's $Latest or $Default
	//   version.
	// For more information, see Undo changes with a rollback (https://docs.aws.amazon.com/autoscaling/ec2/userguide/instance-refresh-rollback.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	AutoRollback *bool

	// (Optional) The amount of time, in seconds, to wait after a checkpoint before
	// continuing. This property is optional, but if you specify a value for it, you
	// must also specify a value for CheckpointPercentages . If you specify a value for
	// CheckpointPercentages and not for CheckpointDelay , the CheckpointDelay
	// defaults to 3600 (1 hour).
	CheckpointDelay *int32

	// (Optional) Threshold values for each checkpoint in ascending order. Each number
	// must be unique. To replace all instances in the Auto Scaling group, the last
	// number in the array must be 100 . For usage examples, see Adding checkpoints to
	// an instance refresh (https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-adding-checkpoints-instance-refresh.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	CheckpointPercentages []int32

	// A time period, in seconds, during which an instance refresh waits before moving
	// on to replacing the next instance after a new instance enters the InService
	// state. This property is not required for normal usage. Instead, use the
	// DefaultInstanceWarmup property of the Auto Scaling group. The InstanceWarmup
	// and DefaultInstanceWarmup properties work the same way. Only specify this
	// property if you must override the DefaultInstanceWarmup property. If you do not
	// specify this property, the instance warmup by default is the value of the
	// DefaultInstanceWarmup property, if defined (which is recommended in all cases),
	// or the HealthCheckGracePeriod property otherwise.
	InstanceWarmup *int32

	// The amount of capacity in the Auto Scaling group that must pass your group's
	// health checks to allow the operation to continue. The value is expressed as a
	// percentage of the desired capacity of the Auto Scaling group (rounded up to the
	// nearest integer). The default is 90 . Setting the minimum healthy percentage to
	// 100 percent limits the rate of replacement to one instance at a time. In
	// contrast, setting it to 0 percent has the effect of replacing all instances at
	// the same time.
	MinHealthyPercentage *int32

	// Choose the behavior that you want Amazon EC2 Auto Scaling to use if instances
	// protected from scale in are found. The following lists the valid values: Refresh
	// Amazon EC2 Auto Scaling replaces instances that are protected from scale in.
	// Ignore Amazon EC2 Auto Scaling ignores instances that are protected from scale
	// in and continues to replace instances that are not protected. Wait (default)
	// Amazon EC2 Auto Scaling waits one hour for you to remove scale-in protection.
	// Otherwise, the instance refresh will fail.
	ScaleInProtectedInstances ScaleInProtectedInstances

	// (Optional) Indicates whether skip matching is enabled. If enabled ( true ), then
	// Amazon EC2 Auto Scaling skips replacing instances that match the desired
	// configuration. If no desired configuration is specified, then it skips replacing
	// instances that have the same launch template and instance types that the Auto
	// Scaling group was using before the start of the instance refresh. The default is
	// false . For more information, see Use an instance refresh with skip matching (https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-instance-refresh-skip-matching.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	SkipMatching *bool

	// Choose the behavior that you want Amazon EC2 Auto Scaling to use if instances
	// in Standby state are found. The following lists the valid values: Terminate
	// Amazon EC2 Auto Scaling terminates instances that are in Standby . Ignore Amazon
	// EC2 Auto Scaling ignores instances that are in Standby and continues to replace
	// instances that are in the InService state. Wait (default) Amazon EC2 Auto
	// Scaling waits one hour for you to return the instances to service. Otherwise,
	// the instance refresh will fail.
	StandbyInstances StandbyInstances

	noSmithyDocumentSerde
}

// Details about an instance refresh rollback.
type RollbackDetails struct {

	// Indicates the value of InstancesToUpdate at the time the rollback started.
	InstancesToUpdateOnRollback *int32

	// Indicates the value of PercentageComplete at the time the rollback started.
	PercentageCompleteOnRollback *int32

	// Reports progress on replacing instances in an Auto Scaling group that has a
	// warm pool. This includes separate details for instances in the warm pool and
	// instances in the Auto Scaling group (the live pool).
	ProgressDetailsOnRollback *InstanceRefreshProgressDetails

	// The reason for this instance refresh rollback (for example, whether a manual or
	// automatic rollback was initiated).
	RollbackReason *string

	// The date and time at which the rollback began.
	RollbackStartTime *time.Time

	noSmithyDocumentSerde
}

// Describes a scaling policy.
type ScalingPolicy struct {

	// Specifies how the scaling adjustment is interpreted (for example, an absolute
	// number or a percentage). The valid values are ChangeInCapacity , ExactCapacity ,
	// and PercentChangeInCapacity .
	AdjustmentType *string

	// The CloudWatch alarms related to the policy.
	Alarms []Alarm

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string

	// The duration of the policy's cooldown period, in seconds.
	Cooldown *int32

	// Indicates whether the policy is enabled ( true ) or disabled ( false ).
	Enabled *bool

	// The estimated time, in seconds, until a newly launched instance can contribute
	// to the CloudWatch metrics.
	EstimatedInstanceWarmup *int32

	// The aggregation type for the CloudWatch metrics. The valid values are Minimum ,
	// Maximum , and Average .
	MetricAggregationType *string

	// The minimum value to scale by when the adjustment type is
	// PercentChangeInCapacity .
	MinAdjustmentMagnitude *int32

	// Available for backward compatibility. Use MinAdjustmentMagnitude instead.
	//
	// Deprecated: This member has been deprecated.
	MinAdjustmentStep *int32

	// The Amazon Resource Name (ARN) of the policy.
	PolicyARN *string

	// The name of the scaling policy.
	PolicyName *string

	// One of the following policy types:
	//   - TargetTrackingScaling
	//   - StepScaling
	//   - SimpleScaling (default)
	//   - PredictiveScaling
	// For more information, see Target tracking scaling policies (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-target-tracking.html)
	// and Step and simple scaling policies (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html)
	// in the Amazon EC2 Auto Scaling User Guide.
	PolicyType *string

	// A predictive scaling policy.
	PredictiveScalingConfiguration *PredictiveScalingConfiguration

	// The amount by which to scale, based on the specified adjustment type. A
	// positive value adds to the current capacity while a negative number removes from
	// the current capacity.
	ScalingAdjustment *int32

	// A set of adjustments that enable you to scale based on the size of the alarm
	// breach.
	StepAdjustments []StepAdjustment

	// A target tracking scaling policy.
	TargetTrackingConfiguration *TargetTrackingConfiguration

	noSmithyDocumentSerde
}

// Describes a scheduled scaling action.
type ScheduledUpdateGroupAction struct {

	// The name of the Auto Scaling group.
	AutoScalingGroupName *string

	// The desired capacity is the initial capacity of the Auto Scaling group after
	// the scheduled action runs and the capacity it attempts to maintain.
	DesiredCapacity *int32

	// The date and time in UTC for the recurring schedule to end. For example,
	// "2019-06-01T00:00:00Z" .
	EndTime *time.Time

	// The maximum size of the Auto Scaling group.
	MaxSize *int32

	// The minimum size of the Auto Scaling group.
	MinSize *int32

	// The recurring schedule for the action, in Unix cron syntax format. When
	// StartTime and EndTime are specified with Recurrence , they form the boundaries
	// of when the recurring action starts and stops.
	Recurrence *string

	// The Amazon Resource Name (ARN) of the scheduled action.
	ScheduledActionARN *string

	// The name of the scheduled action.
	ScheduledActionName *string

	// The date and time in UTC for this action to start. For example,
	// "2019-06-01T00:00:00Z" .
	StartTime *time.Time

	// This property is no longer used.
	Time *time.Time

	// The time zone for the cron expression.
	TimeZone *string

	noSmithyDocumentSerde
}

// Describes information used for one or more scheduled scaling action updates in
// a BatchPutScheduledUpdateGroupAction operation.
type ScheduledUpdateGroupActionRequest struct {

	// The name of the scaling action.
	//
	// This member is required.
	ScheduledActionName *string

	// The desired capacity is the initial capacity of the Auto Scaling group after
	// the scheduled action runs and the capacity it attempts to maintain.
	DesiredCapacity *int32

	// The date and time for the recurring schedule to end, in UTC.
	EndTime *time.Time

	// The maximum size of the Auto Scaling group.
	MaxSize *int32

	// The minimum size of the Auto Scaling group.
	MinSize *int32

	// The recurring schedule for the action, in Unix cron syntax format. This format
	// consists of five fields separated by white spaces: [Minute] [Hour]
	// [Day_of_Month] [Month_of_Year] [Day_of_Week]. The value must be in quotes (for
	// example, "30 0 1 1,6,12 *" ). For more information about this format, see
	// Crontab (http://crontab.org) . When StartTime and EndTime are specified with
	// Recurrence , they form the boundaries of when the recurring action starts and
	// stops. Cron expressions use Universal Coordinated Time (UTC) by default.
	Recurrence *string

	// The date and time for the action to start, in YYYY-MM-DDThh:mm:ssZ format in
	// UTC/GMT only and in quotes (for example, "2019-06-01T00:00:00Z" ). If you
	// specify Recurrence and StartTime , Amazon EC2 Auto Scaling performs the action
	// at this time, and then performs the action based on the specified recurrence. If
	// you try to schedule the action in the past, Amazon EC2 Auto Scaling returns an
	// error message.
	StartTime *time.Time

	// Specifies the time zone for a cron expression. If a time zone is not provided,
	// UTC is used by default. Valid values are the canonical names of the IANA time
	// zones, derived from the IANA Time Zone Database (such as Etc/GMT+9 or
	// Pacific/Tahiti ). For more information, see
	// https://en.wikipedia.org/wiki/List_of_tz_database_time_zones (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)
	// .
	TimeZone *string

	noSmithyDocumentSerde
}

// Describes information used to create a step adjustment for a step scaling
// policy. For the following examples, suppose that you have an alarm with a breach
// threshold of 50:
//   - To trigger the adjustment when the metric is greater than or equal to 50
//     and less than 60, specify a lower bound of 0 and an upper bound of 10.
//   - To trigger the adjustment when the metric is greater than 40 and less than
//     or equal to 50, specify a lower bound of -10 and an upper bound of 0.
//
// There are a few rules for the step adjustments for your step policy:
//   - The ranges of your step adjustments can't overlap or have a gap.
//   - At most, one step adjustment can have a null lower bound. If one step
//     adjustment has a negative lower bound, then there must be a step adjustment with
//     a null lower bound.
//   - At most, one step adjustment can have a null upper bound. If one step
//     adjustment has a positive upper bound, then there must be a step adjustment with
//     a null upper bound.
//   - The upper and lower bound can't be null in the same step adjustment.
//
// For more information, see Step adjustments (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scaling-simple-step.html#as-scaling-steps)
// in the Amazon EC2 Auto Scaling User Guide.
type StepAdjustment struct {

	// The amount by which to scale, based on the specified adjustment type. A
	// positive value adds to the current capacity while a negative number removes from
	// the current capacity. For exact capacity, you must specify a non-negative value.
	//
	// This member is required.
	ScalingAdjustment *int32

	// The lower bound for the difference between the alarm threshold and the
	// CloudWatch metric. If the metric value is above the breach threshold, the lower
	// bound is inclusive (the metric must be greater than or equal to the threshold
	// plus the lower bound). Otherwise, it is exclusive (the metric must be greater
	// than the threshold plus the lower bound). A null value indicates negative
	// infinity.
	MetricIntervalLowerBound *float64

	// The upper bound for the difference between the alarm threshold and the
	// CloudWatch metric. If the metric value is above the breach threshold, the upper
	// bound is exclusive (the metric must be less than the threshold plus the upper
	// bound). Otherwise, it is inclusive (the metric must be less than or equal to the
	// threshold plus the upper bound). A null value indicates positive infinity. The
	// upper bound must be greater than the lower bound.
	MetricIntervalUpperBound *float64

	noSmithyDocumentSerde
}

// Describes an auto scaling process that has been suspended. For more
// information, see Scaling processes (https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-suspend-resume-processes.html#process-types)
// in the Amazon EC2 Auto Scaling User Guide.
type SuspendedProcess struct {

	// The name of the suspended process.
	ProcessName *string

	// The reason that the process was suspended.
	SuspensionReason *string

	noSmithyDocumentSerde
}

// Describes a tag for an Auto Scaling group.
type Tag struct {

	// The tag key.
	//
	// This member is required.
	Key *string

	// Determines whether the tag is added to new instances as they are launched in
	// the group.
	PropagateAtLaunch *bool

	// The name of the Auto Scaling group.
	ResourceId *string

	// The type of resource. The only supported value is auto-scaling-group .
	ResourceType *string

	// The tag value.
	Value *string

	noSmithyDocumentSerde
}

// Describes a tag for an Auto Scaling group.
type TagDescription struct {

	// The tag key.
	Key *string

	// Determines whether the tag is added to new instances as they are launched in
	// the group.
	PropagateAtLaunch *bool

	// The name of the group.
	ResourceId *string

	// The type of resource. The only supported value is auto-scaling-group .
	ResourceType *string

	// The tag value.
	Value *string

	noSmithyDocumentSerde
}

// Represents a target tracking scaling policy configuration to use with Amazon
// EC2 Auto Scaling.
type TargetTrackingConfiguration struct {

	// The target value for the metric. Some metrics are based on a count instead of a
	// percentage, such as the request count for an Application Load Balancer or the
	// number of messages in an SQS queue. If the scaling policy specifies one of these
	// metrics, specify the target utilization as the optimal average request or
	// message count per instance during any one-minute interval.
	//
	// This member is required.
	TargetValue *float64

	// A customized metric. You must specify either a predefined metric or a
	// customized metric.
	CustomizedMetricSpecification *CustomizedMetricSpecification

	// Indicates whether scaling in by the target tracking scaling policy is disabled.
	// If scaling in is disabled, the target tracking scaling policy doesn't remove
	// instances from the Auto Scaling group. Otherwise, the target tracking scaling
	// policy can remove instances from the Auto Scaling group. The default is false .
	DisableScaleIn *bool

	// A predefined metric. You must specify either a predefined metric or a
	// customized metric.
	PredefinedMetricSpecification *PredefinedMetricSpecification

	noSmithyDocumentSerde
}

// The metric data to return. Also defines whether this call is returning data for
// one metric only, or whether it is performing a math expression on the values of
// returned metric statistics to create a new time series. A time series is a
// series of data points, each of which is associated with a timestamp.
type TargetTrackingMetricDataQuery struct {

	// A short name that identifies the object's results in the response. This name
	// must be unique among all TargetTrackingMetricDataQuery objects specified for a
	// single scaling policy. If you are performing math expressions on this set of
	// data, this name represents that data and can serve as a variable in the
	// mathematical expression. The valid characters are letters, numbers, and
	// underscores. The first character must be a lowercase letter.
	//
	// This member is required.
	Id *string

	// The math expression to perform on the returned data, if this object is
	// performing a math expression. This expression can use the Id of the other
	// metrics to refer to those metrics, and can also use the Id of other expressions
	// to use the result of those expressions. Conditional: Within each
	// TargetTrackingMetricDataQuery object, you must specify either Expression or
	// MetricStat , but not both.
	Expression *string

	// A human-readable label for this metric or expression. This is especially useful
	// if this is a math expression, so that you know what the value represents.
	Label *string

	// Information about the metric data to return. Conditional: Within each
	// TargetTrackingMetricDataQuery object, you must specify either Expression or
	// MetricStat , but not both.
	MetricStat *TargetTrackingMetricStat

	// Indicates whether to return the timestamps and raw data values of this metric.
	// If you use any math expressions, specify true for this value for only the final
	// math expression that the metric specification is based on. You must specify
	// false for ReturnData for all the other metrics and expressions used in the
	// metric specification. If you are only retrieving metrics and not performing any
	// math expressions, do not specify anything for ReturnData . This sets it to its
	// default ( true ).
	ReturnData *bool

	noSmithyDocumentSerde
}

// This structure defines the CloudWatch metric to return, along with the
// statistic and unit. For more information about the CloudWatch terminology below,
// see Amazon CloudWatch concepts (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)
// in the Amazon CloudWatch User Guide.
type TargetTrackingMetricStat struct {

	// The metric to use.
	//
	// This member is required.
	Metric *Metric

	// The statistic to return. It can include any CloudWatch statistic or extended
	// statistic. For a list of valid values, see the table in Statistics (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Statistic)
	// in the Amazon CloudWatch User Guide. The most commonly used metric for scaling
	// is Average .
	//
	// This member is required.
	Stat *string

	// The unit to use for the returned data points. For a complete list of the units
	// that CloudWatch supports, see the MetricDatum (https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html)
	// data type in the Amazon CloudWatch API Reference.
	Unit *string

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the TotalLocalStorageGB object when you
// specify InstanceRequirements for an Auto Scaling group.
type TotalLocalStorageGBRequest struct {

	// The storage maximum in GB.
	Max *float64

	// The storage minimum in GB.
	Min *float64

	noSmithyDocumentSerde
}

// Identifying information for a traffic source.
type TrafficSourceIdentifier struct {

	// Identifies the traffic source. For Application Load Balancers, Gateway Load
	// Balancers, Network Load Balancers, and VPC Lattice, this will be the Amazon
	// Resource Name (ARN) for a target group in this account and Region. For Classic
	// Load Balancers, this will be the name of the Classic Load Balancer in this
	// account and Region. For example:
	//   - Application Load Balancer ARN:
	//   arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/1234567890123456
	//   - Classic Load Balancer name: my-classic-load-balancer
	//   - VPC Lattice ARN:
	//   arn:aws:vpc-lattice:us-west-2:123456789012:targetgroup/tg-1234567890123456
	// To get the ARN of a target group for a Application Load Balancer, Gateway Load
	// Balancer, or Network Load Balancer, or the name of a Classic Load Balancer, use
	// the Elastic Load Balancing DescribeTargetGroups (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeTargetGroups.html)
	// and DescribeLoadBalancers (https://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_DescribeLoadBalancers.html)
	// API operations. To get the ARN of a target group for VPC Lattice, use the VPC
	// Lattice GetTargetGroup (https://docs.aws.amazon.com/vpc-lattice/latest/APIReference/API_GetTargetGroup.html)
	// API operation.
	//
	// This member is required.
	Identifier *string

	// Provides additional context for the value of Identifier . The following lists
	// the valid values:
	//   - elb if Identifier is the name of a Classic Load Balancer.
	//   - elbv2 if Identifier is the ARN of an Application Load Balancer, Gateway Load
	//   Balancer, or Network Load Balancer target group.
	//   - vpc-lattice if Identifier is the ARN of a VPC Lattice target group.
	// Required if the identifier is the name of a Classic Load Balancer.
	Type *string

	noSmithyDocumentSerde
}

// Describes the state of a traffic source.
type TrafficSourceState struct {

	// The unique identifier of the traffic source.
	Identifier *string

	// Describes the current state of a traffic source. The state values are as
	// follows:
	//   - Adding - The Auto Scaling instances are being registered with the load
	//   balancer or target group.
	//   - Added - All Auto Scaling instances are registered with the load balancer or
	//   target group.
	//   - InService - For an Elastic Load Balancing load balancer or target group, at
	//   least one Auto Scaling instance passed an ELB health check. For VPC Lattice,
	//   at least one Auto Scaling instance passed an VPC_LATTICE health check.
	//   - Removing - The Auto Scaling instances are being deregistered from the load
	//   balancer or target group. If connection draining (deregistration delay) is
	//   enabled, Elastic Load Balancing or VPC Lattice waits for in-flight requests to
	//   complete before deregistering the instances.
	//   - Removed - All Auto Scaling instances are deregistered from the load balancer
	//   or target group.
	State *string

	// This is replaced by Identifier .
	//
	// Deprecated: TrafficSource has been replaced by Identifier
	TrafficSource *string

	// Provides additional context for the value of Identifier . The following lists
	// the valid values:
	//   - elb if Identifier is the name of a Classic Load Balancer.
	//   - elbv2 if Identifier is the ARN of an Application Load Balancer, Gateway Load
	//   Balancer, or Network Load Balancer target group.
	//   - vpc-lattice if Identifier is the ARN of a VPC Lattice target group.
	// Required if the identifier is the name of a Classic Load Balancer.
	Type *string

	noSmithyDocumentSerde
}

// Specifies the minimum and maximum for the VCpuCount object when you specify
// InstanceRequirements for an Auto Scaling group.
type VCpuCountRequest struct {

	// The minimum number of vCPUs.
	//
	// This member is required.
	Min *int32

	// The maximum number of vCPUs.
	Max *int32

	noSmithyDocumentSerde
}

// Describes a warm pool configuration.
type WarmPoolConfiguration struct {

	// The instance reuse policy.
	InstanceReusePolicy *InstanceReusePolicy

	// The maximum number of instances that are allowed to be in the warm pool or in
	// any state except Terminated for the Auto Scaling group.
	MaxGroupPreparedCapacity *int32

	// The minimum number of instances to maintain in the warm pool.
	MinSize *int32

	// The instance state to transition to after the lifecycle actions are complete.
	PoolState WarmPoolState

	// The status of a warm pool that is marked for deletion.
	Status WarmPoolStatus

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
