💬

Amazon VPCをAWS CLIで構築する手順④

2022/04/29に公開

はじめに

前回はインターネットゲートウェイの作成とアタッチを行いました。
今回は、ルートテーブルの作成とルートの追加をAWS CLIでやる手順を書きます。
今回も「AWS Hands-on for Beginners」とJAWS-UG CLI専門支部のハンズオンで学んだことを基に書いています。

※注意
ハンズオンで学んだことを基にしてコマンド実行しながら書きますが、認識違いや補足などがありましたらご指摘いただけますと幸いです。
また、記載内容を参考にする場合は自己責任でお願いいたします。

前回の記事

本記事の作業環境と、VPCとサブネット、セキュリティグループ、インターネット作成の手順については、前回以前の記事を参照してください。

https://zenn.dev/amarelo_n24/articles/dee73d9ce90072

構成図

パブリックサブネットに関連付けるルートテーブルと、プライベートサブネットに関連付けるルートテーブルの2つを作成します。

ルート構成

パブリックサブネット

インターネットゲートウェイへのルートを作成します。

送信元 ターゲット
10.0.0.0/16 local
0.0.0.0/0 InternetGateway

プライベートサブネット

こちらは自ネットワークのみのルーティングです。

送信元 ターゲット
10.0.0.0/16 local

手順

1.ルートテーブルの作成

パブリックサルートテーブルとプライベートルートテーブルを作成します。
ここでは、パブリックルートテーブルを例に書いていきます。

①リージョンを環境変数に指定

VPCを作成するリージョンを環境変数に指定します。この手順では東京リージョンを指定します。

export AWS_DEFAULT_REGION='ap-northeast-1'

②各種変数の指定

VPCタグ名、ルートテーブルのタグ名・タグ文字列、VPC IDを変数に指定します。

VPCタグ名

EC2_VPC_TAG_NAME='handson-cli-vpc'

VPC ID

EC2_VPC_ID=$( \
  aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME}  \
    --query 'Vpcs[].VpcId' \
    --output text \
) \
  && echo ${EC2_VPC_ID}
vpc-xxxxxxxxxxxxxxxxx

ルートテーブルタグ名

EC2_ROUTE_TABLE_TAG_NAME='handson-cli-vpc-public-route-table'

タグ文字列

STRING_EC2_ROUTE_TABLE_TAG="ResourceType=route-table,Tags=[{Key=Name,Value=${EC2_ROUTE_TABLE_TAG_NAME}}]" \
&& echo ${STRING_EC2_ROUTE_TABLE_TAG}
ResourceType=route-table,Tags=[{Key=Name,Value=handson-cli-vpc}]

③コマンド実行

以下のコマンドを実行します。

aws ec2 create-route-table \
  --vpc-id ${EC2_VPC_ID} \
  --tag-specifications ${STRING_EC2_ROUTE_TABLE_TAG}

成功すると以下のように表示されます。

{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-0XXXXxxXXXXXXxXXX",
        "Routes": [
            {
                "DestinationCidrBlock": "10.0.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson-cli-vpc-public-route-table"
            }
        ],
        "VpcId": "vpc-0XXXXxxXXXXXXxXXX",
        "OwnerId": "XXXXXXXXXXXX"
    }
}

④作成確認

作成したルートテーブルが、VPC内に存在していることを確認します。
作成先VPCタグ名が表示されればOKです。

aws ec2 describe-route-tables \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME} \
  --query "RouteTables[].Tags[?Key == \`Name\`].Value" \
  --output text

ルートテーブルタグ名を'handson-cli-vpc-private-route-table'に変更し、プライベートルートテーブル作成のために上記手順をもう一度実行します。

2.ルートテーブルとサブネットの関連付け

①リージョンを環境変数に指定

VPCを作成するリージョンを環境変数に指定します。この手順では東京リージョンを指定します。

export AWS_DEFAULT_REGION='ap-northeast-1'

②各種変数の指定

VPCタグ名、ルートテーブルのタグ名、サブネットのタグ名、VPC ID、ルートテーブルID、サブネットIDを変数に指定します。

VPCタグ名

EC2_VPC_TAG_NAME='handson-cli-vpc'

VPC ID

EC2_VPC_ID=$( \
  aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME}  \
    --query 'Vpcs[].VpcId' \
    --output text \
) \
  && echo ${EC2_VPC_ID}
vpc-xxxxxxxxxxxxxxxxx

ルートテーブルタグ名

EC2_ROUTE_TABLE_TAG_NAME='handson-cli-vpc-public-route-table'

ルートテーブルID

EC2_ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${EC2_VPC_ID} \
              Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME} \
    --query "RouteTables[].RouteTableId" \
    --output text
) \
&& echo ${EC2_ROUTE_TABLE_ID}

サブネットタグ名

EC2_SUBNET_TAG_NAME='handson-cli-public-subnet-a'

サブネットID

EC2_SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${EC2_VPC_ID} \
              Name=tag:Name,Values=${EC2_SUBNET_TAG_NAME} \
    --query "Subnets[].SubnetId" \
    --output text \
) \
&& echo ${EC2_SUBNET_ID}

