ENGINEER BLOG ENGINEER BLOG
  • 公開日
  • 最終更新日

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ホスト名は本記事では有効で設定

【VPC】まずはVPCを作ってみましょう

CloudShellでの作業手順

CloudShellの起動

AWSマネジメントコンソール右上の
CloudShellアイコンをクリックし、CloudShellを起動する
CloudShell.png

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を勉強中です!

榎本 将希

この記事を共有する

クラウドのご相談

CONTACT

クラウド導入や運用でお悩みの方は、お気軽にご相談ください。
専門家がサポートします。

サービス資料ダウンロード

DOWNLOAD

ビジネスをクラウドで加速させる準備はできていますか?
今すぐサービス資料をダウンロードして、詳細をご確認ください。