AWS CLIでVPCとサブネットを作成する方法

当ページのリンクには広告が含まれています。
AWSCLIでVPCとサブネットを構築する

AWSのリソースを作成するときはマネジメントコンソール画面で行うことが多いかと思います。

マネジメントコンソールではなく、AWS CLIでもさまざまなAWS環境を構築することが可能です。

今回はAWS CLIでVPCを作成し、VPCにパブリックサブネットとプライベートサブネットをひとつずつ作成する環境を構築します。

AWS CLIを使用するとマネジメントコンソールよりも複雑になってしまいますが、細かい部分までパラメータで指定する必要があるのでいい勉強になると思っています。

以下の記事では、現役のAWSエンジニア目線でAWSが学べるスクールを4つ厳選したのでぜひ参考にしてください。

>>【2023年最新】AWS初心者におすすめAWSが学べるスクール4選を見る

目次

最終的な構成

今回構築するのは最終的に以下のような構成です。

VPCの構成図

作成するリソースは以下の通りです。

リソース記事内でのIDの表記備考
VPCvpc-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/off

AWS 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-vpc

VPCが正しく作成されているか、マネジメントコンソール画面で確認しておきましょう。

VPCのマネジメントコンソール画面

パブリックサブネットを作成する

サブネットを作成し、インターネットゲートウェイにルーティングするルートテーブルをアタッチすることでパブリックサブネットにします。

サブネットを作成する

先ほど作成した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つに厳選してランキングしているので、ぜひ参考にしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメント一覧 (2件)

  • ありがとうございます。大変勉強になりました。

    私はエンジニアでもなければサーバー周りの経験もありませんが、
    おかげ様でイメージがつきました。

    今後とも頑張ってください、応援しております。

    ルートテーブルのところだけ、rtb- *********** と直書きになっていたので、もし修正されるのであればご参照ください。

    • コメントありがとうございます!
      そして、ご指摘ありがとうございます…!
      修正させていただきました。今後ともよろしくお願いします。

エンジュニア へ返信する コメントをキャンセル

CAPTCHA


目次