Auto Scaling
Floci implements the EC2 Auto Scaling API — stored-state management for launch configurations, auto scaling groups, lifecycle hooks, and scaling policies, plus a real capacity reconciler that launches and terminates EC2 instances to maintain desired capacity.
Protocol: Query — POST / with Action= form parameter, credential scope autoscaling
ARN formats:
arn:aws:autoscaling:<region>:<account>:autoScalingGroup:<uuid>:autoScalingGroupName/<name>
arn:aws:autoscaling:<region>:<account>:launchConfiguration:<uuid>:launchConfigurationName/<name>
arn:aws:autoscaling:<region>:<account>:scalingPolicy:<uuid>:autoScalingGroupName/<group>/policyName/<name>
Supported Operations (45 total)
Launch Configurations
| Operation |
Notes |
CreateLaunchConfiguration |
Stores template: ImageId, InstanceType, KeyName, SecurityGroups, UserData, IamInstanceProfile, InstanceMonitoring, BlockDeviceMappings |
DescribeLaunchConfigurations |
Filtered by name list; returns all if no filter |
DeleteLaunchConfiguration |
Removes the named launch configuration |
Auto Scaling Groups
| Operation |
Notes |
CreateAutoScalingGroup |
Creates a group with min/max/desired capacity, AZs, tags, launch configuration, launch template, or mixed instances policy; starts capacity reconciliation loop |
DescribeAutoScalingGroups |
Filtered by name list; returns all if no filter; includes current instance list with lifecycle state and mixed instances policy shape when configured |
UpdateAutoScalingGroup |
Updates capacity bounds, cooldown, launch source, AZs |
DeleteAutoScalingGroup |
ForceDelete=true terminates all instances before deletion |
Instance Management
| Operation |
Notes |
DescribeAutoScalingInstances |
Returns all ASG-tracked instances with lifecycle state and health status |
SetDesiredCapacity |
Updates desired count; reconciler handles scale-out / scale-in within 10 s |
AttachInstances |
Attaches existing EC2 instances to a group; sets lifecycle state to InService |
DetachInstances |
Detaches instances from a group; optionally decrements desired capacity |
TerminateInstanceInAutoScalingGroup |
Terminates a specific instance; optionally decrements desired capacity |
SuspendProcesses |
Records suspended scaling processes (empty list suspends all); reported back by DescribeAutoScalingGroups |
ResumeProcesses |
Clears suspended processes (empty list resumes all) |
Load Balancer Attachment
| Operation |
Notes |
AttachLoadBalancerTargetGroups |
Attaches ELB v2 target group ARNs; new instances auto-registered on InService |
DetachLoadBalancerTargetGroups |
Detaches target groups; instances deregistered |
DescribeLoadBalancerTargetGroups |
Lists target groups attached to a group |
AttachLoadBalancers |
Classic ELB attachment (stored; no ELB v1 routing) |
DetachLoadBalancers |
Classic ELB detachment |
DescribeLoadBalancers |
Lists classic ELBs attached to a group |
Traffic Sources
| Operation |
Notes |
AttachTrafficSources |
Unified elb/elbv2/vpc-lattice attachment API; stored per identifier with its type |
DetachTrafficSources |
Removes a traffic source by identifier |
DescribeTrafficSources |
Lists attached sources, optionally filtered by type; every source reports InService |
Lifecycle Hooks
| Operation |
Notes |
PutLifecycleHook |
Creates or updates a hook: LifecycleTransition, DefaultResult, HeartbeatTimeout |
DescribeLifecycleHooks |
Lists hooks for a group |
DeleteLifecycleHook |
Removes a hook |
CompleteLifecycleAction |
Signals CONTINUE or ABANDON for a pending lifecycle action |
RecordLifecycleActionHeartbeat |
Extends the heartbeat timeout for an in-progress lifecycle action |
Scaling Policies
| Operation |
Notes |
PutScalingPolicy |
Creates or updates a policy: SimpleScaling fields or TargetTrackingScaling with predefined metric, target value, and estimated warmup |
DescribePolicies |
Lists policies filtered by group or policy name, including stored target tracking configuration |
DeletePolicy |
Removes a scaling policy |
Scheduled Actions
| Operation |
Notes |
PutScheduledUpdateGroupAction |
Creates or updates a schedule: recurrence, time zone, start/end time, capacity bounds |
DescribeScheduledActions |
Lists scheduled actions filtered by group or action name |
DeleteScheduledAction |
Removes a scheduled action |
Warm Pools
| Operation |
Notes |
PutWarmPool |
Full replace per the wire model: omitted fields reset to defaults; MaxGroupPreparedCapacity=-1 clears the value |
DescribeWarmPool |
Returns the stored configuration; also embedded in DescribeAutoScalingGroups per the AutoScalingGroup shape |
DeleteWarmPool |
Removes the configuration; idempotent when none exists |
Activities
| Operation |
Notes |
DescribeScalingActivities |
Returns the activity log for a group; activities recorded on scale-out and scale-in events |
| Operation |
Notes |
DescribeTerminationPolicyTypes |
Returns the standard termination policy names |
DescribeAccountLimits |
Returns max group / config / instance limits |
DescribeLifecycleHookTypes |
Returns autoscaling:EC2_INSTANCE_LAUNCHING and autoscaling:EC2_INSTANCE_TERMINATING |
DescribeAdjustmentTypes |
Returns the four standard adjustment types |
DescribeMetricCollectionTypes |
Returns standard metric and granularity names |
DescribeAutoScalingNotificationTypes |
Returns all notification type names |
Capacity Reconciler (Phase 2)
Floci runs a background reconciler (10 s fixed rate) that keeps each group's InService instance count aligned with DesiredCapacity:
- Scale-out: calls
RunInstances with the group's launch configuration; new instances are tracked as Pending until the EC2 state transitions to running, at which point they move to InService and are registered with all attached ELB v2 target groups.
- Scale-in: selects InService instances not protected from scale-in, deregisters them from target groups, then calls
TerminateInstances.
- Activity records are written on each scale-out and scale-in event.
Launch Source Compatibility
Auto Scaling groups preserve either a launch configuration, a top-level launch template, or a MixedInstancesPolicy. These launch sources are mutually exclusive in create/update requests. When a mixed instances policy is supplied, Floci stores and returns:
LaunchTemplate.LaunchTemplateSpecification.LaunchTemplateId
LaunchTemplate.LaunchTemplateSpecification.LaunchTemplateName
LaunchTemplate.LaunchTemplateSpecification.Version
LaunchTemplate.Overrides.member.N.InstanceType
LaunchTemplate.Overrides.member.N.InstanceRequirements
InstancesDistribution.OnDemandBaseCapacity
InstancesDistribution.OnDemandPercentageAboveBaseCapacity
InstancesDistribution.SpotAllocationStrategy
An override selects instance types either by name or by attribute. Setting both InstanceType and
InstanceRequirements on the same override raises ValidationError, matching AWS. An override that
specifies InstanceRequirements must specify both VCpuCount and MemoryMiB, the two members the
AWS model marks required on that shape, and raises ValidationError otherwise. Every member of the
InstanceRequirements shape round-trips except BaselinePerformanceFactors, which is accepted and
dropped.
A group uses attribute-based instance type selection when the mixed instances policy left in effect
by the request carries at least one launch template override with InstanceRequirements. On create
that is the policy the request supplies. On update it is the policy the request supplies, the stored
policy when the request names no launch source, or none when the request switches the group to a
launch configuration or a plain launch template.
Optional Group Fields
CreateAutoScalingGroup and UpdateAutoScalingGroup both accept the fields below, and
DescribeAutoScalingGroups returns each one only when the group has a value for it. A group that
never set a field omits it from the response rather than reporting a default.
| Field |
Notes |
DesiredCapacityType |
One of units, vcpu, memory-mib. Any other value raises ValidationError. AWS supports it for attribute-based instance type selection only, so vcpu and memory-mib raise ValidationError unless the effective mixed instances policy uses InstanceRequirements. units is the documented default and is always accepted |
CapacityRebalance |
Stored and echoed as a boolean |
MaxInstanceLifetime |
Seconds. Must be 0 or at least 86400. 0 means no maximum and is echoed back as 0 |
DefaultInstanceWarmup |
Seconds. Pass -1 to remove a value already set, after which the field is omitted again |
Scaling Policy Compatibility
Target tracking policies preserve TargetTrackingConfiguration for predefined metrics. DescribePolicies returns PredefinedMetricSpecification.PredefinedMetricType, TargetValue, and EstimatedInstanceWarmup when present.
Configuration
| Variable |
Default |
Description |
FLOCI_SERVICES_AUTOSCALING_ENABLED |
true |
Enable or disable the service |
Usage Example
# Create a launch configuration
aws autoscaling create-launch-configuration \
--launch-configuration-name my-lc \
--image-id ami-12345678 \
--instance-type t3.micro
# Create a group targeting desired=2
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name my-asg \
--launch-configuration-name my-lc \
--min-size 1 \
--max-size 5 \
--desired-capacity 2 \
--availability-zones us-east-1a
# Attach an ELB v2 target group
aws autoscaling attach-load-balancer-target-groups \
--auto-scaling-group-name my-asg \
--target-group-arns arn:aws:elasticloadbalancing:us-east-1:000000000000:targetgroup/my-tg/abc123
# Watch instances appear
aws autoscaling describe-auto-scaling-groups \
--auto-scaling-group-names my-asg
# Scale out
aws autoscaling set-desired-capacity \
--auto-scaling-group-name my-asg \
--desired-capacity 3