読者です 読者をやめる 読者になる 読者になる

ラピッドスタディAWS 〜 4.AWS SDK for Ruby で EC2を作成してSSHでログイン

ラピッドスタディAWSの4稿目の記事です。
前回は、ラピッドスタディAWS 〜 2.AWS SDK for Ruby で EC2を作成でした。とりあえず、EC2が作れたので「やったー」と思っていたのですが、前回のスクリプトにはいくつか欠陥がありました。
特に致命的なのが以下の2つ

  1. セキュリティグループを設定していないので、pingも通らない
  2. 公開鍵を登録していないので、sshできない

今は両方とも解決して、無事sshでログインできていますので、それぞれの設定方法を書いておきます。

セキュリティグループを設定していないので、pingも通らない

これはセキュリティグループに穴を開ければいいので簡単です。

$cat ec2_sg_ingress.rb
require 'aws-sdk'

ec2 = AWS::EC2.new
sg = ec2.security_groups.first
sg.authorize_ingress(:icmp, -1..-1)
sg.authorize_ingress(:tcp, 22)

sg.authorize_ingress でセキュリティグループに穴を開けられるので、2つ設定しています。
1つ目の:icmpはpingを通すためのもの。-1..-1で「全てのポート」を表現するみたい。
2つ目の:tcpはsshを通すため。

公開鍵を登録していないので、sshできない

これは、あとからやればいいやと思って前回は飛ばしていたのだけれど、それが良くなかった。
そもそもec2のインスタンスを作るとき、秘密鍵を設定すると応する公開鍵が自動的に登録される。
ということは、後からでも秘密鍵があれば自動的に公開鍵を登録できると思っていたのだが、これが違った。
後から公開鍵を登録するには、自分で秘密鍵から公開鍵を作って、登録しないといけない。
まずった。
まぁ作りなおせばOKなので、まずは前回のインスタンスを削除。

$cat ec2_instance_delete.rb
require 'aws-sdk'

ec2 = AWS::EC2.new
sg = ec2.instances.first.delete

そして、改めてインスタンスを作る。
オプションにkeypairを渡すために、予め作っておきます。

require 'aws-sdk'

ec2 = AWS::EC2.new

# keypairを作成
keypair = ec2.key_pairs.create('tamurine_ec2')

# 作成したkeypairをオプションに設定してインスタンスを作成
instance = ec2.instances.create(
	:image_id => "ami-xxxxxxxx", 
	:instance_type => "t1.micro",
	:key_pair => keypair,
	:security_group_ids => 'sg-xxxxxx',
	:subnet => 'subnet-xxxxxxx'
)

# keypairの秘密鍵をローカルに保存
File.open(File.expand_path('~/.ssh/tamurine_ec2.pam'), 'w', 0600) do |file|
	file.write(keypair.private_key)
end

インスタンスが立ち上がったら

$ ssh -i ~/.ssh/tamurin_ec2.pem ec2-user@instance_dns

でログインチェック。。できるか?




f:id:toyamarinyon:20130820183546p:plain
よっしゃあ!
次回からは今回作成したインスタンスを使って、CDP(クラウドデザインパターン)を1つずつ試していきます。

ようやくスタート地点です。頑張ります。