この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。望月です。
急ぎで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.
簡単ですね!アレンジすれば他にもいろいろ使い道はあるので、ぜひご活用下さい。