Toyokky's Tech Notes

ネットワーク系クラウドエンジニアとして学んだことの技術メモ。

CLIだけで構築: 03_ルートテーブル、ルート追加、サブネット関連付け

CLIだけで構築: 03_ルートテーブル、ルート追加、サブネット関連付け

本ページでは CLIだけで構築: 01_まとめ、構成図 へ記載した構成図の以下AWSリソースを、AWS CLIで構築します。

記事番号 リソース種別 VPC AZ 個別情報 Name CIDR, その他
02 VPC 本番 - - P1x-Vpc 10.0.0.0/16
02 サブネット 本番 1a パブリック P1a-Sub-Pub01 10.0.11.0/24
本番 1a プライベート P1a-Sub-Pri01 10.0.12.0/24
本番 1a プロテクト P1a-Sub-Pro01 10.0.13.0/24
本番 1c パブリック P1c-Sub-Pub01 10.0.21.0/24
本番 1c プライベート P1c-Sub-Pri01 10.0.22.0/24
本番 1c プロテクト P1c-Sub-Pro01 10.0.23.0/24
03 Internet Gateway 本番 - - P1x-Igw -
03 Route Table 本番 - パブリック P1x-Rtb-Pub01 -
本番 - プライベート P1x-Rtb-Pri01 -
本番 - プロテクト P1x-Rtb-Pro01 -

※構築時にVPC, サブネット情報が必要なので、参考として載せています。

自宅のPC環境

  • Windows10 Home Ver21H1
    • AWS CLI: aws-cli/2.1.34 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
      • -- profile default : 読み取り専用
      • -- profile aws_RW : 書き込み権限あり
        • ※ 誤操作防止のため、変更操作時のみ-- profileオプションを付けてます。
    • PowerShell: Ver7.1.4

注意書き

  • コマンド内の変数やパラメータやは検証で使用したものを記載しています。自身の環境に書き換えて使用してください。
  • 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。

目次


InternetGatewayの作成

# InternetGateway作成
${profile} = "aws_RW"
${igw_name} = "P1x-Igw"
${tag_env} = "Product"
${tag_system} = "HatenaBlog"

aws ec2 create-internet-gateway `
    --profile ${profile} `
    --tag-specifications "ResourceType=internet-gateway, `
        Tags=[{Key=Name,Value=${igw_name}}, `
            {Key=Env,Value=${tag_env}}, `
            {Key=System,Value=${tag_system}}]"

InternetGatewayとVPCを関連付ける

# VPC-IDを変数へ格納
${vpc_name} = "P1x-Vpc"

${vpc_id} = aws ec2 describe-vpcs `
    --filters "Name=tag:Name,Values=${vpc_name}" `
    --query "Vpcs[].VpcId" `
    --output text

# InternetGateway-IDを変数へ格納
${igw_name} = "P1x-Igw"

${igw_id} = aws ec2 describe-internet-gateways `
    --filters "Name=tag:Name,Values=${igw_name}" `
    --query "InternetGateways[].InternetGatewayId" `
    --output text

# InternetGatewayとVPCを関連付ける
${profile} = "aws_RW"

aws ec2 attach-internet-gateway `
    --profile ${profile} `
    --vpc-id ${vpc_id} `
    --internet-gateway-id ${igw_id}

RouteTableの作成

# 変数(共通利用)
${profile}        = "aws_RW"
${tag_env}        = "Product"
${tag_system}     = "HatenaBlog"

# VPC-IDを変数へ格納する(共通利用)
${vpc_name} = "P1x-Vpc"

${vpc_id} = aws ec2 describe-vpcs `
    --filters "Name=tag:Name,Values=${vpc_name}" `
    --query "Vpcs[].VpcId" `
    --output text

# -------------------------------------------
# RouteTable作成: パブリック
${rtb_name} = "P1x-Rtb-Pub01"

aws ec2 create-route-table `
    --profile ${profile} `
    --vpc-id ${vpc_id} `
    --tag-specifications "ResourceType=route-table, `
        Tags=[{Key=Name,Value=${rtb_name}}, `
            {Key=Env,Value=${tag_env}}, `
            {Key=System,Value=${tag_system}}]"

#"# -------------------------------------------
# RouteTable作成: プライベート
${rtb_name} = "P1x-Rtb-Pri01"

aws ec2 create-route-table `
    --profile ${profile} `
    --vpc-id ${vpc_id} `
    --tag-specifications "ResourceType=route-table, `
        Tags=[{Key=Name,Value=${rtb_name}}, `
            {Key=Env,Value=${tag_env}}, `
            {Key=System,Value=${tag_system}}]"

#"# -------------------------------------------
# RouteTable作成: プロテクト
${rtb_name} = "P1x-Rtb-Pro01"

aws ec2 create-route-table `
    --profile ${profile} `
    --vpc-id ${vpc_id} `
    --tag-specifications "ResourceType=route-table, `
        Tags=[{Key=Name,Value=${rtb_name}}, `
            {Key=Env,Value=${tag_env}}, `
            {Key=System,Value=${tag_system}}]"

RouteTableへルートを追加する

本構成で追加するルートは、以下の2本です。 - P1x-Rtb-Pub01(パブリック) - 宛先: 0.0.0.0/0 , ターゲット: P1x-Igw(InternetGateway) - P1x-Rtb-Pri01(プライベート) - 宛先: 0.0.0.0/0 , ターゲット: Ec2-Nat-NatServer(NATインスタンス)

