«前の日記(2011-10-28 (Fri)) 最新 次の日記(2011-11-01 (Tue))» 編集

雑記帳


2011-10-31 (Mon) [長年日記]

[AWS][Ruby] AWS SDK for Ruby 1.2.2 Release

AWS SDK for Rubyの1.2.2がリリースされた

今回は、小粒な修正。

まず、SimpleDBで複数のドメイン名を同時に扱うことができるようになった。これは、フォーラムにて機能提案があったもの。githubからpull requestがあって、それが反映されたものらしい。

また、自分が以前に書いたドキュメントに誤りがあった件が訂正されていた。単なるドキュメントの訂正が、ソフトウェアのリリースに含まれるのは、どうやらソースコードに含まれるコメントからドキュメントが生成されているから。

いずれにしても、フォーラムでのフィードバックによる修正のみのリリース。最近のマイナーアップデートはこういうパターンが多い。ユーザから要望が比較的早期に反映されるのは、ユーザとしてはとても頼もしく感じる。

[AWS][Ruby] ELBにインスタンスをアタッチする

ちょっと前に、Rubyからインスタンスを起動してELBにアタッチするコードを書いた。今回は、すでに起動しているインスタンスをELBにアタッチするだけのコード。

今のところ、AWS Management Consoleで一つのインスタンスを複数のELBに対してのアタッチができないので作成した。

require 'aws-sdk'
require 'optparse'

account = ''
elb_name = ''
instance_id = ''

opt = OptionParser.new
opt.on('-a VAL', '--account VAL') {|v| account = v}
opt.on('-e VAL', '--elb-id VAL') {|v| elb_name = v}
opt.on('-i VAL', '--instance-id VAL') {|v| instance_id = v.split(',')}

opt.parse!(ARGV)

config = YAML.load(File.read('config.yml'))
AWS.config(config[account])
ec2 = AWS::EC2.new

found_instances = []
not_found_instance = []
instance_id.each do |id|
  i = ec2.instances[id]
  if i.exists?
    found_instances << i
  else
    not_found_instance << i
  end
end

if not_found_instance.size > 0
  puts "Instances not found: #{not_found_instance.map(&:id)}"
end

unless found_instances.size > 0
  puts "Attachable instances not found."
  exit 1
end

elb = AWS::ELB.new
lb = elb.load_balancers[elb_name]
unless lb.exists?
  puts "ELB not found: #{elb_name}"
  exit 2
end
lb.instances.register(found_instances)

puts "attached:"
lb.instances.each do |i|
  puts "\t#{i.id}"
end

以下のように実行する。インスタンスIDは、カンマ区切りで複数指定可能。

$ ./attach_elb.rb -a myaccount -i i-abcd1234,i-5678efab -e my-elb

前回は、インスタンスを自分で起動していたため、インスタンスの存在をいちいちチェックしていなかったが、今回はスクリプトの起動時にパラメータとして渡されたインスタンスIDをチェックするようにしている。ELBも同様にチェックしている。

[AWS] Amazon VPCで複数拠点接続

先週、Amazon VPCでVPN接続の設定を行った

複数拠点でVPN接続をしてみたところ、VPNはつながるようになったのだが、AWSと通信ができない問題が起こった。VPNにはつながっているし、ルーティングも問題ないように見えた。セキュリティグループや、ルータのファイアウォールの問題でもない。

色々と試しても解決しなかったので、AWSのサポートに問い合わせたところ、複数拠点接続を行う際に、設定が必要ということで、ドキュメントと、参考になる記事としてAmazon VPCで複数拠点間接続を試してみた - log4motoをご教示いただいた。

つまり、接続するロケーションごとに、BGPの経路情報を設定する必要があるとのこと。これまで、BGPは名前は聞いたことがあるぐらいで扱ったことがなかったので、ここに問題があるということが全然分からなかった。

今回は、192.168.254.0/24と、192.168.1.0/24という、二つのレンジを持つネットワークが二つ接続されていたので、それぞれVPN接続をしているルータに、設定をした。

今回は対象がScreen OSなので、AWSからダウンロードできる設定は下記のようになっていた。

set ipv4 network 0.0.0.0/0

これを、192.168.254.0/24のネットワークの場合は、下記のように変更した。

set ipv4 network 192.168.254.0/24

これで、正しく経路情報が設定され、VPN経由でAWSに接続することができるようになった。