Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/instructure/aws-asg-fleets
AWS Auto Scaling Fleets
https://github.com/instructure/aws-asg-fleets
Last synced: 8 days ago
JSON representation
AWS Auto Scaling Fleets
- Host: GitHub
- URL: https://github.com/instructure/aws-asg-fleets
- Owner: instructure
- License: mit
- Created: 2013-06-29T17:54:51.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2019-09-19T14:48:47.000Z (about 5 years ago)
- Last Synced: 2024-04-14T20:25:43.284Z (7 months ago)
- Language: Ruby
- Size: 23.4 KB
- Stars: 1
- Watchers: 2
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# AWS Auto Scaling Fleet
Helps manage several Auto-Scaling Groups that share common
configuration.## Installation
Add this line to your application's Gemfile:
gem 'aws-asg-fleet'
And then execute:
$ bundle
Or install it yourself as:
$ gem install aws-asg-fleet
## Usage
Initialize:
```ruby
require 'aws/auto_scaling/fleets'auto_scaling = AWS::AutoScaling.new(
:access_key_id => 'YOUR_ACCESS_KEY_ID',
:secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
```First create an Auto Scaling group (with a Launch Configuration, Scaling
Policy, and an Alarm to trigger the Policy.) This ASG (and related
objects) will act as a template for future additions to the fleet:```ruby
launch_config = auto_scaling.launch_configurations.create(
'my-launch-config',
'ami-123456',
't1.micro')group = auto_scaling.groups.create('my-group',
:launch_configuration => launch_config,
:availability_zones => [ 'us-east-1a' ],
:min_size => 1,
:max_size => 4,
:load_balancers => [ 'my-main-elb' ])up_policy = group.scaling_policies.create('my-scaleup-policy',
:adjustment_type => 'ChangeInCapacity',
:scaling_adjustment => 1)down_policy => group.scaling_policies.create('my-scaledown-policy',
:adjustment_type => 'ChangeInCapacity',
:scaling_adjustment => -1)cloudwatch = AWS::CloudWatch.new
up_alarm = cloudwatch.alarms.create('cpu-high-alarm',
:namespace => "AWS/EC2",
:metric_name => "CPUUtilization",
:dimensions => [{
:name => "AutoScalingGroupName",
:value => group.name
}],
:comparison_operator => "GreaterThanOrEqualToThreshold",
:evaluation_periods => 2,
:period => 120,
:statistic => "Average",
:threshold => 80,
:alarm_actions => [ up_policy.arn ])down_alarm = cloudwatch.alarms.create('cpu-low-alarm',
:namespace => "AWS/EC2",
:metric_name => "CPUUtilization",
:dimensions => [{
:name => "AutoScalingGroupName",
:value => group.name
}],
:comparison_operator => "LessThanOrEqualToThreshold",
:evaluation_periods => 2,
:period => 300,
:statistic => "Average",
:threshold => 40,
:alarm_actions => [ down_policy.arn ])
```Phew - that was a lot of stuff. But we now have a configured Auto
Scaling group we can use in our fleet.Create the fleet:
```ruby
fleet = auto_scaling.fleets.create('my-fleet', group)
```Add another group to the fleet:
```ruby
# (creation of other_group not shown)
fleet.groups << other_group
```Now that you have a fleet with multiple groups you can perform actions
across the fleet.Suspend and resume scaling activities across all groups:
```ruby
fleet.suspend_all_processes
# do stuff where you don't want scaling activities
fleet.resume_all_processes
```Update the launch configuration for all groups:
```ruby
fleet.update_launch_configuration('new-launch-config',
:image_id => 'ami-8765432')
```That will create a new launch configuration, and add it to all the
groups, replacing the old one.## How It Works
Fleets are identified using tags on Auto Scaling groups. When you create
a new fleet 'my-fleet', it adds the tag key "asgfleet:my-fleet" with
value "template". Other groups added to the fleet get tagged with key
"asgfleet:my-fleet" and value "member". If you don't have a group tagged
with "template" and attempt to perform a `update_launch_configuration`, it
will use the first group tagged as a member instead.