- 公開日
- 最終更新日
AWS CLIで VPC をサクッと構築してみた
この記事を共有する
目次
はじめに
皆さんこんにちは!パーソル&サーバーワークスの榎本です!
突然ですが、検証目的などでサクッとVPCを構築したい時、ありませんか?
マネジメントコンソールでポチポチ進めるのも良いと思うのですが、
本記事では別の選択肢を共有するために、AWS CloudShell 上で AWS CLI を利用して VPC を構築する方法をお伝えしたいと思います!
AWS公式ドキュメント: AWS CLI を使用した Amazon VPC の開始方法
本記事の目的
- CloudShellだけでVPC構築を完結させること
前提条件
- AWSアカウントを所持していること
- 東京リージョン(ap-northeast-1)を使用
- AWS CloudShellが利用可能であること
今回構築する VPC 構成
以下記事で構築したVPCと基本的に同じ設定を想定
※DNSホスト名は本記事では有効で設定
CloudShellでの作業手順
CloudShellの起動
AWSマネジメントコンソール右上の
CloudShellアイコンをクリックし、CloudShellを起動する

VPC構築用CLIスクリプト
以下のスクリプトを そのまま CloudShell に貼り付けて実行する
#!/bin/bash-------------------------------------------------
変数設定
-------------------------------------------------
REGION="ap-northeast-1" DATE=$(date +%Y%m%d) VPC_NAME="guest1"
-------------------------------------------------
Step 1: VPC構築
-------------------------------------------------
VPC_ID=$(aws ec2 create-vpc \ --cidr-block 10.0.0.0/16 \ --region $REGION \ --query 'Vpc.VpcId' \ --output text)
aws ec2 create-tags \ --resources $VPCID \ --tags Key=Name,Value=${VPCNAME}-${DATE}-vpc \ --region $REGION
-------------------------------------------------
Step 2: DNS解決・DNSホスト名有効化
-------------------------------------------------
aws ec2 modify-vpc-attribute \ --vpc-id $VPC_ID \ --enable-dns-support \ --region $REGION
aws ec2 modify-vpc-attribute \ --vpc-id $VPC_ID \ --enable-dns-hostnames \ --region $REGION
-------------------------------------------------
Step 3: サブネット作成
-------------------------------------------------
SUBNETPUBLIC1A=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.0.0/24 \ --availability-zone ap-northeast-1a \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPUBLIC1A \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-public-subnet-1a \ --region $REGION
SUBNETPUBLIC1C=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.1.0/24 \ --availability-zone ap-northeast-1c \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPUBLIC1C \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-public-subnet-1c \ --region $REGION
SUBNETPROTECTED1A=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.10.0/24 \ --availability-zone ap-northeast-1a \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPROTECTED1A \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-protected-subnet-1a \ --region $REGION
SUBNETPROTECTED1C=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.11.0/24 \ --availability-zone ap-northeast-1c \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPROTECTED1C \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-protected-subnet-1c \ --region $REGION
SUBNETPRIVATE1A=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.100.0/24 \ --availability-zone ap-northeast-1a \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPRIVATE1A \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-private-subnet-1a \ --region $REGION
SUBNETPRIVATE1C=$(aws ec2 create-subnet \ --vpc-id $VPC_ID \ --cidr-block 10.0.101.0/24 \ --availability-zone ap-northeast-1c \ --query 'Subnet.SubnetId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $SUBNETPRIVATE1C \ --tags Key=Name,Value=${VPC_NAME}-${DATE}-private-subnet-1c \ --region $REGION
-------------------------------------------------
Step 4: インターネットゲートウェイ作成&VPCアタッチ
-------------------------------------------------
IGW_ID=$(aws ec2 create-internet-gateway \ --query 'InternetGateway.InternetGatewayId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $IGWID \ --tags Key=Name,Value=${VPCNAME}-${DATE}-igw \ --region $REGION
aws ec2 attach-internet-gateway \ --internet-gateway-id $IGWID \ --vpc-id $VPCID \ --region $REGION
-------------------------------------------------
Step 5: ルートテーブル作成
-------------------------------------------------
RTBPUBLIC=$(aws ec2 create-route-table \ --vpc-id $VPCID \ --query 'RouteTable.RouteTableId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $RTBPUBLIC \ --tags Key=Name,Value=${VPCNAME}-${DATE}-public-rtb \ --region $REGION
aws ec2 create-route \ --route-table-id $RTBPUBLIC \ --destination-cidr-block 0.0.0.0/0 \ --gateway-id $IGWID \ --region $REGION
aws ec2 associate-route-table \ --route-table-id $RTBPUBLIC \ --subnet-id $SUBNETPUBLIC_1A \ --region $REGION
aws ec2 associate-route-table \ --route-table-id $RTBPUBLIC \ --subnet-id $SUBNETPUBLIC_1C \ --region $REGION
RTBPROTECTED=$(aws ec2 create-route-table \ --vpc-id $VPCID \ --query 'RouteTable.RouteTableId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $RTBPROTECTED \ --tags Key=Name,Value=${VPCNAME}-${DATE}-protected-rtb \ --region $REGION
aws ec2 associate-route-table --route-table-id $RTBPROTECTED --subnet-id $SUBNETPROTECTED1A --region $REGION aws ec2 associate-route-table --route-table-id $RTBPROTECTED --subnet-id $SUBNETPROTECTED1C --region $REGION
RTBPRIVATE=$(aws ec2 create-route-table \ --vpc-id $VPCID \ --query 'RouteTable.RouteTableId' \ --output text \ --region $REGION)
aws ec2 create-tags \ --resources $RTBPRIVATE \ --tags Key=Name,Value=${VPCNAME}-${DATE}-private-rtb \ --region $REGION
aws ec2 associate-route-table --route-table-id $RTBPRIVATE --subnet-id $SUBNETPRIVATE1A --region $REGION aws ec2 associate-route-table --route-table-id $RTBPRIVATE --subnet-id $SUBNETPRIVATE1C --region $REGION
echo "VPC environment setup completed"
構築後の確認
AWSマネジメントコンソール上で構成が想定どおり作成されていることを確認する
VPCの確認
- VPCが1つ作成されている
- IPv4 CIDRが10.0.0.0/16
- 以下のDNS設定が有効になっている
- DNS解決(enableDnsSupport)
- DNSホスト名(enableDnsHostnames)
サブネットの確認
- サブネットが合計6つ存在する
- ap-northeast-1a / ap-northeast-1cに分散している
- CIDR が設計どおり割り当てられている
Publicサブネット
- 10.0.0.0/24(1a)
- 10.0.1.0/24(1c)
Protectedサブネット
- 10.0.10.0/24(1a)
- 10.0.11.0/24(1c)
Privateサブネット
- 10.0.100.0/24(1a)
- 10.0.101.0/24(1c)
ルートテーブルの確認
- Publicルートテーブルに
0.0.0.0/0 → Internet Gatewayが存在する
まとめ
本記事では、CloudShellとAWS CLIを使ってVPC 環境を簡単に構築することができました!
IaCといえばTerraform、CDK、CloudFormationで環境構築するケースも多いと思いますが、
CLIコマンドでもAWSサービスを気軽に構築することができます。
ただそれぞれ特徴がございますので、やりたいことや現場環境に応じて使い分けていただければと存じます。
最後までご覧いただきありがとうございました!
この記事は私が書きました
榎本 将希
記事一覧2024,2025 Japan All AWS Certifications Engineers サッカー観戦とサウナが好きです! 機械学習とAIを勉強中です!