orenoblog

エンジニアになりたいExcel方眼紙erの物語

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)