second first commit
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
# 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 |
|
||||
|
||||
### Metadata
|
||||
|
||||
| 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
|
||||
|
||||
```bash
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user