LoginSignup
4
4

More than 5 years have passed since last update.

ELBのConnection Drainingを使ってみる

Last updated at Posted at 2014-03-31

ELBのConnection Drainingがサポートされたので試してみた。
今までApacheのgraceful-stopでELBからインスタンス外してたりしてたけどこれで安全、簡単に取り外しができそう。

使ってみた環境

ELB <=> EC2(<=> sinatra)な構成を構築
sinatraは以下のようなコード

require 'sinatra'

get '/' do
  sleep 30
  'test'
end

get '/status' do
  'ok'
end

management consoleから使ってみる

  • オフの確認
    1. ELBのConnection Drainingオフ
    2. ブラウザやcurlでELBドメインの/にアクセス
    3. ELBからEC2をRemove
    4. /からレスポンスが返らないことを確認(curlではEmpty reply from serverでエラー)
  • オンの確認
    1. ELBのConnection Drainingオン
    2. ブラウザやcurlでELBドメインの/にアクセス
    3. ELBからEC2をRemove
    4. /から"test"が返ることを確認

API(rubyのaws-sdk)から使ってみる

  • ELBのConnection Drainingオン
  • ブラウザやcurlでELBドメインの/にアクセス
  • 以下のスクリプトを実行
require 'aws-sdk'

REGION = "ap-northeast-1"
ELB_NAME = "test"

elb = AWS::ELB.new(:proxy_uri => ENV['HTTP_PROXY'] || ENV['http_proxy'], 
                   :region => REGION).load_balancers[ELB_NAME]

deregister_instances = []
elb.instances.each do |instance|
  elb.instances.deregister(instance)
  deregister_instances << instance
  puts "#{instance.instance_id} #{instance.tags["Name"]}"                                                             
end

while true
  sleep 3
  deregister_instances.each do |instance|
    p instance.elb_health
  end 
end
  • 結果確認(レスポンス返す間はInService)
$ bundle exec ruby elb_ec2_deregister.rb
i-12345678 test
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance deregistration currently in progress.", :state=>"InService", :reason_code=>"N/A"}
{:description=>"Instance is not currently registered with the LoadBalancer.", :state=>"OutOfService", :reason_code=>"Instance"}
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4