ALB におけるサブネットの制限
AWS 公式ドキュメントより
- 少なくとも 2 つのアベイラビリティーゾーンサブネットを選択する
- サブネットは異なるアベイラビリティーゾーンに属している
- ロードバランサーのアベイラビリティーゾーンサブネットごとに CIDR ブロックを最低でも /27 ビットマスクにする
- 少なくとも各サブネットにつき 8 個の空き IP アドレスを用意
このあたりの詳細について動作確認する
検証
サブネットの作成
ドキュメントでは /27 以上にせよと書いてあるが、 /28 で作ってみる。
利用可能なIPv4アドレスについては、/28では16IPアドレスがアサインされるが5つはAWSで予約されるため11となっている。
ALBの作成
対象のサブネットにひたすらALBを作成していく。
結果
8個目のALBを作成したところで下記のエラーメッセージが出力された。
Not enough IP space available in subnet-0db772ec73ec98db6. ELB requires at least 8 free IP addresses in each subnet.
subnet-0db772ec73ec98db6 は ap-northeast-1a である。
確認
ENIの状態
ネットワークインターフェースを確認するとこんな感じ。
アベイラビリティゾーンをみるとわかるが、7個作ったうち4つが1a、3つが1cにENIが作成されている。これはおそらくターゲットグループにインスタンスを紐づけていないためランダムにアサインされたと考えられる。(ALB作成順とAZに関連性はなさそう)
サブネットの状態
利用可能なIPv4アドレスが減少しており、ap-northeast-1aの個数が7となっている。
エラーメッセージでもこちらのサブネットでIPが不足と出ていたので、ドキュメント通り8IPが残っている状態でないとALBは作成できない模様。
ただ本来はAZ毎にターゲットを配置するのでおそらく5ALBでエラーになったのではと推測される。
まとめ
- CIDR ブロックは /28 でもロードバランサは作成できる
- サブネットに8IP以上残っていないとエラーになる
- ターゲットを正しく設定してからじゃないとだめかも