どうも、AWS 白帯シリーズも第 20 弾に突入しました。まだまだ白帯のかっぱ@inokara)です。うっす。

はじめに

ざっくり ELB の管理下から外れたインスタンスのステータスはは OutOfService になると思っていたら任意に ELB から外した場合とヘルスチェックの失敗により外れた場合には微妙に違っていたのでメモ。


参考


違い

確認のスクリプト

以下は AWS-SDK for Ruby で以下を実行した結果の出力を整理しました。

#!/usr/bin/env ruby

require 'aws-sdk'

ACCESS_KEY_ID     = "AKxxxxxxxxxxxxxxxxxxxx"
SECRET_ACCESS_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
REGION = "ap-northeast-1"
elb_name = 'kappa-test'
#
elb = AWS::ELB.new(
  access_key_id: >ACCESS_KEY_ID,
  secret_access_key: SECRET_ACCESS_KEY,
  region: REGION
).client

p elb.describe_instance_health(:load_balancer_name => elb_name)[:instance_states]

結果はハッシュで返ってきます。

インスタンスが正常な状態

[{:description=>"N/A", :state=>"InService", :instance_id=>"i-1234567", :reason_code=>"N/A"}]

任意に ELB からインスタンスを外した場合

[{:description=>"Instance is not currently registered with the LoadBalancer.", :instance_id=>"i-abcdefg", :state=>"OutOfService", :reason_code=>"Instance"}]

ヘルスチェックに失敗して外れた場合

[{:description=>"Instance has failed at least the UnhealthyThreshold number of health checks consecutively.", :state=>"OutOfService", :instance_id=>"i-999999", :reason_code=>"Instance"}]

違いの判る男なら一目瞭然。state"OutOfService" になっていますが、description は以下のように異なっていました。

状態 desciption
ELB から任意に切り離し Instance is not currently registered with the LoadBalancer.
ヘルスチェックに失敗 Instance has failed at least the UnhealthyThreshold number of health checks consecutively.

おお。知らなすぎた…。


最後に

全然意識していませんでしたが、上記のような違いがあったんですな。ELB の監視を独自に実装している場合等に応用出来そうな気がします!

元記事はこちらです。
AWS 白帯シリーズ(20)ELB のインスタンスステータスメモ