@kyanny's blog

商品にならぬ技術は役に立たない - トーマス・エジソン

IPv4 CIDR が 192.168.0.0/28 のサブネット内に 11 個以上の EC2 インスタンスを起動しようとすると以下のエラーが発生する

Amazon VPC やサブネットへの理解を深めるための実験。

  • IPv4 CIDR が 192.168.0.0/28 の VPC を作る
    • AWS VPC では /16 から /28 まで指定できる
  • その VPC 内に IPv4 CIDR が 192.168.0.0/28 のサブネットを作る
    • /28 はネットワーク部が 28 ビットでホスト部が 4 ビットなので、 IP アドレスの個数は最大で 24 = 16 個
    • このサブネット一つで VPC 内の CIDR アドレスを使い切る
    • 実験用に t2.micro インスタンスを立ち上げたいので、アベイラビリティゾーンに ap-northeast-1a 以外を指定する
  • terraform で EC2 インスタンスをたくさん立ち上げてみる
  • 以下のエラーが発生した
    • インスタンスは 11 個起動した
Error: Error launching source instance: InsufficientFreeAddressesInSubnet: There are not enough free addresses in subnet 'subnet-0dc95f1172768f21a' to satisfy the requested number of instances.
        status code: 400, request id: 6724ec1b-59c2-4e6e-bb6a-4529fbe51e8f
各サブネット CIDR ブロックの最初の 4 つの IP アドレスと最後の IP アドレスは使用できず、インスタンスに割り当てることができません。たとえば、CIDR ブロック 10.0.0.0/24 を持つサブネットの場合、次の 5 つの IP アドレスが予約されます。

- 10.0.0.0: ネットワークアドレスです。
- 10.0.0.1: VPC ルーター用に AWS で予約されています。
- 10.0.0.2: AWS で予約されています。DNS サーバーの IP アドレスは、VPC ネットワーク範囲のベースにプラス 2 したものです。複数の CIDR ブロックを持つ VPC の場合、DNS サーバーの IP アドレスはプライマリ CIDR にあります。また、VPC 内のすべての CIDR ブロックに対して、各サブネットの範囲 + 2 のベースを予約します。詳細については、「Amazon DNS サーバー」を参照してください。
- 10.0.0.3: 将来の利用のために AWS で予約されています。
- 10.0.0.255: ネットワークブロードキャストアドレスです。VPC ではブロードキャストがサポートされないため、このアドレスを予約します。
  • 立ち上がった EC2 インスタンスに割り当てられたプライベート IP アドレスを調べると、上記と合致した
     1      private_ip                   = "192.168.0.10"
     2      private_ip                   = "192.168.0.11"
     3      private_ip                   = "192.168.0.12"
     4      private_ip                   = "192.168.0.13"
     5      private_ip                   = "192.168.0.14"
     6      private_ip                   = "192.168.0.4"
     7      private_ip                   = "192.168.0.5"
     8      private_ip                   = "192.168.0.6"
     9      private_ip                   = "192.168.0.7"
    10      private_ip                   = "192.168.0.8"
    11      private_ip                   = "192.168.0.9"