gouf
1/16/2014 - 11:16 AM

AWS EC2 インスタンスをRuby から立ち上げ。SSH キーを用意させるので、立ち上げたあとにそのまま利用できる。

AWS EC2 インスタンスをRuby から立ち上げ。SSH キーを用意させるので、立ち上げたあとにそのまま利用できる。

require 'aws-sdk'
require 'pp'

# if not set region, it will set us-east by default
ec2 = AWS::EC2.new(region: 'ap-northeast-1') 

# List up key pairs you have
#pp ec2.key_pairs.map(&:name)

# Available Regions
#pp ec2.regions.map(&:name)

=begin
ami_id = "ami-a25415cb" # RHL
ami_id = "ami-10314d79" # Ubuntu
ami_id = "ami-29d54d28" # AMIMOTO Wordpress AMI
=end
ami_id = "ami-0b13700a" # Amazon Linux (amzn-ami-pv-2013.09.2.i386-ebs)

key_pair_name = 'amazon_linux'

# create a key if not exists
key_pair = proc {|key_pair_name|
  file_path = File.expand_path("~/.ssh/#{key_pair_name}.pem")
  if ec2.key_pairs[key_pair_name].exists? then
    puts "key pair is exist."
  else
    puts "key pair is not exist."
    key_pair = ec2.key_pairs.create(key_pair_name)
    private_key = key_pair.private_key
    File.open(file_path, 'w', 0400) do |f|
      f.write private_key
    end
  end
  ec2.key_pairs[key_pair_name]
}.call(key_pair_name)


# Launch Instance
pp instance = ec2.instances.create(
  image_id: ami_id.to_s,
  instance_type: 't1.micro',
  key_pair: key_pair
)#=> <AWS::EC2::Instance id:i-xxxxxxxx>

# Add Tag to launched instance. (eg. key=name, value=ruby-auto-launch)
pp instance.add_tag('name', value: 'ruby-auto-launch') #=> <AWS::EC2::Tag:instance:i-xxxxxxxx:name>

# List up Instances status
pp ec2.instances.inject({}) {|m, i| m[i.id] = i.status; m }
#=>
=begin
{"i-xxxxxxxx"=>:running,
 "i-xxxxxxxx"=>:stopped,
 "i-xxxxxxxx"=>:running,
 "i-xxxxxxxx"=>:terminated,
 "i-xxxxxxxx"=>:pending,
 "i-xxxxxxxx"=>:terminated,
 "i-xxxxxxxx"=>:stopped}
=end