雑記帳
2011-10-24 (Mon) [長年日記]
■ [AWS][Ruby] Rubyからインスタンスを起動してELBにアタッチ
一時的にサーバを増やして既存のELBにアタッチする、という作業が今後何回か発生するようだったので、スクリプトを作成した。かなり粗削りだが、動くことは動く。
aゾーンにマスターサーバが一台いるので、bゾーンから始まって、一台増えるたびにaゾーンとbゾーンに交互にインスタンスを起動していく。すべてのインスタンスの起動が確認できたら、一気にELBに登録する。
require 'aws-sdk'
number_of_slave = 3
instance_type = 't1.micro'
ami_id = 'ami-deadbeaf'
keypair_name = 'my-keypair'
elb_name = 'my-elb'
AWS.config(YAML.load(File.read('config.yml')))
ec2 = AWS::EC2.new
azs = ec2.availability_zones.map(&:name).sort
sgs = [ec2.security_groups['default'], ec2.security_groups['web']]
instances = []
(1..number_of_slave).each do |n|
az = azs[n % 2]
i = ec2.instances.create(
:image_id => ami_id,
:instance_type => instance_type,
:availability_zone => az,
:security_groups => sgs,
:key_name => keypair_name
)
ec2.tags.create(i, "Name", :value => "slave-#{n}")
instances << i
end
loop do
if number_of_slave == instances.inject(0) {|sum, i| sum + (i.status == :running ? 1 : 0)}
break
end
sleep 1
end
elb = AWS::ELB.new
lb = elb.load_balancers[elb_name]
lb.availability_zones.enable('ap-northeast-1a', 'ap-northeast-1b')
lb.instances.register(instances)
こういうルーチンワークは、どんどんスクリプト化していきたい。
[ツッコミを入れる]
