rubyでEC2を立ち上げてみた
引き続き、AWSをいじっています。
さて、今日はEC2の立ち上げに初挑戦しようかな・・・としたところでなんとTokyoリージョンが使えるようになっていることを発見しました。(クラウドが日本に上陸)TLがしばらくお祭り騒ぎでしたw
なんというグッドタイミング、と思いつつさっそくAmazon Web Services ガイドブックの手順に沿ってManagement ConsoleでEC2の立ち上げ、IPアドレスの割り当て、EBSの作成とEC2へのアタッチ、PHPのテスト、と行いました。
本に掲載されていたAMIが無かったので適当にLAMPが最初から入っているAMIを選んでみました。
本に掲載されていたAMIが無かったので適当にLAMPが最初から入っているAMIを選んでみました。
ここまでは順調にできたのでいよいよrubyから先ほど行った手順を実行します。
エラー処理などをちょっとはしょってしまいましたが、本に掲載されていたPHPコードを単にrubyに移植した程度ですんなりと動きました。
エラー処理などをちょっとはしょってしまいましたが、本に掲載されていたPHPコードを単にrubyに移植した程度ですんなりと動きました。
# coding: utf-8
require 'right_aws'
require 'yaml'
require 'logger'
config = YAML::load_file('../config.yml')
ACCESS = config['aws']['access']
SECRET = config['aws']['secret']
log = Logger.new(STDOUT)
ec2 = RightAws::Ec2.new(ACCESS, SECRET, :region => 'ap-northeast-1')
# EC2立ち上げ
instances = ec2.run_instances('ami-8e08a38f', 1, 1, ['default'],
"YOURKEYPAIR",'', nil, 't1.micro')
# インスタンスIDとインスタンスのアベイラビリティゾーンを取得
instance_id = instances[0][:aws_instance_id]
availability_zone = instances[0][:aws_availability_zone]
log.info("Instance ID: #{instance_id}, Availability Zone: #{availability_zone}")
# ステータスがrunningになるまでポーリング
running = false
begin
state = ec2.describe_instances(instance_id)[0][:aws_state]
if state == 'running'
running = true
else
sleep 10
end
log.info("State: #{state}")
end until running
# IPアドレスの割り当て
ip = ec2.allocate_address
ec2.associate_address(instance_id, ip)
log.info("IP: #{ip}")
# 1GBのEBSボリュームを1つ作成し、IDを求める
ebs = ec2.create_volume(nil, 1, availability_zone)
ebs_id = ebs[:aws_id]
log.info("EBS ID: #{ebs_id}")
# EBSボリュームを割り当てる
ec2.attach_volume(ebs_id, instance_id, '/dev/sdf')
log.info("Mission Completed!")
せっかくなので後片付け(それぞれのリソース解放)のスクリプトも作りたかったのですが、今日はもう眠いのでギブアップです。またあとで・・・。