VPCのサイジングについての失敗談

エキサイト株式会社の武藤です。

AWSVPCのサイジングについて失敗談がありますので、それについて説明します。

オンプレからAWSへシステム移行

担当サービスをオンプレからAWSへ移行していたときのことでした。

インフラチームからVPCのIPレンジを/24(256個)で割り当てられたので、下記のネットワーク構成で移行を進めていました。

VPC : /24 (256個)

AZ : 3AZ

private subnet

  • ap-northeast-1a : /26 (64個)
  • ap-northeast-1c : /26 (64個)
  • ap-northeast-1d : /26 (64個)

public subnet

  • ap-northeast-1a : /28 (16個)
  • ap-northeast-1c : /28 (16個)
  • ap-northeast-1d : /28 (16個)

internet-facing ALBのIPに関する仕様

DBの移行が完了し、アプリケーションサーバの移行に着手していきました。 サーバごとにEC2、internet-facing ALBを構築していたときに、下記のTerraformのエラーが出てしまい、ALBが構築できなくなりました。

│ Error: error creating application Load Balancer: InvalidSubnet: Not enough IP space available in subnet-xxxxxxxxxxxxxxx. ELB requires at least 8 free IP addresses in each subnet.

エラーログから調べてみたところ、internet-facing ALB (ELB) には下記の仕様がありました。

docs.aws.amazon.com

Requirements

For internet-facing load balancers, the subnets that you specify must have at least 8 available IP addresses.

ALB(ELB)には、サブネットに最低8個のIPを確保する必要があり、それを下回る状況となったために起きたエラーでした。

internet-facing のALBはInternet Gatewayがアタッチされたpublic subnetに設置する必要があります。 public subnetには /28 のIPレンジを割り振っていたため、最大で16個のIPがあります。 そして、サブネットごとに5個の予約アドレスが存在します。

docs.aws.amazon.com

各サブネット CIDR ブロックの最初の 4 つの IP アドレスと最後の IP アドレスは使用できず、EC2 インスタンスなどのリソースに割り当てることができません。

つまり、実際に利用可能なIPは11個となります。 ALBを何台か立てていくと、あっという間に8個を下回ってしまいました。

VPCの再構築

その後の対応は、VPCをさらに広いIPレンジで再構築しました。 VPC構成は下記のように変更しました。

VPC : /22 (1024個)

AZ : 3AZ

private subnet

  • ap-northeast-1a : /24 (256個)
  • ap-northeast-1c : /24 (256個)
  • ap-northeast-1d : /24 (256個)

public subnet

  • ap-northeast-1a : /26 (64個)
  • ap-northeast-1c : /26 (64個)
  • ap-northeast-1d : /26 (64個)

今回のようなVPCのサイズを変更したい場合、方法は2つあります。

aws.amazon.com

・追加の IPv4 CIDR ブロックをセカンダリ CIDR として VPC に追加する。

・希望する CIDR ブロックで新しい VPC を作成し、古い VPC から新しい VPC にリソースを移行する (該当する場合)。

今回は既にDBがVPC内で本番稼働していましたが、複雑なネットワーク構成になることを避けて、移行する方針を採用しました。

本番稼働していたDBは、DMS(Database Migration Service)を使って新しいVPCに移行しました。 オンプレからの移行の際にもDMSを使ったので慣れていましたが、DB移行自体が慎重に行う作業のため心理的に大変でした。(泣)

終わりに

VPCサイジングの失敗談を紹介しました。 今回のケースのように、ALBを複数立てる可能性があるサブネットを構成する場合、 /28 の割り当ては要注意です。

VPCは簡単に変更ができるものではありません。 必要なIPの見積もりは、サービスがスケールすることもありますので、多めに見積もることを推奨します。 また、各リソースのIP利用に関する仕様について把握することも重要だと言えます。

このブログがお役に立てれば幸いです。

参考記事

iga-ninja.hatenablog.com

dev.classmethod.jp