さくらのエンハンスド LBのルール削除でハマったこと
エンハンスドLBのルールを消したらアクセスできない?
さくらのクラウドの「エンハンスドロードバランサ(エンハンスドLB)」を使っていて、「ルールを削除したらWebサーバーにアクセスできなくなった」という現象に出くわしました
設定を見直したところ、原因は サーバグループの指定が残っていたこと にありました
ルールを使っていない状態でも、サーバグループの影響を受けることを学んだので備忘録として残します
なにが起きたか?
状況は以下の通りです:
- エンハンスドLBでWebサーバ1台にバランシング
- 特定の送信元IPからのみアクセスできるようルールを設定していた
- しばらくした後、ルールが不要になったのでルールを全て削除
→ アクセスすると「503 Service Unavailable」エラーが返ってきた
エンハンスドLBのサーバグループとは?
エンハンスドLBでは実サーバーを「サーバグループ」に所属させることができます
これはルール(振り分け)機能で使うためのもので、ロードバランシング先の実サーバを指定することができます
ルールを設定する際にはサーバーとサーバーグループを結びつける必要があります
さくらのクラウド公式マニュアル:エンハンスドロードバランサ ルール
ルール削除後もサーバグループが有効
ハマった問題はここです
エンハンスドLBの仕様として、サーバがサーバグループに所属している場合、ルールにマッチしないリクエストはそのサーバーに振り分けられません
つまり、ルールを削除しただけではダメで、実サーバの設定から「サーバグループの指定」も削除しなければなりませんでした
ルールを設定する前はサーバグループを設定しなくてもアクセスできていたので、ルール設定にサーバグループを指定したことをすっかり忘れていました
実サーバの設定時にサーバグループの欄で以下の注意書きもありました
ただ、ルールを設定するときはここは見ますが、削除するときは気付けないかもしれないです
グループが空(未指定)の実サーバはいずれのルールにもマッチしないリクエストが振り分けられます。

対処法
対処法は2つ考えられます
複数人で管理する場合は対処法2の方がサーバグループの指定を意識しなくていいので、良いかもしれません
対処法1
ルールを削除する際は、実サーバーの編集 してサーバグループの指定を「空(未設定)」に戻す
対処法2
あらかじめ「ルールありきの構成」にしておく
実サーバを必ずサーバグループに所属させ、ルールを前提とした構成にしておけば、ルール削除時のミスが起きづらくなります
まとめ
エンハンスドLBからサーバ1台にバランシングすることは少ないかもしれませんが、開発段階や導入段階では発生しうると思います
エンハンスドLBのルール機能を使ったことがある環境では、サーバグループのことを思い出してください
Discussion