Amazon VPCをAWS CLIで構築する手順④
はじめに
前回はインターネットゲートウェイの作成とアタッチを行いました。
今回は、ルートテーブルの作成とルートの追加をAWS CLIでやる手順を書きます。
今回も「AWS Hands-on for Beginners」とJAWS-UG CLI専門支部のハンズオンで学んだことを基に書いています。
※注意
ハンズオンで学んだことを基にしてコマンド実行しながら書きますが、認識違いや補足などがありましたらご指摘いただけますと幸いです。
また、記載内容を参考にする場合は自己責任でお願いいたします。
前回の記事
本記事の作業環境と、VPCとサブネット、セキュリティグループ、インターネット作成の手順については、前回以前の記事を参照してください。
構成図
パブリックサブネットに関連付けるルートテーブルと、プライベートサブネットに関連付けるルートテーブルの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を作成してインターネットへの疎通、インターネットからのアクセスを出来ることを確認したいと思います。
※次の記事
Discussion