Scale UpパターンをAWS SDK for Rubyで突貫工事した
Excelとシェルスクリプトぐらいしか芸がないのでもう一度ノージョブもしくは学生になりたい。 スタディしたい。 と思っている私ですこんばんは。
このあたりと格闘してScale Upパターン書いてみました。
instance typeの変更方法がさっぱりわからなくて辛かった・・・
色々と勉強不足。
EC2インスタンスにEIPを割り当てていることが前提としてます。
ENICは未対応です。
停止前のEIP取得->停止->インスタンスタイプ変更->起動->EIP戻し
となっております。
#!/usr/bin/env ruby
require 'aws-sdk'
instance_id = ARGV[0]
instance_type = ARGV[1]
ec2 = AWS::EC2.new(
:access_key_id => '<your_access_key>',
:secret_access_key => '<your_secret_access_key>',
:region => 'ap-northeast-1'
)
i=ec2.instances["#{ARGV[0]}"]
if i.exists? == false
puts instance_id + "なんて名前のインスタンスはないよ"
exit
end
if i.instance_type == instance_type
puts "おなじインスタンスタイプだよ。スケールアップもダウンもできないよ"
exit
end
eip = i.ip_address
if i.status == :stopped
ec2.client.modify_instance_attribute(:instance_id => "#{instance_id}",
:attribute => "instanceType",
:value => "#{instance_type}")
elsif i.status == :running
i.stop
while i.status != :stopped
sleep(2)
end
ec2.client.modify_instance_attribute(:instance_id => "#{instance_id}",
:attribute => "instanceType",
:value => "#{instance_type}")
end
i.start
while i.status != :running
sleep(2)
end
i.associate_elastic_ip(eip)