🌊

"AWS Hands-on for Beginners - Network編#1"をAWS CLIで構築する2

2024/05/05に公開

前回に引き続きAWS CLIでハンズオンを構築する。
今回はインターネットゲートウェイとルートテーブルを作成する。

構成図

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

  • インターネットゲートウェイのタグ名を変数に格納
IGW_TAG_NAME="handson-igw"
IGW_TAG_SPECIFICATIONS="ResourceType=internet-gateway,Tags=[{Key=Name,Value=${IGW_TAG_NAME}}]"
  • インターネットゲートウェイの作成
aws ec2 create-internet-gateway \
    --tag-specifications ${IGW_TAG_SPECIFICATIONS}
  • VPC名、VPC ID、インターネットゲートウェイIDを変数に格納
VPC_TAG_NAME="handson"
VPC_ID=$( \
    aws ec2 describe-vpcs \
    --filters Name=tag:Name,Values=${VPC_TAG_NAME}  \
    --query "Vpcs[].VpcId" \
    --output text \
    )
IGW_ID=$( \
    aws ec2 describe-internet-gateways \
    --filters Name=tag:Name,Values=${IGW_TAG_NAME} \
    --query "InternetGateways[].InternetGatewayId" \
    --output text \
    )
  • インターネットゲートウェイを指定したVPCにアタッチ
aws ec2 attach-internet-gateway \
    --internet-gateway-id ${IGW_ID} \
    --vpc-id ${VPC_ID}

ルートテーブル

すでに作られているデフォルトのルートテーブル名を変更する

DEFAULT_ROUTE_TABLE_ID=$( \
    aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${VPC_ID} \
    --query "RouteTables[].RouteTableId" \
    --output text \
    )
aws ec2 create-tags \
    --resources ${DEFAULT_ROUTE_TABLE_ID} \
    --tags Key=Name,Value="Private-Route-Table"

新たにルートテーブルを作成する

  • ルートテーブルのタグ名を変数に格納
ROUTE_TABLE_TAG_NAME="Public-Route-Table"
ROUTE_TABLE_TAG_SPECIFICATIONS="ResourceType=route-table,Tags=[{Key=Name,Value=${ROUTE_TABLE_TAG_NAME}}]"
  • ルートテーブルの作成
aws ec2 create-route-table \
    --vpc-id ${VPC_ID} \
    --tag-specifications ${ROUTE_TABLE_TAG_SPECIFICATIONS}

  • ルートテーブルID、宛先アドレスを変数に格納
ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${ROUTE_TABLE_TAG_NAME} \
    --query "RouteTables[].RouteTableId" \
    --output text
)
DESTINATION_CIDR="0.0.0.0/0"
  • インターネットへのルートを追加
aws ec2 create-route \
    --route-table-id ${ROUTE_TABLE_ID} \
    --destination-cidr-block ${DESTINATION_CIDR} \
    --gateway-id ${IGW_ID}

サブネットにルートテーブルを関連付ける

ルートテーブル関連付けを4つまとめて作成する場合はこちら

  • ルートテーブルIDを変数に格納する
ROUTE_TABLE_TAG_NAME="Public-Route-Table"
ROUTE_TABLE_ID=$( \
  aws ec2 describe-route-tables \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${ROUTE_TABLE_TAG_NAME} \
    --query "RouteTables[].RouteTableId" \
    --output text
)
  • サブネットIDを変数に格納する
SUBNET_TAG_NAME=Public-subnet-a
SUBNET_ID=$( \
  aws ec2 describe-subnets \
    --filters Name=vpc-id,Values=${VPC_ID} \
              Name=tag:Name,Values=${SUBNET_TAG_NAME} \
    --query "Subnets[].SubnetId" \
    --output text \
) 
  • サブネットにルートテーブルを関連付ける
aws ec2 associate-route-table \
    --subnet-id ${SUBNET_ID} \
    --route-table-id ${ROUTE_TABLE_ID}



4つまとめてサブネットにルートテーブルを関連付ける

subnet_tag_names=("Public-subnet-a" "Public-subnet-c" "Private-subnet-a" "Private-subnet-c")
route_table_tag_names=("Public-Route-Table" "Public-Route-Table" "Private-Route-Table" "Private-Route-Table")
for i in {0..3}
do
    ROUTE_TABLE_ID=$( \
        aws ec2 describe-route-tables \
            --filters Name=vpc-id,Values=${VPC_ID} \
                      Name=tag:Name,Values=${route_table_tag_names[$i]} \
            --query "RouteTables[].RouteTableId" \
            --output text
    )
    SUBNET_ID=$( \
        aws ec2 describe-subnets \
            --filters Name=vpc-id,Values=${VPC_ID} \
                      Name=tag:Name,Values=${subnet_tag_names[$i]} \
            --query "Subnets[].SubnetId" \
            --output text \
    )
    aws ec2 associate-route-table \
        --subnet-id ${SUBNET_ID} \
        --route-table-id ${ROUTE_TABLE_ID}
done

参考
https://zenn.dev/uepon/articles/2590c4a7dfc9f2
https://zenn.dev/amarelo_n24/articles/f66a1757344f9e


次回
https://zenn.dev/tn_a/articles/fa5db74e45572b

Discussion