5秒でAmazon Linuxを起動するRubyスクリプト書いた

2014.08.29

こんにちは。望月です。
急ぎでAmazon Linuxについて検証したい、そんな時にManagement Consoleからポチポチ起動していませんか?私はしていました。
ですがManagement Consoleを開く時間が惜しかったので、Amazon Linuxの起動をCLIから実行するようにしました。

実装

コードは以下の通りです。Gistにも置きました。

#!/usr/bin/env ruby
# Quickly launch Amazon Linux EC2 instance in Default VPC.
# Required to be set the below environment variables
# - AWS_DEFAULT_REGION
# - AWS_ACCESS_KEY
# - AWS_SECRET_KEY
#
# Usage : ruby launch.rb

require 'aws-sdk'

# security group id to be attached to the instance
secgroup_id = "sg-xxxxxxx"
# KeyPair name to be used
keypair_name = "keypair"

ec2 = AWS::EC2.new
image_id = ""
AWS.memoize do
  image_id = ec2.images.with_owner('amazon')
            .filter("name", "amzn-ami-hvm-*-ebs")
            .sort{|a, b| b.name <=> a.name }
            .first.image_id
end

resp = ec2.instances.create(image_id: image_id,
                     security_group_ids: [secgroup_id],
                     key_pair: ec2.key_pairs[keypair_name],
                     instance_type: "t2.micro",
                     associate_public_ip_address: true)
puts "Launched instance : #{resp.id}"
puts "waiting for acquiring Public IP Address..."

# wait until Public IP Address is assigned to the launched instance.
i = 1
while ec2.instances[resp.id].ip_address.nil?
  if i > 10
    raise RuntimeError
  end
  sleep 2 ** i
  i += 1
end

puts "Got IP Address. You can connect via 'ssh -i ~/.ssh/#{keypair_name}.pem ec2-user@#{resp.ip_address}' in a few moments."

検証用なのでパラメータを最小限にして、必要な項目だけセットするようにしてあります。また、このスクリプトを動かすためには、以下の環境変数が適切にセットされている必要があります。

  • AWS_DEFAULT_REGION : インスタンスを起動するリージョン
  • AWS_ACCESS_KEY : アクセスキー
  • AWS_SECRET_KEY : シークレットキー

また、インスタンスに紐付けるセキュリティグループとキーペアは事前に作成し、スクリプトの冒頭の変数部分にセキュリティグループのIDとキーペア名を記載しておいて下さい。

実装上のポイントとしては、AMI一覧から名前でEBSタイプかつHVMのAmazon Linuxを取得し、sortで最新版を取得している点です。ここの使い方は他にも活用用途ありそうですね。

実行

それでは実行してみましょう。以下のような感じで出力されるはずです。

$ ruby amazonlinux.rb
Launched instance : i-xxxxxxx
waiting for acquiring Public IP Address...
Got IP Address. You can connect via 'ssh -i ~/.ssh/keypair.pem ec2-user@xxxxxxx' in a few moments.

簡単ですね!アレンジすれば他にもいろいろ使い道はあるので、ぜひご活用下さい。