AWSのリソースを作成するときはマネジメントコンソール画面で行うことが多いかと思います。
マネジメントコンソールではなく、AWS CLIでもさまざまなAWS環境を構築することが可能です。
今回はAWS CLIでVPCを作成し、VPCにパブリックサブネットとプライベートサブネットをひとつずつ作成する環境を構築します。
AWS CLIを使用するとマネジメントコンソールよりも複雑になってしまいますが、細かい部分までパラメータで指定する必要があるのでいい勉強になると思っています。
以下の記事では、現役のAWSエンジニア目線でAWSが学べるスクールを4つ厳選したのでぜひ参考にしてください。
最終的な構成
今回構築するのは最終的に以下のような構成です。

作成するリソースは以下の通りです。
| リソース | 記事内でのIDの表記 | 備考 | 
|---|---|---|
| VPC | vpc-123456 | リージョン:ap-northeast-1 CIDR:10.0.0.0/16  | 
| パブリックサブネット | subnet-pb123456 | アベイラビリティゾーン:ap-northeast-1a CIDR:10.0.0.0/24  | 
| プライベートサブネット | subnet-pr123456 | アベイラビリティゾーン:ap-northeast-1a CIDR:10.0.1.0/24  | 
| インターネットゲートウェイ | igw-123456 | |
| ルートテーブル | rtb-123456 | インターネットゲートウェイへのルートを追加しパブリックサブネットへ適用 | 
環境
私の環境では以下のバージョンがインストールされています。
$ aws --version 
aws-cli/2.8.0 Python/3.9.11 Darwin/21.3.0 exe/x86_64 prompt/offAWS CLIでVPCを作成する
VPCを作成する
VPCの作成を行うのはaws ec2 create-vpcコマンドです。--query Vpc.VpcId --output textオプションパラメータを付与することで、コマンドの結果をVPCのIDのみが返ってきます。
返ってきたVPC IDを控えておいてください。
$ aws ec2 create-vpc --cidr-block 10.0.0.0/16 --query Vpc.VpcId --output text後でわかりやすいようにNameタグをつけておきます。
タグの追加はaws ec2 create-tagsコマンドで行うことが可能です。
今回は、先ほど指定したVPCにdjango-vpcというタグをつけます。
- –resource
タグを付けるリソースのIDを指定します - –tags
タグをKey=タグ名,Value=値の形式で指定します 
$ aws ec2 create-tags --resource vpc-123456 --tags Key=Name,Value=django-vpcVPCが正しく作成されているか、マネジメントコンソール画面で確認しておきましょう。

