話題の記事

Amazon VPC設計時に気をつけたい基本の5のこと

2019.08.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

EC2やECS、RDSなどといったサービス利用時にAmazon VPC(以下よりVPC)が合わせて必要になります。 VPCの設計はCIDRとテナンシーの選択のみとシンプルですが、案外迷ってしまいます。 私が設計時に気をつけている5点をまとめてみました。

RFC1918準拠のIPアドレス範囲から指定する

IPアドレスの範囲はrfc1918に準拠した範囲を指定することを推奨します。 少し難しく聞こえますが、下記のIPアドレス範囲から指定するということです。

  • 10.0.0.0 - 10.255.255.255 (10/8 プレフィックス)
  • 172.16.0.0 - 172.31.255.255 (172.16/12 プレフィックス)
  • 192.168.0.0 - 192.168.255.255 (192.168/16 プレフィックス)

よく見るプライベートIPアドレス範囲ですね。 16ビット以上でかつ、28ビット以下のIPアドレス範囲を指定することはできますが、できる限りこの範囲から指定しましょう。

拡張に対応できるIPアドレス範囲を指定する

VPC、サブネットのIPアドレス範囲は将来的に起こり得る拡張に対応できるように指定します。 Auto Scalingで十分にスケールができなくなったり、サービスが起動できなくなったりと、IPアドレスの枯渇は大きな問題につながります。

デフォルト

サブネットのネットワークアドレスをのぞいた最初の3つのアドレスはAWS側で予約されているため使用できません。 例えば/24であれば第4オクテットが1、2、3のIPアドレスが使用できないことになります。 またオンプレミスのネットワークと同様に、ネットワークアドレス、ブロードキャストアドレスはEC2インスタンスなどに割り当てることができません。 そのため合計で5個のIPアドレスがデフォルトで使用されます。

ELB

ELBにはサブネットで8個以上のIPアドレスが必要になります。 IPアドレスが枯渇して十分にスケールしないということに注意しましょう。

Auto Scaling

EC2インスタンスをAuto Scalingで増減させる場合はAuto Scalingで設定したEC2インスタンスの最大値分まではIPアドレスが使用されます。 枯渇すると、スケールができなくなるので注意しましょう。

VPC Endpoint(PrivateLink)

インタフェース型のVPC エンドポイントを使用する場合にはエンドポイント毎にENIが1つ作成されます。 そのためエンドポイント毎にIPアドレスが1つ使用されます。 SSMを使用するためには最低でも4つのVPC エンドポイントを作成する必要があるので、ご注意ください。

ECS/EKS

ECS、EKSではノードになるEC2インスタンスに対してENIを複数紐づけます。 ENIを複数使用するのでENI分だけIPアドレスが使用されます。

Lambda

LambdaをVPC内で実行する場合は必要なENI分だけIPがアドレスが使用されます。 そのため、IPアドレスが枯渇すると、Lambdaが十分にスケールせずに、EC2ThrottledExceptionが増加します。 ドキュメントによると必要なENI要件は下記の式で概算が出せます。

ENI = Projected peak concurrent executions * (Memory in GB / 3GB)

# Projected peak concurrent executions: 関数がサポートする必要がある同時実行の数
# Memory: Lambda 関数用に設定したメモリの容量

LambdaがスケールすればするほどENIが必要になるのでIPアドレスの枯渇もそうですが、ENIの上限数にも気をつけましょう。

VPCの再作成は非常に大変です。 将来に十分耐えうるIPアドレス範囲をVPC、サブネット共に選択しましょう。

Direct Connect、VPN、VPC Peering利用時にはIPアドレス範囲の重複に注意する

オンプレミス環境との接続で使用するDirect ConnectやVPN、VPCとVPCを接続するVPC Peeringを使用する場合にはIPアドレス範囲の重複に注意します。 IPアドレス範囲の重複があった場合にこれらの機能を使うことができません。 VPCもオンプレミスのネットワークにしてもIPアドレス範囲の変更は非常に大変なので十分に注意して設計しましょう。

サブネットの設計

VPCの設計同様、サブネットの設計も悩みますよね。 私は下記の役割からサブネットを必要なAZ分だけ作成しています。

  • パブリック : インターネットゲートウェイ経由で外部と通信できるサブネット
  • プライベート : NATゲートウェイ経由で外部への通信ができるサブネット
  • アイソレート : 外部との通信ができないサブネット

AWS CDKで作成できるサブネットタイプに準拠してこのような種別でサブネットを作成するようにしています。 ルーティングの単位をサブネットの役割とし、通信の制御は基本的にセキュリティグループで行うようにしています。

ブロードキャストとマルチキャストは使えない

VPCの制限事項ですが、ブロードキャストとマルチキャスト通信は行うことができません。 オンプレミスからの移行で、これらを使うサービスがある場合は十分な検討が必要になります。

さいごに

私がVPCの設計時に気をつけていることを5つまとめてみました。 細かい注意点などはまだまだありますが、参考にしていただけると幸いです。