«前の日記(2011-10-20 (Thu)) 最新 次の日記(2011-10-26 (Wed))» 編集

雑記帳


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)

こういうルーチンワークは、どんどんスクリプト化していきたい。