2026年5月17日

2026年5月17日

AWSでVPC(仮想プライベートクラウド)を設定する方法

はじめに

AWSのVPC(Virtual Private Cloud)はクラウド上に論理的に分離されたネットワーク空間を作る仕組みで、すべてのリソース配置の基盤となります。デフォルトVPCも利用可能ですが、本番運用ではCIDR設計・サブネット分割・ルーティング設計を意識した独自VPCを作るのが定石です。

本記事ではAWS CLI v2を使い、VPC作成からパブリック・プライベートサブネット構成、IGW(インターネットゲートウェイ)アタッチ、ルートテーブル設定までを実例で示します。

設計上はマルチAZ配置を基本とし、可用性と将来のスケールに備えたCIDRレンジを選ぶことが重要です。

症状・背景

  • デフォルトVPCで運用しているが、本番用に分離したい
  • マルチAZ構成で耐障害性を高めたい
  • パブリック(Web)とプライベート(DB)サブネットを分けたい
  • 既存オンプレネットワークと将来VPNで接続することを見据えたCIDR設計が欲しい

手順・設定方法

ステップ1: VPCを作成

# VPCを作成(10.0.0.0/16)
VPC_ID=$(aws ec2 create-vpc --cidr-block 10.0.0.0/16 \
  --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=prod-vpc}]' \
  --query "Vpc.VpcId" --output text)
echo "VPC: $VPC_ID"
# DNSホスト名を有効化
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-hostnames
aws ec2 modify-vpc-attribute --vpc-id $VPC_ID --enable-dns-support

ステップ2: パブリック・プライベートサブネットを作成

# パブリックサブネット(ap-northeast-1a)
PUB_A=$(aws ec2 create-subnet --vpc-id $VPC_ID \
  --cidr-block 10.0.1.0/24 --availability-zone ap-northeast-1a \
  --query "Subnet.SubnetId" --output text)
# パブリックサブネット(1c)
PUB_C=$(aws ec2 create-subnet --vpc-id $VPC_ID \
  --cidr-block 10.0.2.0/24 --availability-zone ap-northeast-1c \
  --query "Subnet.SubnetId" --output text)
# プライベートサブネット(1a, 1c)
PRI_A=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block 10.0.11.0/24 --availability-zone ap-northeast-1a --query "Subnet.SubnetId" --output text)
PRI_C=$(aws ec2 create-subnet --vpc-id $VPC_ID --cidr-block 10.0.12.0/24 --availability-zone ap-northeast-1c --query "Subnet.SubnetId" --output text)

ステップ3: IGWアタッチとルートテーブル設定

# IGWを作成しVPCにアタッチ
IGW_ID=$(aws ec2 create-internet-gateway --query "InternetGateway.InternetGatewayId" --output text)
aws ec2 attach-internet-gateway --vpc-id $VPC_ID --internet-gateway-id $IGW_ID
# パブリック用ルートテーブル
RT_PUB=$(aws ec2 create-route-table --vpc-id $VPC_ID --query "RouteTable.RouteTableId" --output text)
aws ec2 create-route --route-table-id $RT_PUB --destination-cidr-block 0.0.0.0/0 --gateway-id $IGW_ID
# パブリックサブネットへ関連付け
aws ec2 associate-route-table --route-table-id $RT_PUB --subnet-id $PUB_A
aws ec2 associate-route-table --route-table-id $RT_PUB --subnet-id $PUB_C

ステップ4: NATゲートウェイでプライベートからの送信路を確保

# Elastic IPを確保
EIP_ALLOC=$(aws ec2 allocate-address --domain vpc --query "AllocationId" --output text)
# NAT Gateway をパブリックサブネットに作成
NAT_ID=$(aws ec2 create-nat-gateway --subnet-id $PUB_A \
  --allocation-id $EIP_ALLOC --query "NatGateway.NatGatewayId" --output text)
# プライベート用ルートテーブルとデフォルトルート
RT_PRI=$(aws ec2 create-route-table --vpc-id $VPC_ID --query "RouteTable.RouteTableId" --output text)
aws ec2 create-route --route-table-id $RT_PRI --destination-cidr-block 0.0.0.0/0 --nat-gateway-id $NAT_ID
aws ec2 associate-route-table --route-table-id $RT_PRI --subnet-id $PRI_A
aws ec2 associate-route-table --route-table-id $RT_PRI --subnet-id $PRI_C

注意事項

  • VPCのCIDRは作成後に縮小できないため、最初に十分余裕を持って /16 を割り当てる
  • NAT Gatewayは時間課金+データ転送課金が発生する。コスト最適化が必要なら NAT インスタンスや VPC エンドポイントを検討
  • マルチAZ構成にしないと単一AZ障害でサービス全停止のリスク
  • セキュリティグループとネットワークACL(NACL)の役割を混同しないように

まとめ

1. CIDR /16で大きく確保し将来の拡張に備える

2. パブリック・プライベートサブネットを2AZ以上で配置

3. IGWでパブリック、NATでプライベートの外向きを実現

4. ルートテーブルを用途別に分離し誤って公開しない

5. VPC設計はやり直し困難なので最初に十分検討する

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