ただ、NATインスタンスはまだ未作成のためプライベート側のルートは追加できません。NATインスタンス作成後に改めて設定します。

# RouteTable-IDを変数へ格納する
${rtb_name} = "P1x-Rtb-Pub01"

${rtb_id} = aws ec2 describe-route-tables `
    --filters "Name=tag:Name,Values=${rtb_name}" `
    --query "RouteTables[].RouteTableId" `
    --output text

# InternetGateway-IDを変数へ格納
${igw_name} = "P1x-Igw"

${igw_id} = aws ec2 describe-internet-gateways `
    --filters "Name=tag:Name,Values=${igw_name}" `
    --query "InternetGateways[].InternetGatewayId" `
    --output text

# Route追加: パブリック
${profile} = "aws_RW"
${dest_cidr} = "0.0.0.0/0"

aws ec2 create-route `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --destination-cidr-block ${dest_cidr} `
    --gateway-id ${igw_id}

RouteTableとサブネットの関連付け

関連付けの組み合わせは以下です。

  • P1x-Rtb-Pub01 (パブリック)
    • P1a-Sub-Pub01 (AZ-1a, パブリック)
    • P1c-Sub-Pub01 (AZ-1c, パブリック)
  • P1x-Rtb-Pri01 (プライベート)
    • P1a-Sub-Pri01 (AZ-1a, プライベート)
    • P1c-Sub-Pri01 (AZ-1c, プライベート)
  • P1x-Rtb-Pro01 (プロテクト)
    • P1a-Sub-Pro01 (AZ-1a, プロテクト)
    • P1c-Sub-Pro01 (AZ-1c, プロテクト)

1つのRouteTableへ2つ以上のサブネットを関連付けする場合、関連付けコマンドassociate-route-tableはサブネット数分の実行が必要です。同時に2つは付けられない。
また、対象のサブネットがDefault RouteTableに紐付いている必要があります。他のRouteTableへ明示的に関連付けしているサブネットは別の方法で付け替えますが、方法が面倒になるためGUIで付け替えたほうが楽です。

# RouteTable(パブリック)とサブネットを関連つける
## RouteTable-IDを変数へ格納する
${rtb_name} = "P1x-Rtb-Pub01"

${rtb_id} = aws ec2 describe-route-tables `
    --filters "Name=tag:Name,Values=${rtb_name}" `
    --query "RouteTables[].RouteTableId" `
    --output text

## Subnet-IDを変数へ格納する
${sub_name_1a} = "P1a-Sub-Pub01"
${sub_name_1c} = "P1c-Sub-Pub01"

${sub_id_1a} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1a}" `
    --query "Subnets[].SubnetId" `
    --output text

${sub_id_1c} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1c}" `
    --query "Subnets[].SubnetId" `
    --output text

## RouteTableへサブネットを関連付ける
${profile} = "aws_RW"

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1a}

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1c}


# -------------------------------------------
# RouteTable(プライベート)とサブネットを関連つける
## RouteTable-IDを変数へ格納する
${rtb_name} = "P1x-Rtb-Pri01"

${rtb_id} = aws ec2 describe-route-tables `
    --filters "Name=tag:Name,Values=${rtb_name}" `
    --query "RouteTables[].RouteTableId" `
    --output text

## Subnet-IDを変数へ格納する
${sub_name_1a} = "P1a-Sub-Pri01"
${sub_name_1c} = "P1c-Sub-Pri01"

${sub_id_1a} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1a}" `
    --query "Subnets[].SubnetId" `
    --output text

${sub_id_1c} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1c}" `
    --query "Subnets[].SubnetId" `
    --output text

## RouteTableへサブネットを関連付ける
${profile} = "aws_RW"

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1a}

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1c}


# -------------------------------------------
# RouteTable(プロテクト)とサブネットを関連つける
## RouteTable-IDを変数へ格納する
${rtb_name} = "P1x-Rtb-Pro01"

${rtb_id} = aws ec2 describe-route-tables `
    --filters "Name=tag:Name,Values=${rtb_name}" `
    --query "RouteTables[].RouteTableId" `
    --output text

## Subnet-IDを変数へ格納する
${sub_name_1a} = "P1a-Sub-Pro01"
${sub_name_1c} = "P1c-Sub-Pro01"

${sub_id_1a} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1a}" `
    --query "Subnets[].SubnetId" `
    --output text

${sub_id_1c} = aws ec2 describe-subnets `
    --filters "Name=tag:Name,Values=${sub_name_1c}" `
    --query "Subnets[].SubnetId" `
    --output text

## RouteTableへサブネットを関連付ける
${profile} = "aws_RW"

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1a}

aws ec2 associate-route-table `
    --profile ${profile} `
    --route-table-id ${rtb_id} `
    --subnet-id ${sub_id_1c}

作成したAWSリソースの表示

# InternetGateway
## すべて表示
aws ec2 describe-internet-gateways

## Nameタグを指定して表示
${igw_name} = "P1x-Igw"
aws ec2 describe-internet-gateways --filters "Name=tag:Name,Values=${igw_name}"

# -------------------------------------------
# RouteTable
## すべて表示
aws ec2 describe-route-tables

## Nameタグを指定して表示
${rtb_name} = "P1x-Rtb-Pub01"
aws ec2 describe-route-tables --filters "Name=tag:Name,Values=${rtb_name}"


関連記事へのリンク