AWSのVPC & Subnetのビットマスクは /16 – /28 です。この数字を聞いて 「狭い方はもう少し出来てもいいんじゃないか?」と私も思っていましたが、/28でも狭すぎます!特にELBを使う場合は、すぐにIPが尽きてしまいます。
なぜ狭いビットマスクを指定するのか?
- VPNを張りたいので、CIDRの衝突を回避するため
- VPC Peering でのCIDRの衝突を回避するため
- 貧乏性
概ね別ネットワークとの接続が目的だと思います。私は、VPN接続が予定されているが、対向のCIDRが分からない、だから極力狭いサブネットを指定して衝突する可能性を下げる目的でつかいました。ただし、この用途では、ISP Shared Address(100.64.0.0/10)を使ってしまうのも手です。
狭いビットマスクとELB
早くも結論を書くと
/28で使えるIPアドレスは、AWS側ルータ等に取られるIPアドレスを差し引いて11個。そのサブネットにELBを建てると、ELB暖気申請していなくても、8IPが予約されてしまう。よって、2台ELBを/28のサブネットに建てることはできない。
こんなことになります。
AWSのドキュメント
2012年に偉大な方より言及されております。
ELB(スケールサイズ)とDNS(返されるIPアドレス)の関係(予想)
cloudpack.media
これによると、20IPのリザーブと記載がありますが、現在のドキュメントでは8 IP
と改められているようです。ただしドキュメント日付は同じでも日本語ドキュメントには一切記載がありません。
(2015/06/28の時点)
Setting Up Elastic Load Balancing – Elastic Load Balancing
docs.aws.amazon.com
再現方法
この現象に遭遇してから、再現しようと思ったけど、意外に苦戦しました。/28のサブネットを作成し、ELBだけを複数台作成すると、2台以上作れたりします。
まず、11個のローカルIPアドレスの内、4IPを食いつぶし、残り7IP以下とします。
ケチるなら、ENIを無駄作成 & Attachが手っ取り早いです。どんな方法でもいいので、VPC->Subnetの表示で、残りIPが7以下の状態を作ります。
その上で、普通にELBをつくろうとしたら、下記の表示が出ます。
まとめ
- /28でサブネットを切るなら、ELBは1台だけと覚悟する
- 2015年6月現在のELBのためのIPリザーブ数は 8 IP、しかも各々のサブネットに対して
- 可能な限り、ドキュメントは英語を読む