パブリックサブネットを作成する
サブネットを作成し、インターネットゲートウェイにルーティングするルートテーブルをアタッチすることでパブリックサブネットにします。
サブネットを作成する
先ほど作成したVPCにCIDR範囲10.0.0.0/24のサブネットを作成します。
後ほどこのサブネットの通信をインターネットゲートウェイにルーティングすることでパブリックサブネットにしていきます。aws ec2 create-subnetコマンドでサブネットの作成が可能です。
- –vpc-id
サブネットを作成するVPCのID - –cidr-block
サブネットのCIDR範囲 - –availability-zone
アベイラビリティゾーン 
VPCの作成時と同様に、--query Subnet.SubnetId --output textオプションパラメータを付与することでサブネットのIDのみが返ってくるようにします。(なくても可。これをつけないと他の細かい設定内容も含めて返ってきます)
aws ec2 create-subnet \
--vpc-id vpc-xxxxxx \
--cidr-block 10.0.0.0/24 \
--availability-zone ap-northeast-1a \
--query Subnet.SubnetId --output text作成したら、サブネットのIDを控えて(ここではsubnet-pb123456とします)、後でマネジメントコンソールを見たときに分かりやすいようにdjangoo-public-subnetというNameタグをつけておきます。
aws ec2 create-tags --resource subnet-xxxxxx --tags Key=Name,Value=django-public-subnetこのサブネットにEC2インスタンスを起動したときにパブリックIPアドレスを自動で割り当てるようにサブネットの設定を変更します。(今回はEC2の起動はしませんが、有効化しておかないとEC2を起動してもパブリックIPが自動で割り当てられません)
aws ec2 modify-subnet-attribute --subnet-id subnet-xxxxxx --map-public-ip-on-launchインターネットゲートウェイを作成する
パブリックサブネットとするためにインターネットゲートウェイを作成します。
インターネットゲートウェイの作成はaws ec2 create-internet-gatewayコマンドです。--query InternetGateway.InternetGatewayId --output textで、いつものようにIDだけを出力するようにするようにしています。
aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text例のごとくタグをつけておきます。(django-igwとしました)
aws ec2 create-tags --resource igw-123456 --tags Key=Name,Value=django-igw続いてインターネットゲートウェイをVPCにアタッチすることで、最初に作成したVPCでインターネットゲートウェイが使用できるようにします。aws ec2 attach-internet-gatewayコマンドを使用します。
- –vpc-id
インターネットゲートウェイをアタッチするVPCのID - –internet-gateway-id
VPCにアタッチするインターネットゲートウェイのID 
aws ec2 attach-internet-gateway --vpc-id vpc-123456 --internet-gateway-id igw-123456ルートテーブルを作成する
ルートテーブルを作成して、インターネットゲートウェイへのルーティングを追加して、パブリックサブネットに適用します。
ルートテーブルについては「ルートテーブルとは?初心者にもわかりやすく解説!」でも解説していますのでご参照ください。
まずはルートテーブルをaws ec2 create-route-tableコマンドで作成しましょう。
ついでにNameタグ付けも行います(タグの値はdjango-rtb-publicとします)
aws ec2 create-route-table --vpc-id vpc-123456 --query RouteTable.RouteTableId --output text
aws ec2 create-tags --resource rtb-123456 --tags Key=Name,Value=django-rtb-publicルートテーブルを作成したら、ルーティングのルールを作成します。aws ec2 create-routeコマンドで、先ほどのルートテーブルにルールを作成することが可能です。
0.0.0.0/0(すべてのトラフィック)のルーティング先をインターネットゲートウェイにすることで、インターネットとの通信が可能になります。
aws ec2 create-route --route-table-id rtb-123456 --destination-cidr-block 0.0.0.0/0 --gateway-id igw-123456最後にaws ec2 associate-route-tableコマンドでこのルートテーブルをサブネットに適用することで、パブリックサブネットとします。
aws ec2 associate-route-table --subnet-id subnet-pb123456 --route-table-id rtb-123456
プライベートサブネットを作成する
パブリックサブネットと同様の手順でサブネットを作成します。
こちらのサブネットはインターネットゲートウェイへのルーティングを適用しないので、プライベートサブネットです。
CIDRは10.0.1.0/24とします。
aws ec2 create-subnet \
--vpc-id vpc-123456 \
--cidr-block 10.0.1.0/24 \
--availability-zone ap-northeast-1a \
--query Subnet.SubnetId --output text
aws ec2 create-tags --resource subnet-pr123456 --tags Key=Name,Value=django-public-subnetまとめ
今回はAWS CLIを使用してVPCと、パブリックサブネット、プライベートサブネットを構成しました。
マネジメントコンソールだともっと簡単に作成できますが、AWS CLIを使うことでサブネットの構成方法をより詳しく理解できるかと思います。
TerraformやCloudFormationなどのIaCツールでも、同様に細かいパラメータ等を調べて構築する必要があるため、勉強になると思いますのでぜひトライしてみてください。
もっと詳しくAWSを知るには
さらにAWSを詳しく知りたいという方は、スクールでAWSを学ぶのもおすすめです。
AWSをスクールで学習するのは、以下のメリットがあります。
- 必要最低限のサービスを厳選して学習できる
 - ハンズオン形式で効率的に学習できる
 - AWS以外のエンジニアに必要なスキルも同時に学習できる
 
以下の記事では、AWSが学べるスクールを現役のエンジニア目線で4つに厳選してランキングしているので、ぜひ参考にしてみてください。



			
			
			
			
			
			
			
			
コメント
コメント一覧 (2件)
ありがとうございます。大変勉強になりました。
私はエンジニアでもなければサーバー周りの経験もありませんが、
おかげ様でイメージがつきました。
今後とも頑張ってください、応援しております。
ルートテーブルのところだけ、rtb- *********** と直書きになっていたので、もし修正されるのであればご参照ください。
コメントありがとうございます!
そして、ご指摘ありがとうございます…!
修正させていただきました。今後ともよろしくお願いします。