雑記帳
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)
こういうルーチンワークは、どんどんスクリプト化していきたい。