③コマンド実行

以下のコマンドを実行して、ルートテーブルとサブネットを関連付けます。

aws ec2 associate-route-table \
  --subnet-id ${EC2_SUBNET_ID} \
  --route-table-id ${EC2_ROUTE_TABLE_ID}

成功すると以下のように表示されます。

{
    "AssociationId": "rtbassoc-XXXXXXXXXXXXXXXXX",
    "AssociationState": {
        "State": "associated"
    }
}

'handson-cli-public-subnet-c'についても同じ手順でルートテーブルの関連付けを行います。
また、プライベートサブネット'handson-cli-private-subnet-a'と'handson-cli-private-subnet-c'については、プライベートルートテーブル'handson-cli-vpc-private-route-table'に関連付けを行います。

④作成確認

パブリックサブネットがパブリックルートテーブルに関連付けされていることを確認します。
変数${EC2_ROUTE_TABLE_ID}にパブリックルートテーブルIDを格納します。

aws ec2 describe-route-tables \
  --route-table-ids ${EC2_ROUTE_TABLE_ID} \
  --query "RouteTables[].Associations[].SubnetId" \
  --output text

成功すると、以下のように2つのサブネットIDが出力されます。

subnet-XXXXXXXXXXXXXXXXX        subnet-YYYYYYYYYYYYYYYYY

同じ手順で、プライベートサブネットがプライベートルートテーブルに関連付けされていることを確認します。変数${EC2_ROUTE_TABLE_ID}にプライベートルートテーブルIDを格納して、上記コマンドを実行します。

3.インターネットへのルート追加

パブリックルートテーブルにインターネットへのルートを追加します。

①リージョンを環境変数に指定

VPCを作成するリージョンを環境変数に指定します。この手順では東京リージョンを指定します。

export AWS_DEFAULT_REGION='ap-northeast-1'

②各種変数の指定

VPCタグ名、VPC ID、ルートテーブルタグ名、ルートテーブルID、インターネットゲートウェイタグ名、インターネットゲートウェイID、宛先アドレスを変数に指定します。

VPCタグ名

EC2_VPC_TAG_NAME='handson-cli-vpc'

VPC ID

EC2_VPC_ID=$( \
  aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${EC2_VPC_TAG_NAME} \
    --query 'Vpcs[].VpcId' \
    --output text \
) \
&& echo ${EC2_VPC_ID}
vpc-XXXXXXXXXXXXXXXXX

ルートテーブルタグ名

EC2_ROUTE_TABLE_TAG_NAME='handson-cli-vpc-public-route-table'

ルートテーブルID

EC2_ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${EC2_VPC_ID} \
              Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME} \
    --query "RouteTables[].RouteTableId" \
    --output text \
) \
&& echo ${EC2_ROUTE_TABLE_ID}
rtb-XXXXXXXXXXXXXXXXX

インターネットゲートウェイタグ名

EC2_INTERNET_GATEWAY_TAG_NAME='handson-cli-igw'

インターネットゲートウェイID

EC2_INTERNET_GATEWAY_ID=$( \
  aws ec2 describe-internet-gateways \
    --filters Name=tag:Name,Values=${EC2_INTERNET_GATEWAY_TAG_NAME} \
    --query "InternetGateways[].InternetGatewayId" \
    --output text \
) \
&& echo ${EC2_INTERNET_GATEWAY_ID}
igw-XXXXXXXXXXXXXXXXX

宛先アドレス
インターネットゲートウェイの宛先0.0.0.0/0を指定します。

EC2_ROUTE_DESTINATION_CIDR='0.0.0.0/0'

③コマンド実行

以下のコマンドでルート追加をします。

aws ec2 create-route \
  --route-table-id ${EC2_ROUTE_TABLE_ID} \
  --destination-cidr-block ${EC2_ROUTE_DESTINATION_CIDR} \
  --gateway-id ${EC2_INTERNET_GATEWAY_ID}

成功すると以下の通り表示されます。

{
    "Return": true
}

④作成確認

以下のコマンドでパブリックルートテーブルにルートが追加されたことを確認します。

aws ec2 describe-route-tables \
  --filters Name=vpc-id,Values=${EC2_VPC_ID} \
            Name=tag:Name,Values=${EC2_ROUTE_TABLE_TAG_NAME} \
  --query "RouteTables[].Routes[].DestinationCidrBlock" \
  --output text  

以下のように表示されます。0.0.0.0/0が表示されれば成功です。

10.0.0.0/16     0.0.0.0/0

ここまでのまとめ

この記事では、ルートテーブルの作成と、ルートテーブルとサブネットの関連付け、インターネットへのルート追加をAWS CLIで行う手順を書きました。
次回は、パブリックサブネットにEC2を作成してインターネットへの疎通、インターネットからのアクセスを出来ることを確認したいと思います。

※次の記事
https://zenn.dev/amarelo_n24/articles/0703c4807dde4d

Discussion