Skip to content

Instantly share code, notes, and snippets.

@mv
Created June 6, 2013 17:33
Show Gist options
  • Save mv/5723325 to your computer and use it in GitHub Desktop.
Save mv/5723325 to your computer and use it in GitHub Desktop.
require 'aws-sdk'
AWS.config({
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
:region => 'sa-east-1'
})
ec2 = AWS::EC2.new
# Regions
## name
region_name_list = ec2.regions.collect(&:name)
## endpoint
region_endpoint_list = ec2.regions.collect(&:endpoint)
## in a hash
region = ec2.regions.inject({}) { |m,r| m[r.name] = r.endpoint ; m}
# Availability Zones
## AZs to my current region
current_az_list = ec2.availability_zones.collect(&:name)
## AZs to a specific region
az_list = ec2.regions['sa-east-1'].availability_zones.collect(&:name)
## all AZs
ec2.regions.each do |r|
puts "#{r.name} "
r.availability_zones.each do |az|
puts " #{az.name}"
end
end
# Instances
## instaces to my current region
current_region_instance_list = ec2.instances.collect(&:id)
## instances to a specific region
instance_region_list = ec2.regions['sa-east-1'].instances.collect(&:id)
## all instances in all regions
ec2.regions.each do |r|
puts "Region: #{r.name}"
r.instances.each do |i|
puts " instance: #{i.id}, #{i.availability_zone}, #{i.status}, #{i.instance_type}, #{i.tags['Name']}"
end
end
# Security Groups
## sgs to my current region
current_sg_region_list = ec2.security_groups.collect(&:name).sort
## sgs to a specific region
sg_region_list = ec2.regions['sa-east-1'].security_groups.collect(&:name).sort
## All security_groups and instances
ec2.regions.each do |r|
puts "Region: #{r.name}"
r.security_groups.each do |sg|
puts " sg: #{sg.owner_id}, #{sg.id}, #{sg.name}, #{sg.description}"
sg.instances.each do |i|
puts " instance: #{i.id}, #{i.availability_zone}, #{i.status}, #{i.instance_type}, #{i.tags['Name']}"
end
end
end
# ELB
elb = AWS::ELB.new
## all elb's
elb_list = elb.load_balancers.collect(&:name)
## all elb's and instances
elb.load_balancers.each do |elb|
# printf "elb: %70s, %s\n", elb.dns_name, elb.name
printf "elb: %s, %s\n", elb.dns_name, elb.name
elb.instances.each do |i|
puts " instance: #{i.id}, #{i.availability_zone}, #{i.status}, #{i.instance_type}, #{i.tags['Name']}"
end
end
# AutoScaling
as = AWS::AutoScaling.new
## all as groups
as_list = as.groups.collect(&:name)
as.groups.each do |asg|
puts "as: #{asg.name}, lc_config: #{asg.launch_configuration_name}, min: #{asg.min_size}, max: #{asg.max_size}"
asg.auto_scaling_instances.each do |ai|
i = as.instances[ ai.id ].ec2_instance
puts " instance: #{i.id}, #{i.availability_zone}, #{i.status}, #{i.instance_type}, #{i.tags['Name']}"
end
end
## activities
as.activities.each do |a|
printf "%s - %s: %s / [%s] %s, %s, %s\n", a.start_time, a.end_time, a.auto_scaling_group_name, a.progress, a.status_code, a.status_message, a.description
end
# vim:ft=ruby:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment