0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「AWS Hands-on for Beginners Network編#2 Amazon VPC間およびAmazon VPCとオンプレミスの プライベートネットワーク接続 」をAWS CLIでやってみる

Last updated at Posted at 2024-06-09

上記、「AWS Hands-on for Beginners Network編#2 Amazon VPC間およびAmazon VPCとオンプレミスの プライベートネットワーク接続」 をAWS CLIでやってみる

image.png
ハンズオンから引用

1.メインVPCを作成する

変数設定 (IPv4 VPC CIDR block)

コマンド
VPC_CIDR_BLOCK_MAIN="10.0.0.0/16" \
&& echo ${VPC_CIDR_BLOCK_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ VPC_CIDR_BLOCK_MAIN="10.0.0.0/16" \
> && echo ${VPC_CIDR_BLOCK_MAIN}
10.0.0.0/16

変数設定 (VPC名)

コマンド
VPC_NAME_MAIN="Main VPC" \
&& echo ${VPC_NAME_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ VPC_NAME_MAIN="Main VPC" \
> && echo ${VPC_NAME_MAIN}
Main VPC

VPC 作成

コマンド
aws ec2 create-vpc \
    --cidr-block ${VPC_CIDR_BLOCK_MAIN} \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-130-33-176 ~]$ aws ec2 create-vpc \
>     --cidr-block ${VPC_CIDR_BLOCK_MAIN} \
>     --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_MAIN}}]"
{
    "Vpc": {
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-0e7d97fbb33a62ce1",
        "State": "pending",
        "VpcId": "vpc-044f0a97b7e8a476a",
        "OwnerId": "999999999999",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-036650403c9f5ee62",
                "CidrBlock": "10.0.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "Main VPC"
            }
        ]
    }
}

VPC IDの取得

コマンド
VPC_ID_MAIN=$( \
    aws ec2 describe-vpcs \
        --filters "Name=tag:Name,Values=${VPC_NAME_MAIN}" \
        --query "Vpcs[0].VpcId" \
        --output text\
)\
&& echo ${VPC_ID_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ VPC_ID_MAIN=$( \
>     aws ec2 describe-vpcs \
>         --filters "Name=tag:Name,Values=${VPC_NAME_MAIN}" \
>         --query "Vpcs[0].VpcId" \
>         --output text\
> )\
> && echo ${VPC_ID_MAIN}
vpc-044f0a97b7e8a476a

変数設定 (IPv4 Public CIDR block)

コマンド
SUBNET_CIDR_BLOCK_MAIN="10.0.0.0/24" \
&& echo ${SUBNET_CIDR_BLOCK_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ SUBNET_CIDR_BLOCK_MAIN="10.0.0.0/24" \
> && echo ${SUBNET_CIDR_BLOCK_MAIN}
10.0.0.0/24

変数設定 (アベイラビリティゾーン)

コマンド
AZ_MAIN="ap-northeast-1a" \
&& echo ${AZ_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ AZ_MAIN="ap-northeast-1a" \
> && echo ${AZ_MAIN}
ap-northeast-1a

変数設定 (サブネット名)

コマンド
SUBNET_NAME_MAIN="Main Public Subnet" \
&& echo ${SUBNET_NAME_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ SUBNET_NAME_MAIN="Main Public Subnet" \
> && echo ${SUBNET_NAME_MAIN}
Main Public Subnet

サブネットの作成

コマンド
aws ec2 create-subnet \
    --vpc-id ${VPC_ID_MAIN} \
    --cidr-block ${SUBNET_CIDR_BLOCK_MAIN} \
    --availability-zone ${AZ_MAIN} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-130-33-176 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID_MAIN} \
>     --cidr-block ${SUBNET_CIDR_BLOCK_MAIN} \
>     --availability-zone ${AZ_MAIN} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_MAIN}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.0.0.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-0e332a080d5517d6b",
        "VpcId": "vpc-044f0a97b7e8a476a",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "Main Public Subnet"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-0e332a080d5517d6b",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}

サブネット IDの取得

コマンド
SUBNET_ID_MAIN=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
                Name=tag:Name,Values="${SUBNET_NAME_MAIN}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${SUBNET_ID_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ SUBNET_ID_MAIN=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
>                 Name=tag:Name,Values="${SUBNET_NAME_MAIN}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${SUBNET_ID_MAIN}
subnet-0e332a080d5517d6b

サブネットのパブリックIPv4アドレス自動割り当ての有効化

コマンド
aws ec2 modify-subnet-attribute \
    --subnet-id ${SUBNET_ID_MAIN} \
    --map-public-ip-on-launch
出力
[cloudshell-user@ip-10-130-33-176 ~]$ aws ec2 modify-subnet-attribute \
>     --subnet-id ${SUBNET_ID_MAIN} \
>     --map-public-ip-on-launch

変数設定 (Internet Gateway名)

コマンド
INTERNET_GATEWAY_NAME_MAIN='Main Internet Gateway' \
&& echo ${INTERNET_GATEWAY_NAME_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ INTERNET_GATEWAY_NAME_MAIN='Main Internet Gateway' \
> && echo ${INTERNET_GATEWAY_NAME_MAIN}
Main Internet Gateway

Internet Gateway作成

コマンド
aws ec2 create-internet-gateway \
  --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-130-33-176 ~]$ aws ec2 create-internet-gateway \
>   --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_MAIN}}]"
{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-068f3e7ffa0776661",
        "OwnerId": "999999999999",
        "Tags": [
            {
                "Key": "Name",
                "Value": "Main Internet Gateway"
            }
        ]
    }
}

変数設定 (Internet Gateway IDの取得)

コマンド
INTERNET_GATEWAY_ID_MAIN=$( \
  aws ec2 describe-internet-gateways \
      --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_MAIN}" \
      --query "InternetGateways[].InternetGatewayId" \
      --output text \
) \
&& echo ${INTERNET_GATEWAY_ID_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ INTERNET_GATEWAY_ID_MAIN=$( \
>   aws ec2 describe-internet-gateways \
>       --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_MAIN}" \
>       --query "InternetGateways[].InternetGatewayId" \
>       --output text \
> ) \
> && echo ${INTERNET_GATEWAY_ID_MAIN}
igw-068f3e7ffa0776661

Internet GatewayをVPCにアタッチ

コマンド
aws ec2 attach-internet-gateway \
  --vpc-id ${VPC_ID_MAIN} \
  --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN}
出力
[cloudshell-user@ip-10-130-33-176 ~]$ aws ec2 attach-internet-gateway \
>   --vpc-id ${VPC_ID_MAIN} \
>   --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN}

変数設定 (パブリック ルートテーブル名)

コマンド
PUBLIC_ROUTE_NAME_MAIN='Main Public Route Table' \
&& echo ${PUBLIC_ROUTE_NAME_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_NAME_MAIN='Main Public Route Table' \
> && echo ${PUBLIC_ROUTE_NAME_MAIN}
Main Public Route Table

パブリック ルートテーブル作成

コマンド
aws ec2 create-route-table \
    --vpc-id ${VPC_ID_MAIN} \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-route-table \
>     --vpc-id ${VPC_ID_MAIN} \
>     --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_MAIN}}]"
{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-06294855aa51d5273",
        "Routes": [
            {
                "DestinationCidrBlock": "10.0.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [
            {
                "Key": "Name",
                "Value": "Main Public Route Table"
            }
        ],
        "VpcId": "vpc-044f0a97b7e8a476a",
        "OwnerId": "999999999999"
    },
    "ClientToken": "2ef99fd0-40db-41b4-83c2-86c296c444f9"
}

変数設定 (パブリック ルートテーブルID取得)

コマンド
PUBLIC_ROUTE_ID_MAIN=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
                Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_MAIN}" \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PUBLIC_ROUTE_ID_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_ID_MAIN=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
>                 Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_MAIN}" \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PUBLIC_ROUTE_ID_MAIN}
rtb-06294855aa51d5273

変数設定 (デフォルトルート指定)

コマンド
PUBLIC_ROUTE_DEFAULTROUTE_MAIN='0.0.0.0/0' \
&& echo ${PUBLIC_ROUTE_DEFAULTROUTE_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_DEFAULTROUTE_MAIN='0.0.0.0/0' \
> && echo ${PUBLIC_ROUTE_DEFAULTROUTE_MAIN}
0.0.0.0/0

デフォルトルート作成

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_MAIN} \
    --gateway-id ${INTERNET_GATEWAY_ID_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_MAIN} \
>     --gateway-id ${INTERNET_GATEWAY_ID_MAIN}
{
    "Return": true
}

変数設定 (メインルートテーブルID取得)

コマンド
PRIVATE_ROUTE_ID_MAIN=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
                Name=association.main,Values=true \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PRIVATE_ROUTE_ID_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PRIVATE_ROUTE_ID_MAIN=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_MAIN} \
>                 Name=association.main,Values=true \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PRIVATE_ROUTE_ID_MAIN}
rtb-022300aa94b5b1e97

変数設定 (プライベート ルートテーブル名)

コマンド
PRIVATE_ROUTE_NAME_MAIN='Main Private Route Table' \
&& echo ${PRIVATE_ROUTE_NAME_MAIN}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PRIVATE_ROUTE_NAME_MAIN='Main Private Route Table' \
> && echo ${PRIVATE_ROUTE_NAME_MAIN}
Main Private Route Table

メイン ルートテーブル名 変更

コマンド
aws ec2 create-tags \
    --resources ${PRIVATE_ROUTE_ID_MAIN} \
    --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_MAIN}"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-tags \
>     --resources ${PRIVATE_ROUTE_ID_MAIN} \
>     --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_MAIN}"

パブリック ルートテーブルの関連付け

コマンド
aws ec2 associate-route-table \
  --subnet-id ${SUBNET_ID_MAIN} \
  --route-table-id ${PUBLIC_ROUTE_ID_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 associate-route-table \
>   --subnet-id ${SUBNET_ID_MAIN} \
>   --route-table-id ${PUBLIC_ROUTE_ID_MAIN}
{
    "AssociationId": "rtbassoc-0815f3e455e0ea7d4",
    "AssociationState": {
        "State": "associated"
    }
}

2.ピアリングVPCを作成する

変数設定 (IPv4 VPC CIDR block)

コマンド
VPC_CIDR_BLOCK_PEERING="10.1.0.0/16" \
&& echo ${VPC_CIDR_BLOCK_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ VPC_CIDR_BLOCK_PEERING="10.1.0.0/16" \
> && echo ${VPC_CIDR_BLOCK_PEERING}
10.1.0.0/16

変数設定 (VPC名)

コマンド
VPC_NAME_PEERING="Peering VPC" \
&& echo ${VPC_NAME_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ VPC_NAME_PEERING="Peering VPC" \
> && echo ${VPC_NAME_PEERING}
Peering VPC

VPC 作成

コマンド
aws ec2 create-vpc \
    --cidr-block ${VPC_CIDR_BLOCK_PEERING} \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_PEERING}}]"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-vpc \
>     --cidr-block ${VPC_CIDR_BLOCK_PEERING} \
>     --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_PEERING}}]"
{
    "Vpc": {
        "CidrBlock": "10.1.0.0/16",
        "DhcpOptionsId": "dopt-0e7d97fbb33a62ce1",
        "State": "pending",
        "VpcId": "vpc-08ef472fae4c3cb36",
        "OwnerId": "999999999999",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0379457d7f4394ab7",
                "CidrBlock": "10.1.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "Peering VPC"
            }
        ]
    }
}

VPC IDの取得

コマンド
VPC_ID_PEERING=$( \
    aws ec2 describe-vpcs \
        --filters "Name=tag:Name,Values=${VPC_NAME_PEERING}" \
        --query "Vpcs[0].VpcId" \
        --output text\
)\
&& echo ${VPC_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ VPC_ID_PEERING=$( \
>     aws ec2 describe-vpcs \
>         --filters "Name=tag:Name,Values=${VPC_NAME_PEERING}" \
>         --query "Vpcs[0].VpcId" \
>         --output text\
> )\
> && echo ${VPC_ID_PEERING}
vpc-08ef472fae4c3cb36

変数設定 (IPv4 Public CIDR block)

コマンド
SUBNET_CIDR_BLOCK_PEERING="10.1.0.0/24" \
&& echo ${SUBNET_CIDR_BLOCK_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ SUBNET_CIDR_BLOCK_PEERING="10.1.0.0/24" \
> && echo ${SUBNET_CIDR_BLOCK_PEERING}
10.1.0.0/24

変数設定 (アベイラビリティゾーン)

コマンド
AZ_PEERING="ap-northeast-1a" \
&& echo ${AZ_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ AZ_PEERING="ap-northeast-1a" \
> && echo ${AZ_PEERING}
ap-northeast-1a

変数設定 (サブネット名)

コマンド
SUBNET_NAME_PEERING="Peering Public Subnet" \
&& echo ${SUBNET_NAME_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ SUBNET_NAME_PEERING="Peering Public Subnet" \
> && echo ${SUBNET_NAME_PEERING}
Peering Public Subnet

サブネットの作成

コマンド
aws ec2 create-subnet \
    --vpc-id ${VPC_ID_PEERING} \
    --cidr-block ${SUBNET_CIDR_BLOCK_PEERING} \
    --availability-zone ${AZ_PEERING} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_PEERING}}]"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID_PEERING} \
>     --cidr-block ${SUBNET_CIDR_BLOCK_PEERING} \
>     --availability-zone ${AZ_PEERING} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_PEERING}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "10.1.0.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-04dbf198dbe2b7e22",
        "VpcId": "vpc-08ef472fae4c3cb36",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "Peering Public Subnet"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-04dbf198dbe2b7e22",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}

サブネット IDの取得

コマンド
SUBNET_ID_PEERING=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
                Name=tag:Name,Values="${SUBNET_NAME_PEERING}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${SUBNET_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ SUBNET_ID_PEERING=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
>                 Name=tag:Name,Values="${SUBNET_NAME_PEERING}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${SUBNET_ID_PEERING}
subnet-04dbf198dbe2b7e22

サブネットのパブリックIPv4アドレス自動割り当ての有効化

コマンド
aws ec2 modify-subnet-attribute \
    --subnet-id ${SUBNET_ID_PEERING} \
    --map-public-ip-on-launch
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 modify-subnet-attribute \
>     --subnet-id ${SUBNET_ID_PEERING} \
>     --map-public-ip-on-launch

変数設定 (Internet Gateway名)

コマンド
INTERNET_GATEWAY_NAME_PEERING='Peering Internet Gateway' \
&& echo ${INTERNET_GATEWAY_NAME_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ INTERNET_GATEWAY_NAME_PEERING='Peering Internet Gateway' \
> && echo ${INTERNET_GATEWAY_NAME_PEERING}
Peering Internet Gateway

Internet Gateway作成

コマンド
aws ec2 create-internet-gateway \
  --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_PEERING}}]"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-internet-gateway \
>   --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_PEERING}}]"
{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-0637a9179907abef1",
        "OwnerId": "999999999999",
        "Tags": [
            {
                "Key": "Name",
                "Value": "Peering Internet Gateway"
            }
        ]
    }
}

変数設定 (Internet Gateway IDの取得)

コマンド
INTERNET_GATEWAY_ID_PEERING=$( \
  aws ec2 describe-internet-gateways \
      --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_PEERING}" \
      --query "InternetGateways[].InternetGatewayId" \
      --output text \
) \
&& echo ${INTERNET_GATEWAY_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ INTERNET_GATEWAY_ID_PEERING=$( \
>   aws ec2 describe-internet-gateways \
>       --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_PEERING}" \
>       --query "InternetGateways[].InternetGatewayId" \
>       --output text \
> ) \
> && echo ${INTERNET_GATEWAY_ID_PEERING}
igw-0637a9179907abef1

Internet GatewayをVPCにアタッチ

コマンド
aws ec2 attach-internet-gateway \
  --vpc-id ${VPC_ID_PEERING} \
  --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 attach-internet-gateway \
>   --vpc-id ${VPC_ID_PEERING} \
>   --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING}

変数設定 (パブリック ルートテーブル名)

コマンド
PUBLIC_ROUTE_NAME_PEERING='Peering Public Route Table' \
&& echo ${PUBLIC_ROUTE_NAME_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_NAME_PEERING='Peering Public Route Table' \
> && echo ${PUBLIC_ROUTE_NAME_PEERING}
Peering Public Route Table

パブリック ルートテーブル作成

コマンド
aws ec2 create-route-table \
    --vpc-id ${VPC_ID_PEERING} \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_PEERING}}]"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-route-table \
>     --vpc-id ${VPC_ID_PEERING} \
>     --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_PEERING}}]"
{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-0b8505a17014c04b3",
        "Routes": [
            {
                "DestinationCidrBlock": "10.1.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [
            {
                "Key": "Name",
                "Value": "Peering Public Route Table"
            }
        ],
        "VpcId": "vpc-08ef472fae4c3cb36",
        "OwnerId": "999999999999"
    },
    "ClientToken": "6393d87f-e093-4c02-8109-615ca0ca00d8"
}

変数設定 (パブリック ルートテーブルID取得)

コマンド
PUBLIC_ROUTE_ID_PEERING=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
                Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_PEERING}" \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PUBLIC_ROUTE_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_ID_PEERING=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
>                 Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_PEERING}" \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PUBLIC_ROUTE_ID_PEERING}
rtb-0b8505a17014c04b3

変数設定 (デフォルトルート指定)

コマンド
PUBLIC_ROUTE_DEFAULTROUTE_PEERING='0.0.0.0/0' \
&& echo ${PUBLIC_ROUTE_DEFAULTROUTE_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PUBLIC_ROUTE_DEFAULTROUTE_PEERING='0.0.0.0/0' \
> && echo ${PUBLIC_ROUTE_DEFAULTROUTE_PEERING}
0.0.0.0/0

デフォルトルート作成

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
    --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_PEERING} \
    --gateway-id ${INTERNET_GATEWAY_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
>     --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_PEERING} \
>     --gateway-id ${INTERNET_GATEWAY_ID_PEERING}
{
    "Return": true
}

変数設定 (メインルートテーブルID取得)

コマンド
PRIVATE_ROUTE_ID_PEERING=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
                Name=association.main,Values=true \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PRIVATE_ROUTE_ID_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PRIVATE_ROUTE_ID_PEERING=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
>                 Name=association.main,Values=true \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PRIVATE_ROUT

変数設定 (プライベート ルートテーブル名)

コマンド
PRIVATE_ROUTE_NAME_PEERING='Peering Private Route Table' \
&& echo ${PRIVATE_ROUTE_NAME_PEERING}
出力
[cloudshell-user@ip-10-132-77-191 ~]$ PRIVATE_ROUTE_NAME_PEERING='Peering Private Route Table' \
> && echo ${PRIVATE_ROUTE_NAME_PEERING}
Peering Private Route Table

メイン ルートテーブル名 変更

コマンド
aws ec2 create-tags \
    --resources ${PRIVATE_ROUTE_ID_PEERING} \
    --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_PEERING}"
出力
[cloudshell-user@ip-10-132-77-191 ~]$ aws ec2 create-tags \
>     --resources ${PRIVATE_ROUTE_ID_PEERING} \
>     --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_PEERING}"

パブリック ルートテーブルの関連付け

コマンド
aws ec2 associate-route-table \
  --subnet-id ${SUBNET_ID_PEERING} \
  --route-table-id ${PUBLIC_ROUTE_ID_PEERING}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 associate-route-table \
>   --subnet-id ${SUBNET_ID_PEERING} \
>   --route-table-id ${PUBLIC_ROUTE_ID_PEERING}
{
    "AssociationId": "rtbassoc-0ffbd9966965324a4",
    "AssociationState": {
        "State": "associated"
    }
}

3.ピアリング接続を作成&承諾する

変数設定 (ピアリング接続名)

コマンド
PEERING_CONNECTION_NAME='peering-handson' \
&& echo ${PEERING_CONNECTION_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PEERING_CONNECTION_NAME='peering-handson' \
> && echo ${PEERING_CONNECTION_NAME}
peering-handson

ピアリング接続を作成

コマンド
aws ec2 create-vpc-peering-connection \
    --vpc-id ${VPC_ID_MAIN} \
    --peer-vpc-id ${VPC_ID_PEERING} \
    --tag-specifications "ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=${PEERING_CONNECTION_NAME}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-vpc-peering-connection \
>     --vpc-id ${VPC_ID_MAIN} \
>     --peer-vpc-id ${VPC_ID_PEERING} \
>     --tag-specifications "ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=${PEERING_CONNECTION_NAME}}]"
{
    "VpcPeeringConnection": {
        "AccepterVpcInfo": {
            "OwnerId": "999999999999",
            "VpcId": "vpc-08ef472fae4c3cb36",
            "Region": "ap-northeast-1"
        },
        "ExpirationTime": "2024-06-16T01:00:33+00:00",
        "RequesterVpcInfo": {
            "CidrBlock": "10.0.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.0.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-044f0a97b7e8a476a",
            "Region": "ap-northeast-1"
        },
        "Status": {
            "Code": "initiating-request",
            "Message": "Initiating Request to 999999999999"
        },
        "Tags": [
            {
                "Key": "Name",
                "Value": "peering-handson"
            }
        ],
        "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
    }
}

変数設定 (ピアリング接続ID取得)

コマンド
PEERING_CONNECTION_ID=$(aws ec2 describe-vpc-peering-connections \
    --filters Name=tag:Name,Values="${PEERING_CONNECTION_NAME}" \
    --query "VpcPeeringConnections[].VpcPeeringConnectionId" \
    --output text)\
&& echo ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PEERING_CONNECTION_ID=$(aws ec2 describe-vpc-peering-connections \
>     --filters Name=tag:Name,Values="${PEERING_CONNECTION_NAME}" \
>     --query "VpcPeeringConnections[].VpcPeeringConnectionId" \
>     --output text)\
> && echo ${PEERING_CONNECTION_ID}
pcx-08504013baf5ee54c

VPCピアリング接続の承認

コマンド
aws ec2 accept-vpc-peering-connection \
    --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 accept-vpc-peering-connection \
>     --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
{
    "VpcPeeringConnection": {
        "AccepterVpcInfo": {
            "CidrBlock": "10.1.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.1.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-08ef472fae4c3cb36",
            "Region": "ap-northeast-1"
        },
        "RequesterVpcInfo": {
            "CidrBlock": "10.0.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.0.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-044f0a97b7e8a476a",
            "Region": "ap-northeast-1"
        },
        "Status": {
            "Code": "provisioning",
            "Message": "Provisioning"
        },
        "Tags": [],
        "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
    }
}

4.ピアリング接続⽤VPCのルートテーブルを更新する

ルートテーブル更新

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
    --gateway-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
>     --gateway-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

ルーティングテーブル確認

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0de8129a171b7848b",
                    "RouteTableId": "rtb-0af5a214697f87fa4",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0af5a214697f87fa4",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Private Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0ffbd9966965324a4",
                    "RouteTableId": "rtb-0b8505a17014c04b3",
                    "SubnetId": "subnet-04dbf198dbe2b7e22",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0b8505a17014c04b3",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "active",
                    "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-0637a9179907abef1",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Public Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        }
    ]
}

5.メインVPCのルートテーブルを更新する

ルートテーブル更新

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING} \
    --gateway-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING} \
>     --gateway-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

ルーティングテーブル確認

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-08a0f3e7e390bf6c7",
                    "RouteTableId": "rtb-022300aa94b5b1e97",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-022300aa94b5b1e97",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Private Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0815f3e455e0ea7d4",
                    "RouteTableId": "rtb-06294855aa51d5273",
                    "SubnetId": "subnet-0e332a080d5517d6b",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-06294855aa51d5273",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "active",
                    "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-068f3e7ffa0776661",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Public Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        }
    ]
}

6.ピアリング接続⽤VPCにEC2を作成

変数設定 (セキュリティグループ名)

コマンド
EC2_SECURITY_GROUP_NAME='peering' \
&& echo ${EC2_SECURITY_GROUP_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ EC2_SECURITY_GROUP_NAME='peering' \
> && echo ${EC2_SECURITY_GROUP_NAME}
peering

変数設定 (セキュリティグループ説明)

コマンド
EC2_SECURITY_GROUP_DESCRIPTION='peering' \
&& echo ${EC2_SECURITY_GROUP_DESCRIPTION}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ EC2_SECURITY_GROUP_DESCRIPTION='peering' \
> && echo ${EC2_SECURITY_GROUP_DESCRIPTION}
peering

セキュリティグループ作成

コマンド
aws ec2 create-security-group \
  --group-name ${EC2_SECURITY_GROUP_NAME} \
  --description "${EC2_SECURITY_GROUP_DESCRIPTION}" \
  --vpc-id ${VPC_ID_PEERING}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-security-group \
>   --group-name ${EC2_SECURITY_GROUP_NAME} \
>   --description "${EC2_SECURITY_GROUP_DESCRIPTION}" \
>   --vpc-id ${VPC_ID_PEERING}
{
    "GroupId": "sg-0ba7ed8e0caa563ac"
}

変数設定 (セキュリティグループID取得)

コマンド
EC2_SECURITY_GROUP_ID=$( \
  aws ec2 describe-security-groups \
    --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
              Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
    --query "SecurityGroups[].GroupId" \
    --output text \
) \
&& echo ${EC2_SECURITY_GROUP_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ EC2_SECURITY_GROUP_ID=$( \
>   aws ec2 describe-security-groups \
>     --filters Name=vpc-id,Values=${VPC_ID_PEERING} \
>               Name=group-name,Values=${EC2_SECURITY_GROUP_NAME} \
>     --query "SecurityGroups[].GroupId" \
>     --output text \
> ) \
> && echo ${EC2_SECURITY_GROUP_ID}
sg-0ba7ed8e0caa563ac

セキュリティグループ ルール追加

コマンド
aws ec2 authorize-security-group-ingress \
    --group-id ${EC2_SECURITY_GROUP_ID} \
    --protocol -1 \
    --cidr ${VPC_CIDR_BLOCK_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${EC2_SECURITY_GROUP_ID} \
>     --protocol -1 \
>     --cidr ${VPC_CIDR_BLOCK_MAIN}
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-03d76773b358bf99e",
            "GroupId": "sg-0ba7ed8e0caa563ac",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "-1",
            "FromPort": -1,
            "ToPort": -1,
            "CidrIpv4": "10.0.0.0/16"
        }
    ]
}

変数設定 (EC2名)

コマンド
EC2_NAME_PEERING='Peering' \
&& echo ${EC2_NAME_PEERING}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ EC2_NAME_PEERING='Peering' \
> && echo ${EC2_NAME_PEERING}
Peering

変数設定 (プライベートIP)

コマンド
EC2_PRIVATE_IP='10.1.0.100' \
&& echo ${EC2_PRIVATE_IP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ EC2_PRIVATE_IP='10.1.0.100' \
> && echo ${EC2_PRIVATE_IP}
10.1.0.100

パブリック EC2作成

コマンド
aws ec2 run-instances \
  --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
  --instance-type t2.micro \
  --security-group-ids ${EC2_SECURITY_GROUP_ID} \
  --subnet-id ${SUBNET_ID_PEERING} \
  --private-ip-address ${EC2_PRIVATE_IP} \
  --no-associate-public-ip-address \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=Peering}]'
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 run-instances \
>   --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
>   --instance-type t2.micro \
>   --security-group-ids ${EC2_SECURITY_GROUP_ID} \
>   --subnet-id ${SUBNET_ID_PEERING} \
>   --private-ip-address ${EC2_PRIVATE_IP} \
>   --no-associate-public-ip-address \
>   --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=Peering}]'
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-057086e4e77484a4a",
            "InstanceId": "i-0493671798dbd6f07",
            "InstanceType": "t2.micro",
            "LaunchTime": "2024-06-09T03:09:21+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-10-1-0-100.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "10.1.0.100",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-04dbf198dbe2b7e22",
            "VpcId": "vpc-08ef472fae4c3cb36",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "918731fc-cc9d-44a8-8276-f7e2f19cf99c",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2024-06-09T03:09:21+00:00",
                        "AttachmentId": "eni-attach-099d4e2fa7bfe5679",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching",
                        "NetworkCardIndex": 0
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "peering",
                            "GroupId": "sg-0ba7ed8e0caa563ac"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:d3:bd:05:9d:d3",
                    "NetworkInterfaceId": "eni-00d972a168497d87a",
                    "OwnerId": "999999999999",
                    "PrivateIpAddress": "10.1.0.100",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "10.1.0.100"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-04dbf198dbe2b7e22",
                    "VpcId": "vpc-08ef472fae4c3cb36",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "peering",
                    "GroupId": "sg-0ba7ed8e0caa563ac"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering"
                }
            ],
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled",
                "HttpProtocolIpv6": "disabled",
                "InstanceMetadataTags": "disabled"
            },
            "EnclaveOptions": {
                "Enabled": false
            },
            "PrivateDnsNameOptions": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "MaintenanceOptions": {
                "AutoRecovery": "default"
            },
            "CurrentInstanceBootMode": "legacy-bios"
        }
    ],
    "OwnerId": "999999999999",
    "ReservationId": "r-0c54a7aa6a4e8a7d9"
}

7.メインVPCにCloud9を作成

変数設定 (Cloud9名)

コマンド
CLOUD9_NAME='handson' \
&& echo ${CLOUD9_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ CLOUD9_NAME='handson' \
> && echo ${CLOUD9_NAME}
handson

Cloud9環境の作成

コマンド
aws cloud9 create-environment-ec2 \
    --name ${CLOUD9_NAME} \
    --instance-type t2.micro \
    --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
    --connection-type CONNECT_SSM \
    --automatic-stop-time-minutes 30 \
    --subnet-id ${SUBNET_ID_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws cloud9 create-environment-ec2 \
>     --name ${CLOUD9_NAME} \
>     --instance-type t2.micro \
>     --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
>     --connection-type CONNECT_SSM \
>     --automatic-stop-time-minutes 30 \
>     --subnet-id ${SUBNET_ID_MAIN}
{
    "environmentId": "b49e70dac3ce4fd7a037a3285ef93f8b"
}

8.VPCピアリング接続 疎通確認

Cloud9 IPアドレス確認

コマンド
ip address show
出力
admin:~/environment $ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:1e:48:f6:6d:8b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.240/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 3442sec preferred_lft 3442sec
    inet6 fe80::41e:48ff:fef6:6d8b/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:27:fe:1a:9e brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever

疎通確認

コマンド
ping 10.1.0.100
出力
admin:~/environment $ ping 10.1.0.100
PING 10.1.0.100 (10.1.0.100) 56(84) bytes of data.
64 bytes from 10.1.0.100: icmp_seq=1 ttl=255 time=0.954 ms
64 bytes from 10.1.0.100: icmp_seq=2 ttl=255 time=0.428 ms
64 bytes from 10.1.0.100: icmp_seq=3 ttl=255 time=0.518 ms
64 bytes from 10.1.0.100: icmp_seq=4 ttl=255 time=0.448 ms
^C
--- 10.1.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3029ms
rtt min/avg/max/mdev = 0.428/0.587/0.954/0.214 ms

VPCピアリングの削除

コマンド
aws ec2 delete-vpc-peering-connection \
    --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 delete-vpc-peering-connection \
>     --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

疎通確認 (VPCピアリング削除後)

コマンド
ping 10.1.0.100
出力
PING 10.1.0.100 (10.1.0.100) 56(84) bytes of data.
^C
--- 10.1.0.100 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7147ms

ルーティングテーブル確認 (VPCピアリング削除後)

メインVPC

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-08a0f3e7e390bf6c7",
                    "RouteTableId": "rtb-022300aa94b5b1e97",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-022300aa94b5b1e97",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Private Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0815f3e455e0ea7d4",
                    "RouteTableId": "rtb-06294855aa51d5273",
                    "SubnetId": "subnet-0e332a080d5517d6b",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-06294855aa51d5273",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "blackhole",
                    "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-068f3e7ffa0776661",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Public Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        }
    ]
}

ピアリングVPC

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0de8129a171b7848b",
                    "RouteTableId": "rtb-0af5a214697f87fa4",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0af5a214697f87fa4",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Private Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0ffbd9966965324a4",
                    "RouteTableId": "rtb-0b8505a17014c04b3",
                    "SubnetId": "subnet-04dbf198dbe2b7e22",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0b8505a17014c04b3",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "blackhole",
                    "VpcPeeringConnectionId": "pcx-08504013baf5ee54c"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-0637a9179907abef1",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Public Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        }
    ]
}

VPCピアリング接続復旧

変数設定 (ピアリング接続名)

コマンド
PEERING_CONNECTION_NAME='handson' \
&& echo ${PEERING_CONNECTION_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PEERING_CONNECTION_NAME='handson' \
> && echo ${PEERING_CONNECTION_NAME}
handson

ピアリング接続を作成

コマンド
aws ec2 create-vpc-peering-connection \
    --vpc-id ${VPC_ID_MAIN} \
    --peer-vpc-id ${VPC_ID_PEERING} \
    --tag-specifications "ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=${PEERING_CONNECTION_NAME}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-vpc-peering-connection \
>     --vpc-id ${VPC_ID_MAIN} \
>     --peer-vpc-id ${VPC_ID_PEERING} \
>     --tag-specifications "ResourceType=vpc-peering-connection,Tags=[{Key=Name,Value=${PEERING_CONNECTION_NAME}}]"
{
    "VpcPeeringConnection": {
        "AccepterVpcInfo": {
            "OwnerId": "999999999999",
            "VpcId": "vpc-08ef472fae4c3cb36",
            "Region": "ap-northeast-1"
        },
        "ExpirationTime": "2024-06-16T04:37:27+00:00",
        "RequesterVpcInfo": {
            "CidrBlock": "10.0.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.0.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-044f0a97b7e8a476a",
            "Region": "ap-northeast-1"
        },
        "Status": {
            "Code": "initiating-request",
            "Message": "Initiating Request to 999999999999"
        },
        "Tags": [
            {
                "Key": "Name",
                "Value": "handson"
            }
        ],
        "VpcPeeringConnectionId": "pcx-0c1944c75b00e0912"
    }
}

変数設定 (ピアリング接続ID取得)

コマンド
PEERING_CONNECTION_ID=$(aws ec2 describe-vpc-peering-connections \
    --filters Name=tag:Name,Values="${PEERING_CONNECTION_NAME}" \
    --query "VpcPeeringConnections[].VpcPeeringConnectionId" \
    --output text)\
&& echo ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PEERING_CONNECTION_ID=$(aws ec2 describe-vpc-peering-connections \
>     --filters Name=tag:Name,Values="${PEERING_CONNECTION_NAME}" \
>     --query "VpcPeeringConnections[].VpcPeeringConnectionId" \
>     --output text)\
> && echo ${PEERING_CONNECTION_ID}
pcx-0c1944c75b00e0912

VPCピアリング接続の承認

コマンド
aws ec2 accept-vpc-peering-connection \
    --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 accept-vpc-peering-connection \
>     --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
{
    "VpcPeeringConnection": {
        "AccepterVpcInfo": {
            "CidrBlock": "10.1.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.1.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-08ef472fae4c3cb36",
            "Region": "ap-northeast-1"
        },
        "RequesterVpcInfo": {
            "CidrBlock": "10.0.0.0/16",
            "CidrBlockSet": [
                {
                    "CidrBlock": "10.0.0.0/16"
                }
            ],
            "OwnerId": "999999999999",
            "PeeringOptions": {
                "AllowDnsResolutionFromRemoteVpc": false,
                "AllowEgressFromLocalClassicLinkToRemoteVpc": false,
                "AllowEgressFromLocalVpcToRemoteClassicLink": false
            },
            "VpcId": "vpc-044f0a97b7e8a476a",
            "Region": "ap-northeast-1"
        },
        "Status": {
            "Code": "provisioning",
            "Message": "Provisioning"
        },
        "Tags": [],
        "VpcPeeringConnectionId": "pcx-0c1944c75b00e0912"
    }
}

ルートテーブル削除 (メインVPC)

コマンド
aws ec2 delete-route \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 delete-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING}

ルートテーブル追加 (メインVPC)

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING} \
    --gateway-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_PEERING} \
>     --gateway-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

ルーティングテーブル確認 (メインVPC)

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-08a0f3e7e390bf6c7",
                    "RouteTableId": "rtb-022300aa94b5b1e97",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-022300aa94b5b1e97",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Private Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0815f3e455e0ea7d4",
                    "RouteTableId": "rtb-06294855aa51d5273",
                    "SubnetId": "subnet-0e332a080d5517d6b",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-06294855aa51d5273",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "active",
                    "VpcPeeringConnectionId": "pcx-0c1944c75b00e0912"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-068f3e7ffa0776661",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Public Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        }
    ]
}

ルートテーブル削除 (ピアリングVPC)

コマンド
aws ec2 delete-route \
    --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 delete-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN}

ルートテーブル追加 (ピアリングVPC)

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
    --gateway-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_PEERING} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
>     --gateway-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

ルーティングテーブル確認 (ピアリングVPC)

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_PEERING}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0de8129a171b7848b",
                    "RouteTableId": "rtb-0af5a214697f87fa4",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0af5a214697f87fa4",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Private Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0ffbd9966965324a4",
                    "RouteTableId": "rtb-0b8505a17014c04b3",
                    "SubnetId": "subnet-04dbf198dbe2b7e22",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0b8505a17014c04b3",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "active",
                    "VpcPeeringConnectionId": "pcx-0c1944c75b00e0912"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-0637a9179907abef1",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Peering Public Route Table"
                }
            ],
            "VpcId": "vpc-08ef472fae4c3cb36",
            "OwnerId": "999999999999"
        }
    ]
}

疎通確認 (復旧後)

コマンド
ping 10.1.0.100
出力
admin:~/environment $ ping 10.1.0.100
PING 10.1.0.100 (10.1.0.100) 56(84) bytes of data.
64 bytes from 10.1.0.100: icmp_seq=1 ttl=255 time=0.386 ms
64 bytes from 10.1.0.100: icmp_seq=2 ttl=255 time=0.487 ms
64 bytes from 10.1.0.100: icmp_seq=3 ttl=255 time=0.541 ms
64 bytes from 10.1.0.100: icmp_seq=4 ttl=255 time=0.462 ms
^C
--- 10.1.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3049ms
rtt min/avg/max/mdev = 0.386/0.469/0.541/0.055 ms

9.オンプレ想定VPCを作成する

変数設定 (IPv4 VPC CIDR block)

コマンド
VPC_CIDR_BLOCK_ONP="192.168.0.0/16" \
&& echo ${VPC_CIDR_BLOCK_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VPC_CIDR_BLOCK_ONP="192.168.0.0/16" \
> && echo ${VPC_CIDR_BLOCK_ONP}
192.168.0.0/16

変数設定 (VPC名)

コマンド
VPC_NAME_ONP="OnP VPC" \
&& echo ${VPC_NAME_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VPC_NAME_ONP="OnP VPC" \
> && echo ${VPC_NAME_ONP}
OnP VPC

VPC 作成

コマンド
aws ec2 create-vpc \
    --cidr-block ${VPC_CIDR_BLOCK_ONP} \
    --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_ONP}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-vpc \
>     --cidr-block ${VPC_CIDR_BLOCK_ONP} \
>     --tag-specifications "ResourceType=vpc,Tags=[{Key=Name,Value=${VPC_NAME_ONP}}]"
{
    "Vpc": {
        "CidrBlock": "192.168.0.0/16",
        "DhcpOptionsId": "dopt-0e7d97fbb33a62ce1",
        "State": "pending",
        "VpcId": "vpc-0c34ac37fdf3439c2",
        "OwnerId": "999999999999",
        "InstanceTenancy": "default",
        "Ipv6CidrBlockAssociationSet": [],
        "CidrBlockAssociationSet": [
            {
                "AssociationId": "vpc-cidr-assoc-0fb75ac9ecc76b5e6",
                "CidrBlock": "192.168.0.0/16",
                "CidrBlockState": {
                    "State": "associated"
                }
            }
        ],
        "IsDefault": false,
        "Tags": [
            {
                "Key": "Name",
                "Value": "OnP VPC"
            }
        ]
    }
}

VPC IDの取得

コマンド
VPC_ID_ONP=$( \
    aws ec2 describe-vpcs \
        --filters "Name=tag:Name,Values=${VPC_NAME_ONP}" \
        --query "Vpcs[0].VpcId" \
        --output text\
)\
&& echo ${VPC_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VPC_ID_ONP=$( \
>     aws ec2 describe-vpcs \
>         --filters "Name=tag:Name,Values=${VPC_NAME_ONP}" \
>         --query "Vpcs[0].VpcId" \
>         --output text\
> )\
> && echo ${VPC_ID_ONP}
vpc-0c34ac37fdf3439c2

変数設定 (IPv4 Public CIDR block)

コマンド
SUBNET_CIDR_BLOCK_ONP="192.168.0.0/24" \
&& echo ${SUBNET_CIDR_BLOCK_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ SUBNET_CIDR_BLOCK_ONP="192.168.0.0/24" \
> && echo ${SUBNET_CIDR_BLOCK_ONP}
192.168.0.0/24

変数設定 (アベイラビリティゾーン)

コマンド
AZ_ONP="ap-northeast-1a" \
&& echo ${AZ_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ AZ_ONP="ap-northeast-1a" \
> && echo ${AZ_ONP}
ap-northeast-1a

変数設定 (サブネット名)

コマンド
SUBNET_NAME_ONP="OnP Public Subnet" \
&& echo ${SUBNET_NAME_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ SUBNET_NAME_ONP="OnP Public Subnet" \
> && echo ${SUBNET_NAME_ONP}
OnP Public Subnet

サブネットの作成

コマンド
aws ec2 create-subnet \
    --vpc-id ${VPC_ID_ONP} \
    --cidr-block ${SUBNET_CIDR_BLOCK_ONP} \
    --availability-zone ${AZ_ONP} \
    --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_ONP}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-subnet \
>     --vpc-id ${VPC_ID_ONP} \
>     --cidr-block ${SUBNET_CIDR_BLOCK_ONP} \
>     --availability-zone ${AZ_ONP} \
>     --tag-specifications "ResourceType=subnet,Tags=[{Key=Name,Value=${SUBNET_NAME_ONP}}]"
{
    "Subnet": {
        "AvailabilityZone": "ap-northeast-1a",
        "AvailabilityZoneId": "apne1-az4",
        "AvailableIpAddressCount": 251,
        "CidrBlock": "192.168.0.0/24",
        "DefaultForAz": false,
        "MapPublicIpOnLaunch": false,
        "State": "available",
        "SubnetId": "subnet-083066e22334ecd5e",
        "VpcId": "vpc-0c34ac37fdf3439c2",
        "OwnerId": "999999999999",
        "AssignIpv6AddressOnCreation": false,
        "Ipv6CidrBlockAssociationSet": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "OnP Public Subnet"
            }
        ],
        "SubnetArn": "arn:aws:ec2:ap-northeast-1:999999999999:subnet/subnet-083066e22334ecd5e",
        "EnableDns64": false,
        "Ipv6Native": false,
        "PrivateDnsNameOptionsOnLaunch": {
            "HostnameType": "ip-name",
            "EnableResourceNameDnsARecord": false,
            "EnableResourceNameDnsAAAARecord": false
        }
    }
}

サブネット IDの取得

コマンド
SUBNET_ID_ONP=$( \
    aws ec2 describe-subnets \
      --filters Name=vpc-id,Values=${VPC_ID_ONP} \
                Name=tag:Name,Values="${SUBNET_NAME_ONP}" \
      --query "Subnets[].SubnetId" \
      --output text \
) \
&& echo ${SUBNET_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ SUBNET_ID_ONP=$( \
>     aws ec2 describe-subnets \
>       --filters Name=vpc-id,Values=${VPC_ID_ONP} \
>                 Name=tag:Name,Values="${SUBNET_NAME_ONP}" \
>       --query "Subnets[].SubnetId" \
>       --output text \
> ) \
> && echo ${SUBNET_ID_ONP}
subnet-083066e22334ecd5e

サブネットのパブリックIPv4アドレス自動割り当ての有効化

コマンド
aws ec2 modify-subnet-attribute \
    --subnet-id ${SUBNET_ID_ONP} \
    --map-public-ip-on-launch
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 modify-subnet-attribute \
>     --subnet-id ${SUBNET_ID_ONP} \
>     --map-public-ip-on-launch

変数設定 (Internet Gateway名)

コマンド
INTERNET_GATEWAY_NAME_ONP='OnP Internet Gateway' \
&& echo ${INTERNET_GATEWAY_NAME_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ INTERNET_GATEWAY_NAME_ONP='OnP Internet Gateway' \
> && echo ${INTERNET_GATEWAY_NAME_ONP}
OnP Internet Gateway

Internet Gateway作成

コマンド
aws ec2 create-internet-gateway \
  --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_ONP}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-internet-gateway \
>   --tag-specifications "ResourceType=internet-gateway,Tags=[{Key=Name,Value=${INTERNET_GATEWAY_NAME_ONP}}]"
{
    "InternetGateway": {
        "Attachments": [],
        "InternetGatewayId": "igw-07d90ca57c38f8118",
        "OwnerId": "999999999999",
        "Tags": [
            {
                "Key": "Name",
                "Value": "OnP Internet Gateway"
            }
        ]
    }
}

変数設定 (Internet Gateway IDの取得)

コマンド
INTERNET_GATEWAY_ID_ONP=$( \
  aws ec2 describe-internet-gateways \
      --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_ONP}" \
      --query "InternetGateways[].InternetGatewayId" \
      --output text \
) \
&& echo ${INTERNET_GATEWAY_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ INTERNET_GATEWAY_ID_ONP=$( \
>   aws ec2 describe-internet-gateways \
>       --filters Name=tag:Name,Values="${INTERNET_GATEWAY_NAME_ONP}" \
>       --query "InternetGateways[].InternetGatewayId" \
>       --output text \
> ) \
> && echo ${INTERNET_GATEWAY_ID_ONP}
igw-07d90ca57c38f8118

Internet GatewayをVPCにアタッチ

コマンド
aws ec2 attach-internet-gateway \
  --vpc-id ${VPC_ID_ONP} \
  --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 attach-internet-gateway \
>   --vpc-id ${VPC_ID_ONP} \
>   --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP}

変数設定 (パブリック ルートテーブル名)

コマンド
PUBLIC_ROUTE_NAME_ONP='OnP Public Route Table' \
&& echo ${PUBLIC_ROUTE_NAME_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PUBLIC_ROUTE_NAME_ONP='OnP Public Route Table' \
> && echo ${PUBLIC_ROUTE_NAME_ONP}
OnP Public Route Table

パブリック ルートテーブル作成

コマンド
aws ec2 create-route-table \
    --vpc-id ${VPC_ID_ONP} \
    --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_ONP}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route-table \
>     --vpc-id ${VPC_ID_ONP} \
>     --tag-specifications "ResourceType=route-table,Tags=[{Key=Name,Value=${PUBLIC_ROUTE_NAME_ONP}}]"
{
    "RouteTable": {
        "Associations": [],
        "PropagatingVgws": [],
        "RouteTableId": "rtb-0935aafd7f8fa7475",
        "Routes": [
            {
                "DestinationCidrBlock": "192.168.0.0/16",
                "GatewayId": "local",
                "Origin": "CreateRouteTable",
                "State": "active"
            }
        ],
        "Tags": [
            {
                "Key": "Name",
                "Value": "OnP Public Route Table"
            }
        ],
        "VpcId": "vpc-0c34ac37fdf3439c2",
        "OwnerId": "999999999999"
    },
    "ClientToken": "9e3db242-f854-4300-85d6-9fab5dc22216"
}

変数設定 (パブリック ルートテーブルID取得)

コマンド
PUBLIC_ROUTE_ID_ONP=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_ONP} \
                Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_ONP}" \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PUBLIC_ROUTE_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PUBLIC_ROUTE_ID_ONP=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_ONP} \
>                 Name=tag:Name,Values="${PUBLIC_ROUTE_NAME_ONP}" \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PUBLIC_ROUTE_ID_ONP}
rtb-0935aafd7f8fa7475

変数設定 (デフォルトルート指定)

コマンド
PUBLIC_ROUTE_DEFAULTROUTE_ONP='0.0.0.0/0' \
&& echo ${PUBLIC_ROUTE_DEFAULTROUTE_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PUBLIC_ROUTE_DEFAULTROUTE_ONP='0.0.0.0/0' \
> && echo ${PUBLIC_ROUTE_DEFAULTROUTE_ONP}
0.0.0.0/0

デフォルトルート作成

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_ONP} \
    --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_ONP} \
    --gateway-id ${INTERNET_GATEWAY_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_ONP} \
>     --destination-cidr-block ${PUBLIC_ROUTE_DEFAULTROUTE_ONP} \
>     --gateway-id ${INTERNET_GATEWAY_ID_ONP}
{
    "Return": true
}

変数設定 (オンプレルートテーブルID取得)

コマンド
PRIVATE_ROUTE_ID_ONP=$( \
    aws ec2 describe-route-tables \
      --filters Name=vpc-id,Values=${VPC_ID_ONP} \
                Name=association.main,Values=true \
      --query "RouteTables[].RouteTableId" \
      --output text \
) \
&& echo ${PRIVATE_ROUTE_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PRIVATE_ROUTE_ID_ONP=$( \
>     aws ec2 describe-route-tables \
>       --filters Name=vpc-id,Values=${VPC_ID_ONP} \
>                 Name=association.main,Values=true \
>       --query "RouteTables[].RouteTableId" \
>       --output text \
> ) \
> && echo ${PRIVATE_ROUTE_ID_ONP}
rtb-08ad96035db244af9

変数設定 (プライベート ルートテーブル名)

コマンド
PRIVATE_ROUTE_NAME_ONP='OnP Private Route Table' \
&& echo ${PRIVATE_ROUTE_NAME_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ PRIVATE_ROUTE_NAME_ONP='OnP Private Route Table' \
> && echo ${PRIVATE_ROUTE_NAME_ONP}
OnP Private Route Table

パブリック ルートテーブル名 変更

コマンド
aws ec2 create-tags \
    --resources ${PRIVATE_ROUTE_ID_ONP} \
    --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_ONP}"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-tags \
>     --resources ${PRIVATE_ROUTE_ID_ONP} \
>     --tags Key=Name,Value="${PRIVATE_ROUTE_NAME_ONP}"

パブリック ルートテーブルの関連付け

コマンド
aws ec2 associate-route-table \
  --subnet-id ${SUBNET_ID_ONP} \
  --route-table-id ${PUBLIC_ROUTE_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 associate-route-table \
>   --subnet-id ${SUBNET_ID_ONP} \
>   --route-table-id ${PUBLIC_ROUTE_ID_ONP}
{
    "AssociationId": "rtbassoc-03f2f49cc1dc05681",
    "AssociationState": {
        "State": "associated"
    }
}

変数設定 (キーペア名)

コマンド
KEY_PAIR_NAME='handson' \
&& echo ${KEY_PAIR_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ KEY_PAIR_NAME='handson' \
> && echo ${KEY_PAIR_NAME}
handson

キーペア作成

コマンド
aws ec2 create-key-pair \
    --key-name ${KEY_PAIR_NAME} \
    --query 'KeyMaterial' \
    --output text > ${KEY_PAIR_NAME}.pem
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-key-pair \
>     --key-name ${KEY_PAIR_NAME} \
>     --query 'KeyMaterial' \
>     --output text > ${KEY_PAIR_NAME}.pem

変数設定 (マーケットプレイス名)

出力
MARKETPLACE_NAME="VyOS 1.3.6" \
&& echo ${MARKETPLACE_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ MARKETPLACE_NAME="VyOS 1.3.6" \
> && echo ${MARKETPLACE_NAME}
VyOS 1.3.6

変数設定 (マーケットプレイスAMI)

出力
MARKETPLACE_AMI=$( \
    aws ec2 describe-images \
        --filters "Name=name,Values=*${MARKETPLACE_NAME}*" \
        --query "Images[*].[ImageId]" \
        --output text
) \
&& echo ${MARKETPLACE_AMI}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ MARKETPLACE_AMI=$( \
>     aws ec2 describe-images \
>         --filters "Name=name,Values=*${MARKETPLACE_NAME}*" \
>         --query "Images[*].[ImageId]" \
>         --output text
> ) \
> && echo ${MARKETPLACE_AMI}
ami-0e4c3f448b872d874

変数設定 (マーケットプレイスプロダクトコード)

コマンド
MARKETPLACE_PRODUCT_CODE=$( \
    aws ec2 describe-images \
        --filters "Name=name,Values=*${MARKETPLACE_NAME}*" \
        --query "Images[*].ProductCodes[*].[ProductCodeId]" \
        --output text
) \
出力
[cloudshell-user@ip-10-134-25-38 ~]$ MARKETPLACE_PRODUCT_CODE=$( \
>     aws ec2 describe-images \
>         --filters "Name=name,Values=*${MARKETPLACE_NAME}*" \
>         --query "Images[*].ProductCodes[*].[ProductCodeId]" \
>         --output text
> ) \
> && echo ${MARKETPLACE_PRODUCT_CODE}
8wqdkv3u2b9sa0y73xob2yl90

変数設定 (インスタンスタイプ)

コマンド
INSTANCE_TYPE="c5n.large" \
&& echo ${INSTANCE_TYPE}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ INSTANCE_TYPE="c5n.large" \
> && echo ${INSTANCE_TYPE}
c5n.large

変数設定 (EC2名)

コマンド
ONP_EC2_NAME='CGW' \
&& echo ${ONP_EC2_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_NAME='CGW' \
> && echo ${ONP_EC2_NAME}
CGW

変数設定 (プライベートIP)

コマンド
ONP_EC2_PRIVATE_IP='192.168.0.200' \
&& echo ${ONP_EC2_PRIVATE_IP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_PRIVATE_IP='192.168.0.200' \
> && echo ${ONP_EC2_PRIVATE_IP}
192.168.0.200

変数設定 (セキュリティグループ名)

コマンド
ONP_EC2_SECURITY_GROUP_NAME='cgw' \
&& echo ${ONP_EC2_SECURITY_GROUP_NAME}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_SECURITY_GROUP_NAME='cgw' \
> && echo ${ONP_EC2_SECURITY_GROUP_NAME}
cgw

変数設定 (セキュリティグループ説明)

コマンド
ONP_EC2_SECURITY_GROUP_DESCRIPTION='cgw' \
&& echo ${ONP_EC2_SECURITY_GROUP_DESCRIPTION}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_SECURITY_GROUP_DESCRIPTION='cgw' \
> && echo ${ONP_EC2_SECURITY_GROUP_DESCRIPTION}
cgw

セキュリティグループ作成

コマンド
aws ec2 create-security-group \
  --group-name ${ONP_EC2_SECURITY_GROUP_NAME} \
  --description "${ONP_EC2_SECURITY_GROUP_DESCRIPTION}" \
  --vpc-id ${VPC_ID_ONP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-security-group \
>   --group-name ${ONP_EC2_SECURITY_GROUP_NAME} \
>   --description "${ONP_EC2_SECURITY_GROUP_DESCRIPTION}" \
>   --vpc-id ${VPC_ID_ONP}
{
    "GroupId": "sg-07cc13eac10970d9e"
}

変数設定 (セキュリティグループID取得)

コマンド
ONP_EC2_SECURITY_GROUP_ID=$( \
  aws ec2 describe-security-groups \
    --filters Name=vpc-id,Values=${VPC_ID_ONP} \
              Name=group-name,Values=${ONP_EC2_SECURITY_GROUP_NAME} \
    --query "SecurityGroups[].GroupId" \
    --output text \
) \
&& echo ${ONP_EC2_SECURITY_GROUP_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_SECURITY_GROUP_ID=$( \
>   aws ec2 describe-security-groups \
>     --filters Name=vpc-id,Values=${VPC_ID_ONP} \
>               Name=group-name,Values=${ONP_EC2_SECURITY_GROUP_NAME} \
>     --query "SecurityGroups[].GroupId" \
>     --output text \
> ) \
> && echo ${ONP_EC2_SECURITY_GROUP_ID}
sg-07cc13eac10970d9e

セキュリティグループ ルール追加

コマンド
aws ec2 authorize-security-group-ingress \
    --group-id ${ONP_EC2_SECURITY_GROUP_ID} \
    --protocol tcp \
    --port 22 \
    --cidr 0.0.0.0/0
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${ONP_EC2_SECURITY_GROUP_ID} \
>     --protocol tcp \
>     --port 22 \
>     --cidr 0.0.0.0/0
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-00e66b44f88276f4e",
            "GroupId": "sg-07cc13eac10970d9e",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "tcp",
            "FromPort": 22,
            "ToPort": 22,
            "CidrIpv4": "0.0.0.0/0"
        }
    ]
}

EC2作成

コマンド
aws ec2 run-instances \
    --image-id ${MARKETPLACE_AMI} \
    --instance-type ${INSTANCE_TYPE} \
    --key-name ${KEY_PAIR_NAME} \
    --security-group-ids ${ONP_EC2_SECURITY_GROUP_ID} \
    --subnet-id ${SUBNET_ID_ONP} \
    --private-ip-address ${ONP_EC2_PRIVATE_IP} \
    --associate-public-ip-address \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${ONP_EC2_NAME}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 run-instances \
>     --image-id ${MARKETPLACE_AMI} \
>     --instance-type ${INSTANCE_TYPE} \
>     --key-name ${KEY_PAIR_NAME} \
>     --security-group-ids ${ONP_EC2_SECURITY_GROUP_ID} \
>     --subnet-id ${SUBNET_ID_ONP} \
>     --private-ip-address ${ONP_EC2_PRIVATE_IP} \
>     --associate-public-ip-address \
>     --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${ONP_EC2_NAME}}]"
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-0e4c3f448b872d874",
            "InstanceId": "i-0c5e77f5aa0d68f78",
            "InstanceType": "c5n.large",
            "KeyName": "handson",
            "LaunchTime": "2024-06-09T09:51:14+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-192-168-0-200.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "192.168.0.200",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-083066e22334ecd5e",
            "VpcId": "vpc-0c34ac37fdf3439c2",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "cf41e0d7-c52a-4dc9-8a39-f9f10784ba10",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2024-06-09T09:51:14+00:00",
                        "AttachmentId": "eni-attach-0707589e69eab0a9b",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching",
                        "NetworkCardIndex": 0
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "cgw",
                            "GroupId": "sg-07cc13eac10970d9e"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:42:a9:a3:d7:99",
                    "NetworkInterfaceId": "eni-0a1aa6b09162b10c0",
                    "OwnerId": "999999999999",
                    "PrivateIpAddress": "192.168.0.200",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "192.168.0.200"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-083066e22334ecd5e",
                    "VpcId": "vpc-0c34ac37fdf3439c2",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "cgw",
                    "GroupId": "sg-07cc13eac10970d9e"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "CGW"
                }
            ],
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 2
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled",
                "HttpProtocolIpv6": "disabled",
                "InstanceMetadataTags": "disabled"
            },
            "EnclaveOptions": {
                "Enabled": false
            },
            "PrivateDnsNameOptions": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "MaintenanceOptions": {
                "AutoRecovery": "default"
            },
            "CurrentInstanceBootMode": "legacy-bios"
        }
    ],
    "OwnerId": "999999999999",
    "ReservationId": "r-056e8603f60cd7528"
}

変数設定 (EC2 ID取得)

コマンド
ONP_EC2_INSTANCE_ID=$( \
  aws ec2 describe-instances \
    --filters Name=tag:Name,Values=${ONP_EC2_NAME}  \
    --query "Reservations[*].Instances[*].[InstanceId]" \
    --output text
) \
&& echo ${ONP_EC2_INSTANCE_ID} 
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ONP_EC2_INSTANCE_ID=$( \
>   aws ec2 describe-instances \
>     --filters Name=tag:Name,Values=${ONP_EC2_NAME}  \
>     --query "Reservations[*].Instances[*].[InstanceId]" \
>     --output text
> ) \
> && echo ${ONP_EC2_INSTANCE_ID} 
i-0c5e77f5aa0d68f78

Elastic IPを取得

コマンド
aws ec2 allocate-address
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 allocate-address
{
    "PublicIp": "18.177.254.176",
    "AllocationId": "eipalloc-0f9dbb8df9726344e",
    "PublicIpv4Pool": "amazon",
    "NetworkBorderGroup": "ap-northeast-1",
    "Domain": "vpc"
}

Elastic IP AllocationIdを取得

コマンド
ADDRESS_ALLOCATION_ID=$( \
    aws ec2 describe-addresses \
        --query 'Addresses[].AllocationId' \
        --output text
) \
&& echo ${ADDRESS_ALLOCATION_ID}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ADDRESS_ALLOCATION_ID=$( \
>     aws ec2 describe-addresses \
>         --query 'Addresses[].AllocationId' \
>         --output text
> ) \
> && echo ${ADDRESS_ALLOCATION_ID}
eipalloc-0f9dbb8df9726344e

Elastic IP Allocation IPを取得

コマンド
ADDRESS_ALLOCATION_IP=$( \
    aws ec2 describe-addresses \
        --query 'Addresses[].PublicIp' \
        --output text
) \
&& echo ${ADDRESS_ALLOCATION_IP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ ADDRESS_ALLOCATION_IP=$( \
>     aws ec2 describe-addresses \
>         --query 'Addresses[].PublicIp' \
>         --output text
> ) \
> && echo ${ADDRESS_ALLOCATION_IP}
18.177.254.176

Elastic IPをEC2インスタンスに関連付け

コマンド
aws ec2 associate-address \
    --allocation-id ${ADDRESS_ALLOCATION_ID} \
    --instance-id ${ONP_EC2_INSTANCE_ID} \
    --private-ip-address ${ONP_EC2_PRIVATE_IP}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 associate-address \
>     --allocation-id ${ADDRESS_ALLOCATION_ID} \
>     --instance-id ${ONP_EC2_INSTANCE_ID} \
>     --private-ip-address ${ONP_EC2_PRIVATE_IP}
{
    "AssociationId": "eipassoc-052bfce4a56bc335a"
}

キーペアのCloud9へのアップロード

WebUIで実施

キーペアのパーミッションの変更 (Cloud9で実施)

コマンド
chmod 400 handson.pem
出力
admin:~/environment $ chmod 400 handson.pem

SSH接続 (Cloud9で実施)

コマンド
ssh -i handson.pem vyos@18.177.254.176
出力
admin:~/environment $ ssh -i handson.pem vyos@18.177.254.176
The authenticity of host '18.177.254.176 (18.177.254.176)' can't be established.
ECDSA key fingerprint is SHA256:E9IlE6+ES0849wZUidFX3tWK0InOmvz36umA8FabajU.
ECDSA key fingerprint is MD5:2b:4f:8f:2f:28:1c:c4:3a:c7:c3:99:26:81:3a:89:f2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '18.177.254.176' (ECDSA) to the list of known hosts.
Welcome to VyOS!

Check out project news at https://blog.vyos.io
and feel free to report bugs at https://phabricator.vyos.net

Visit https://support.vyos.io to create a support ticket.

You can change this banner using "set system login banner post-login" command.

VyOS is a free software distribution that includes multiple components,
you can check individual component licenses under /usr/share/doc/*/copyright
Use of this pre-built image is governed by the EULA you can find at
/usr/share/vyos/EULA

10.メインVPCでVGWの作成とアタッチ

変数設定 (仮想プライベートゲートウェイ名)

コマンド
VGW_NAME_MAIN='vgw-handson' \
&& echo ${VGW_NAME_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VGW_NAME_MAIN='vgw-handson' \
> && echo ${VGW_NAME_MAIN}
vgw-handson

仮想プライベートゲートウェイの作成

コマンド
aws ec2 create-vpn-gateway \
    --type ipsec.1 \
    --tag-specifications "ResourceType=vpn-gateway,Tags=[{Key=Name,Value=${VGW_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-vpn-gateway \
>     --type ipsec.1 \
>     --tag-specifications "ResourceType=vpn-gateway,Tags=[{Key=Name,Value=${VGW_NAME_MAIN}}]"
{
    "VpnGateway": {
        "State": "available",
        "Type": "ipsec.1",
        "VpcAttachments": [],
        "VpnGatewayId": "vgw-0a3a20e598d03cca4",
        "AmazonSideAsn": 64512,
        "Tags": [
            {
                "Key": "Name",
                "Value": "vgw-handson"
            }
        ]
    }
}

変数設定 (仮想プライベートゲートウェイID)

コマンド
VGW_ID_MAIN=$(
    aws ec2 describe-vpn-gateways \
        --filters "Name=tag:Name,Values=${VGW_NAME_MAIN}" \
        --query 'VpnGateways[0].VpnGatewayId' \
        --output text
)\
&& echo ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VGW_ID_MAIN=$(
>     aws ec2 describe-vpn-gateways \
>         --filters "Name=tag:Name,Values=${VGW_NAME_MAIN}" \
>         --query 'VpnGateways[0].VpnGatewayId' \
>         --output text
> )\
> && echo ${VGW_ID_MAIN}
vgw-0a3a20e598d03cca4

仮想プライベートゲートウェイをVPCへアタッチ

コマンド
aws ec2 attach-vpn-gateway \
    --vpc-id ${VPC_ID_MAIN} \
    --vpn-gateway-id ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 attach-vpn-gateway \
>     --vpc-id ${VPC_ID_MAIN} \
>     --vpn-gateway-id ${VGW_ID_MAIN}
{
    "VpcAttachment": {
        "State": "attaching",
        "VpcId": "vpc-044f0a97b7e8a476a"
    }
}

変数設定 (カスタマーゲートウェイ名)

コマンド
CGW_NAME_MAIN='cgw-handson' \
&& echo ${CGW_NAME_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ CGW_NAME_MAIN='cgw-handson' \
> && echo ${CGW_NAME_MAIN}
cgw-handson

変数設定 (BGP ASN)

コマンド
CGW_BGP_ASN_MAIN=65000 \
&& echo ${CGW_BGP_ASN_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ CGW_BGP_ASN_MAIN=65000 \
> && echo ${CGW_BGP_ASN_MAIN}
65000

カスタマーゲートウェイ作成

コマンド
aws ec2 create-customer-gateway \
    --type ipsec.1 \
    --public-ip ${ADDRESS_ALLOCATION_IP} \
    --bgp-asn ${CGW_BGP_ASN_MAIN} \
    --tag-specifications "ResourceType=customer-gateway,Tags=[{Key=Name,Value=${CGW_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-customer-gateway \
>     --type ipsec.1 \
>     --public-ip ${ADDRESS_ALLOCATION_IP} \
>     --bgp-asn ${CGW_BGP_ASN_MAIN} \
>     --tag-specifications "ResourceType=customer-gateway,Tags=[{Key=Name,Value=${CGW_NAME_MAIN}}]"
{
    "CustomerGateway": {
        "BgpAsn": "65000",
        "CustomerGatewayId": "cgw-0f7eb5053efae35be",
        "IpAddress": "18.177.254.176",
        "State": "available",
        "Type": "ipsec.1",
        "Tags": [
            {
                "Key": "Name",
                "Value": "cgw-handson"
            }
        ]
    }
}

変数設定 (カスタマーゲートウェイID)

コマンド
CGW_ID_MAIN=$(
    aws ec2 describe-customer-gateways \
        --filters "Name=tag:Name,Values=${CGW_NAME_MAIN}" \
        --query 'CustomerGateways[0].CustomerGatewayId' \
        --output text
)\
&& echo ${CGW_ID_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ CGW_ID_MAIN=$(
>     aws ec2 describe-customer-gateways \
>         --filters "Name=tag:Name,Values=${CGW_NAME_MAIN}" \
>         --query 'CustomerGateways[0].CustomerGatewayId' \
>         --output text
> )\
> && echo ${CGW_ID_MAIN}
cgw-0f7eb5053efae35be

11.AWS Site-to-Site VPNの設定

変数設定 (Site-to-Site VPN名)

コマンド
VPN_NAME_MAIN='vpn-handson' \
&& echo ${VPN_NAME_MAIN}
出力
[cloudshell-user@ip-10-134-25-38 ~]$ VPN_NAME_MAIN='vpn-handson' \
> && echo ${VPN_NAME_MAIN}
vpn-handson

AWS Site-to-Site VPNの設定

コマンド
aws ec2 create-vpn-connection \
    --type ipsec.1 \
    --customer-gateway-id ${CGW_ID_MAIN} \
    --vpn-gateway-id ${VGW_ID_MAIN} \
    --options '{"StaticRoutesOnly":false}' \
    --tag-specifications "ResourceType=vpn-connection,Tags=[{Key=Name,Value=${VPN_NAME_MAIN}}]"
出力
[cloudshell-user@ip-10-134-25-38 ~]$ aws ec2 create-vpn-connection \
>     --type ipsec.1 \
>     --customer-gateway-id ${CGW_ID_MAIN} \
>     --vpn-gateway-id ${VGW_ID_MAIN} \
>     --options '{"StaticRoutesOnly":false}' \
>     --tag-specifications "ResourceType=vpn-connection,Tags=[{Key=Name,Value=${VPN_NAME_MAIN}}]"
{
    "VpnConnection": {
        "CustomerGatewayConfiguration": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<vpn_connection id=\"vpn-00604c32eefa380e1\">\n  <customer_gateway_id>cgw-0f7eb5053efae35be</customer_gateway_id>\n  <vpn_gateway_id>vgw-0a3a20e598d03cca4</vpn_gateway_id>\n  <vpn_connection_type>ipsec.1</vpn_connection_type>\n  <ipsec_tunnel>\n    <customer_gateway>\n      <tunnel_outside_address>\n        <ip_address>18.177.254.176</ip_address>\n      </tunnel_outside_address>\n      <tunnel_inside_address>\n        <ip_address>169.254.206.190</ip_address>\n        <network_mask>255.255.255.252</network_mask>\n        <network_cidr>30</network_cidr>\n      </tunnel_inside_address>\n      <bgp>\n        <asn>65000</asn>\n        <hold_time>30</hold_time>\n      </bgp>\n    </customer_gateway>\n    <vpn_gateway>\n      <tunnel_outside_address>\n        <ip_address>3.114.51.170</ip_address>\n      </tunnel_outside_address>\n      <tunnel_inside_address>\n        <ip_address>169.254.206.189</ip_address>\n        <network_mask>255.255.255.252</network_mask>\n        <network_cidr>30</network_cidr>\n      </tunnel_inside_address>\n      <bgp>\n        <asn>64512</asn>\n        <hold_time>30</hold_time>\n      </bgp>\n    </vpn_gateway>\n    <ike>\n      <authentication_protocol>sha1</authentication_protocol>\n      <encryption_protocol>aes-128-cbc</encryption_protocol>\n      <lifetime>28800</lifetime>\n      <perfect_forward_secrecy>group2</perfect_forward_secrecy>\n      <mode>main</mode>\n      <pre_shared_key>wMSZ5io.0Z41uwQXB2mJ2J9T2yvhmHgz</pre_shared_key>\n    </ike>\n    <ipsec>\n      <protocol>esp</protocol>\n      <authentication_protocol>hmac-sha1-96</authentication_protocol>\n      <encryption_protocol>aes-128-cbc</encryption_protocol>\n      <lifetime>3600</lifetime>\n      <perfect_forward_secrecy>group2</perfect_forward_secrecy>\n      <mode>tunnel</mode>\n      <clear_df_bit>true</clear_df_bit>\n      <fragmentation_before_encryption>true</fragmentation_before_encryption>\n      <tcp_mss_adjustment>1379</tcp_mss_adjustment>\n      <dead_peer_detection>\n        <interval>10</interval>\n        <retries>3</retries>\n      </dead_peer_detection>\n    </ipsec>\n  </ipsec_tunnel>\n  <ipsec_tunnel>\n    <customer_gateway>\n      <tunnel_outside_address>\n        <ip_address>18.177.254.176</ip_address>\n      </tunnel_outside_address>\n      <tunnel_inside_address>\n        <ip_address>169.254.23.174</ip_address>\n        <network_mask>255.255.255.252</network_mask>\n        <network_cidr>30</network_cidr>\n      </tunnel_inside_address>\n      <bgp>\n        <asn>65000</asn>\n        <hold_time>30</hold_time>\n      </bgp>\n    </customer_gateway>\n    <vpn_gateway>\n      <tunnel_outside_address>\n        <ip_address>35.76.170.130</ip_address>\n      </tunnel_outside_address>\n      <tunnel_inside_address>\n        <ip_address>169.254.23.173</ip_address>\n        <network_mask>255.255.255.252</network_mask>\n        <network_cidr>30</network_cidr>\n      </tunnel_inside_address>\n      <bgp>\n        <asn>64512</asn>\n        <hold_time>30</hold_time>\n      </bgp>\n    </vpn_gateway>\n    <ike>\n      <authentication_protocol>sha1</authentication_protocol>\n      <encryption_protocol>aes-128-cbc</encryption_protocol>\n      <lifetime>28800</lifetime>\n      <perfect_forward_secrecy>group2</perfect_forward_secrecy>\n      <mode>main</mode>\n      <pre_shared_key>NDaCobdm2Mzc2rE3WDigT8zoMUE8doC1</pre_shared_key>\n    </ike>\n    <ipsec>\n      <protocol>esp</protocol>\n      <authentication_protocol>hmac-sha1-96</authentication_protocol>\n      <encryption_protocol>aes-128-cbc</encryption_protocol>\n      <lifetime>3600</lifetime>\n      <perfect_forward_secrecy>group2</perfect_forward_secrecy>\n      <mode>tunnel</mode>\n      <clear_df_bit>true</clear_df_bit>\n      <fragmentation_before_encryption>true</fragmentation_before_encryption>\n      <tcp_mss_adjustment>1379</tcp_mss_adjustment>\n      <dead_peer_detection>\n        <interval>10</interval>\n        <retries>3</retries>\n      </dead_peer_detection>\n    </ipsec>\n  </ipsec_tunnel>\n</vpn_connection>\n",
        "CustomerGatewayId": "cgw-0f7eb5053efae35be",
        "Category": "VPN",
        "State": "pending",
        "VpnConnectionId": "vpn-00604c32eefa380e1",
        "VpnGatewayId": "vgw-0a3a20e598d03cca4",
        "GatewayAssociationState": "associated",
        "Options": {
            "EnableAcceleration": false,
            "StaticRoutesOnly": false,
            "LocalIpv4NetworkCidr": "0.0.0.0/0",
            "RemoteIpv4NetworkCidr": "0.0.0.0/0",
            "OutsideIpAddressType": "PublicIpv4",
            "TunnelInsideIpVersion": "ipv4",
            "TunnelOptions": [
                {
                    "OutsideIpAddress": "3.114.51.170",
                    "TunnelInsideCidr": "169.254.206.188/30",
                    "PreSharedKey": "wMSZ5io.0Z41uwQXB2mJ2J9T2yvhmHgz",
                    "LogOptions": {
                        "CloudWatchLogOptions": {
                            "LogEnabled": false
                        }
                    }
                },
                {
                    "OutsideIpAddress": "35.76.170.130",
                    "TunnelInsideCidr": "169.254.23.172/30",
                    "PreSharedKey": "NDaCobdm2Mzc2rE3WDigT8zoMUE8doC1",
                    "LogOptions": {
                        "CloudWatchLogOptions": {
                            "LogEnabled": false
                        }
                    }
                }
            ]
        },
        "Routes": [],
        "Tags": [
            {
                "Key": "Name",
                "Value": "vpn-handson"
            }
        ]
    }
}

変数設定 (Site-to-Site VPN ID)

コマンド
VPN_ID_MAIN=$(
    aws ec2 describe-vpn-connections \
        --filters "Name=tag:Name,Values=${VPN_NAME_MAIN}" \
        --query 'VpnConnections[0].VpnConnectionId' \
        --output text
)\
&& echo ${VPN_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ VPN_ID_MAIN=$(
>     aws ec2 describe-vpn-connections \
>         --filters "Name=tag:Name,Values=${VPN_NAME_MAIN}" \
>         --query 'VpnConnections[0].VpnConnectionId' \
>         --output text
> )\
> && echo ${VPN_ID_MAIN}
vpn-00604c32eefa380e1

12.オンプレミスルータ想定EC2の設定

設定モードに移行

コマンド
configure
出力
vyos@ip-192-168-0-200:~$ configure
[edit]

設定投入

コマンド
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec site-to-site peer 3.114.51.170 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 3.114.51.170 authentication pre-shared-secret 'wMSZ5io.0Z41uwQXB2mJ2J9T2yvhmHgz'
set vpn ipsec site-to-site peer 3.114.51.170 description 'VPC tunnel 1'
set vpn ipsec site-to-site peer 3.114.51.170 ike-group 'AWS'
set vpn ipsec site-to-site peer 3.114.51.170 local-address '192.168.0.200'
set vpn ipsec site-to-site peer 3.114.51.170 vti bind 'vti0'
set vpn ipsec site-to-site peer 3.114.51.170 vti esp-group 'AWS'

set vpn ipsec ipsec-interfaces interface 'eth0'
set vpn ipsec esp-group AWS compression 'disable'
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'

set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'

set interfaces vti vti0 address '169.254.206.190/30'
set interfaces vti vti0 description 'VPC tunnel 1'
set interfaces vti vti0 mtu '1436'

set protocols bgp 65000 neighbor 169.254.206.189 remote-as '64512'
set protocols bgp 65000 neighbor 169.254.206.189 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp 65000 neighbor 169.254.206.189 timers holdtime '30'
set protocols bgp 65000 neighbor 169.254.206.189 timers keepalive '10'

set protocols bgp 65000 address-family ipv4-unicast network 192.168.0.0/16

set vpn ipsec site-to-site peer 35.76.170.130 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 35.76.170.130 authentication pre-shared-secret 'NDaCobdm2Mzc2rE3WDigT8zoMUE8doC1'
set vpn ipsec site-to-site peer 35.76.170.130 description 'VPC tunnel 2'
set vpn ipsec site-to-site peer 35.76.170.130 ike-group 'AWS'
set vpn ipsec site-to-site peer 35.76.170.130 local-address '192.168.0.200'
set vpn ipsec site-to-site peer 35.76.170.130 vti bind 'vti1'
set vpn ipsec site-to-site peer 35.76.170.130 vti esp-group 'AWS'

set interfaces vti vti1 address '169.254.23.174/30'
set interfaces vti vti1 description 'VPC tunnel 2'
set interfaces vti vti1 mtu '1436'

set protocols bgp 65000 neighbor 169.254.23.173 remote-as '64512'
set protocols bgp 65000 neighbor 169.254.23.173 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp 65000 neighbor 169.254.23.173 timers holdtime '30'
set protocols bgp 65000 neighbor 169.254.23.173 timers keepalive '10'
出力
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS lifetime '28800'
ription 'VPC tunnel 2'
set vpn ipsec site-to-site peer 35.76.170.130 ike-group 'AWS'
set vpn ipsec site-to-site peer 35.76.170.130 local-address '192.168.0.200'
set vpn ipsec site-to-site peer 35.76.170.130 vti bind 'vti1'
set vpn ipsec site-to-site peer 35.76.170.130 vti esp-group 'AWS'

set interfaces vti vti1 address '169.254.23.174/30'
set interfaces vti vti1 description 'VPC tunnel 2'
set interfaces vti vti1 mtu '1436'

set protocols bgp 65000 neighbor 169.254.23.173 remote-as '64512'
set protocols bgp 65000 neighbor 169.254.23.173 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp 65000 neighbor 169.254.23.173 timers holdtime '30'
set protocols bgp 65000 neighbor 169.254.23.173 timers keepalive '10'[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS proposal 1 dh-group '2'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 authentication mode 'pre-shared-secret'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 authentication pre-shared-secret 'wMSZ5io.0Z41uwQXB2mJ2J9T2yvhmHgz'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 description 'VPC tunnel 1'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 ike-group 'AWS'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 local-address '192.168.0.200'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 vti bind 'vti0'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 3.114.51.170 vti esp-group 'AWS'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ipsec-interfaces interface 'eth0'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS compression 'disable'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS lifetime '3600'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS mode 'tunnel'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS pfs 'enable'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS dead-peer-detection interval '15'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti0 address '169.254.206.190/30'
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti0 description 'VPC tunnel 1'
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti0 mtu '1436'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.206.189 remote-as '64512'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.206.189 address-family ipv4-unicast soft-reconfiguration 'inbound'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.206.189 timers holdtime '30'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.206.189 timers keepalive '10'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 address-family ipv4-unicast network 192.168.0.0/16
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 authentication mode 'pre-shared-secret'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 authentication pre-shared-secret 'NDaCobdm2Mzc2rE3WDigT8zoMUE8doC1'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 description 'VPC tunnel 2'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 ike-group 'AWS'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 local-address '192.168.0.200'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 vti bind 'vti1'
[edit]
vyos@ip-192-168-0-200# set vpn ipsec site-to-site peer 35.76.170.130 vti esp-group 'AWS'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti1 address '169.254.23.174/30'
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti1 description 'VPC tunnel 2'
[edit]
vyos@ip-192-168-0-200# set interfaces vti vti1 mtu '1436'
[edit]
vyos@ip-192-168-0-200# 
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.23.173 remote-as '64512'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.23.173 address-family ipv4-unicast soft-reconfiguration 'inbound'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.23.173 timers holdtime '30'
[edit]
vyos@ip-192-168-0-200# set protocols bgp 65000 neighbor 169.254.23.173 timers keepalive '10'
[edit]

設定有効化

コマンド
commit
出力
vyos@ip-192-168-0-200# commit
[edit]

設定保存

コマンド
save
出力
vyos@ip-192-168-0-200# save
Saving configuration to '/config/config.boot'...
Done
[edit]

設定モード終了

コマンド
exit
出力
vyos@ip-192-168-0-200# exit
exit

BGPプロセスリセット

コマンド
reset ip bgp all
出力
vyos@ip-192-168-0-200:~$ reset ip bgp all

経路確認

コマンド
show ip route
出力
vyos@ip-192-168-0-200:~$ show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP,
       O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP,
       T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP,
       F - PBR, f - OpenFabric,
       > - selected route, * - FIB route, q - queued, r - rejected, b - backup

S>* 0.0.0.0/0 [210/0] via 192.168.0.1, eth0, weight 1, 01:37:14
B>* 10.0.0.0/16 [20/100] via 169.254.206.189, vti0, weight 1, 00:01:18
C>* 169.254.23.172/30 is directly connected, vti1, 00:05:00
C>* 169.254.206.188/30 is directly connected, vti0, 00:05:00
C>* 192.168.0.0/24 is directly connected, eth0, 01:37:15

BGPテーブル確認

コマンド
show ip bgp
出力
vyos@ip-192-168-0-200:~$ show ip bgp
BGP table version is 4, local router ID is 192.168.0.200, vrf id 0
Default local pref 100, local AS 65000
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*  10.0.0.0/16      169.254.23.173         200             0 64512 i
*>                  169.254.206.189        100             0 64512 i
*> 192.168.0.0/16   0.0.0.0                  0         32768 i

Displayed  2 routes and 3 total paths

VPNトンネル状態確認

コマンド
aws ec2 describe-vpn-connections \
    --vpn-connection-ids ${VPN_ID_MAIN} \
    --query 'VpnConnections[0].VgwTelemetry'
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 describe-vpn-connections \
>     --vpn-connection-ids ${VPN_ID_MAIN} \
>     --query 'VpnConnections[0].VgwTelemetry'
[
    {
        "AcceptedRouteCount": 1,
        "LastStatusChange": "2024-06-09T11:25:03+00:00",
        "OutsideIpAddress": "3.114.51.170",
        "Status": "UP",
        "StatusMessage": "1 BGP ROUTES"
    },
    {
        "AcceptedRouteCount": 1,
        "LastStatusChange": "2024-06-09T11:25:05+00:00",
        "OutsideIpAddress": "35.76.170.130",
        "Status": "UP",
        "StatusMessage": "1 BGP ROUTES"
    }
]

13.ルートテーブルの伝搬設定

コマンド
aws ec2 enable-vgw-route-propagation \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --gateway-id ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 enable-vgw-route-propagation \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --gateway-id ${VGW_ID_MAIN}

ルーティングテーブル確認

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_MAIN}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-08a0f3e7e390bf6c7",
                    "RouteTableId": "rtb-022300aa94b5b1e97",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-022300aa94b5b1e97",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Private Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-0815f3e455e0ea7d4",
                    "RouteTableId": "rtb-06294855aa51d5273",
                    "SubnetId": "subnet-0e332a080d5517d6b",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [
                {
                    "GatewayId": "vgw-0a3a20e598d03cca4"
                }
            ],
            "RouteTableId": "rtb-06294855aa51d5273",
            "Routes": [
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "10.1.0.0/16",
                    "Origin": "CreateRoute",
                    "State": "active",
                    "VpcPeeringConnectionId": "pcx-0c1944c75b00e0912"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-068f3e7ffa0776661",
                    "Origin": "CreateRoute",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "192.168.0.0/16",
                    "GatewayId": "vgw-0a3a20e598d03cca4",
                    "Origin": "EnableVgwRoutePropagation",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "Main Public Route Table"
                }
            ],
            "VpcId": "vpc-044f0a97b7e8a476a",
            "OwnerId": "999999999999"
        }
    ]
}

14.オンプレ想定VPCのRoute Tableを更新する

ルートテーブル更新

コマンド
aws ec2 create-route \
    --route-table-id ${PUBLIC_ROUTE_ID_ONP} \
    --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
    --instance-id ${ONP_EC2_INSTANCE_ID} 
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 create-route \
>     --route-table-id ${PUBLIC_ROUTE_ID_ONP} \
>     --destination-cidr-block ${VPC_CIDR_BLOCK_MAIN} \
>     --instance-id ${ONP_EC2_INSTANCE_ID} 
{
    "Return": true
}

ルーティングテーブル確認

コマンド
aws ec2 describe-route-tables \
    --filters "Name=vpc-id,Values=${VPC_ID_ONP}"
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 describe-route-tables \
>     --filters "Name=vpc-id,Values=${VPC_ID_ONP}"
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "Main": true,
                    "RouteTableAssociationId": "rtbassoc-0056220dde2b9b2a6",
                    "RouteTableId": "rtb-08ad96035db244af9",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-08ad96035db244af9",
            "Routes": [
                {
                    "DestinationCidrBlock": "192.168.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "OnP Private Route Table"
                }
            ],
            "VpcId": "vpc-0c34ac37fdf3439c2",
            "OwnerId": "999999999999"
        },
        {
            "Associations": [
                {
                    "Main": false,
                    "RouteTableAssociationId": "rtbassoc-03f2f49cc1dc05681",
                    "RouteTableId": "rtb-0935aafd7f8fa7475",
                    "SubnetId": "subnet-083066e22334ecd5e",
                    "AssociationState": {
                        "State": "associated"
                    }
                }
            ],
            "PropagatingVgws": [],
            "RouteTableId": "rtb-0935aafd7f8fa7475",
            "Routes": [
                {
                    "DestinationCidrBlock": "192.168.0.0/16",
                    "GatewayId": "local",
                    "Origin": "CreateRouteTable",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "10.0.0.0/16",
                    "InstanceId": "i-0c5e77f5aa0d68f78",
                    "InstanceOwnerId": "999999999999",
                    "NetworkInterfaceId": "eni-0a1aa6b09162b10c0",
                    "Origin": "CreateRoute",
                    "State": "active"
                },
                {
                    "DestinationCidrBlock": "0.0.0.0/0",
                    "GatewayId": "igw-07d90ca57c38f8118",
                    "Origin": "CreateRoute",
                    "State": "active"
                }
            ],
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "OnP Public Route Table"
                }
            ],
            "VpcId": "vpc-0c34ac37fdf3439c2",
            "OwnerId": "999999999999"
        }
    ]
}

15.オンプレミスルータ想定EC2の送信先/宛先チェックを無効化

変数設定 (ネットワークインターフェースIDを取得)

コマンド
ONP_EC2_NETWORK_INTERFACE_ID=$(
    aws ec2 describe-instances \
        --instance-ids $INSTANCE_ID \
        --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' \
        --output text
)\
&& echo ${ONP_EC2_NETWORK_INTERFACE_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ ONP_EC2_NETWORK_INTERFACE_ID=$(
>     aws ec2 describe-instances \
>         --instance-ids $INSTANCE_ID \
>         --query 'Reservations[0].Instances[0].NetworkInterfaces[0].NetworkInterfaceId' \
>         --output text
> )\
> && echo ${ONP_EC2_NETWORK_INTERFACE_ID}
eni-0009f07520555d3ac

# 送信先/宛先チェックを無効化

コマンド
aws ec2 modify-instance-attribute \
    --instance-id ${ONP_EC2_INSTANCE_ID} \
    --no-source-dest-check
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 modify-instance-attribute \
>     --instance-id ${ONP_EC2_INSTANCE_ID} \
>     --no-source-dest-check

オンプレ想定VPCにEC2を作成

変数設定 (EC2名)

コマンド
EC2_ONP_2_NAME='OnP' \
&& echo ${EC2_ONP_2_NAME}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ EC2_SECURITY_GROUP_2_NAME='OnP' \
> && echo ${EC2_SECURITY_GROUP_2_NAME}
OnP

変数設定 (プライベートIP)

コマンド
ONP_EC2_PRIVATE_2_IP='192.168.0.100' \
&& echo ${ONP_EC2_PRIVATE_2_IP}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ ONP_EC2_PRIVATE_2_IP='192.168.0.100' \
> && echo ${ONP_EC2_PRIVATE_2_IP}
192.168.0.100

変数設定 (セキュリティグループ名)

コマンド
ONP_EC2_SECURITY_GROUP_2_NAME='onp' \
&& echo ${ONP_EC2_SECURITY_GROUP_2_NAME}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ ONP_EC2_SECURITY_GROUP_2_NAME='onp' \
> && echo ${ONP_EC2_SECURITY_GROUP_2_NAME}
onp

変数設定 (セキュリティグループ説明)

コマンド
ONP_EC2_SECURITY_GROUP_2_DESCRIPTION='onp' \
&& echo ${ONP_EC2_SECURITY_GROUP_2_DESCRIPTION}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ ONP_EC2_SECURITY_GROUP_2_DESCRIPTION='onp' \
> && echo ${ONP_EC2_SECURITY_GROUP_2_DESCRIPTION}
onp

セキュリティグループ作成

コマンド
aws ec2 create-security-group \
  --group-name ${ONP_EC2_SECURITY_GROUP_2_NAME} \
  --description "${ONP_EC2_SECURITY_GROUP_2_DESCRIPTION}" \
  --vpc-id ${VPC_ID_ONP}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 create-security-group \
>   --group-name ${ONP_EC2_SECURITY_GROUP_2_NAME} \
>   --description "${ONP_EC2_SECURITY_GROUP_2_DESCRIPTION}" \
>   --vpc-id ${VPC_ID_ONP}
{
    "GroupId": "sg-036a9939b8dca2957"
}

変数設定 (セキュリティグループID取得)

コマンド
ONP_EC2_SECURITY_GROUP_2_ID=$( \
  aws ec2 describe-security-groups \
    --filters Name=vpc-id,Values=${VPC_ID_ONP} \
              Name=group-name,Values=${ONP_EC2_SECURITY_GROUP_2_NAME} \
    --query "SecurityGroups[].GroupId" \
    --output text \
) \
&& echo ${ONP_EC2_SECURITY_GROUP_2_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ ONP_EC2_SECURITY_GROUP_2_ID=$( \
>   aws ec2 describe-security-groups \
>     --filters Name=vpc-id,Values=${VPC_ID_ONP} \
>               Name=group-name,Values=${ONP_EC2_SECURITY_GROUP_2_NAME} \
>     --query "SecurityGroups[].GroupId" \
>     --output text \
> ) \
> && echo ${ONP_EC2_SECURITY_GROUP_2_ID}
sg-036a9939b8dca2957

セキュリティグループ ルール追加

コマンド
aws ec2 authorize-security-group-ingress \
    --group-id ${ONP_EC2_SECURITY_GROUP_2_ID} \
    --protocol -1 \
    --cidr ${VPC_CIDR_BLOCK_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 authorize-security-group-ingress \
>     --group-id ${ONP_EC2_SECURITY_GROUP_2_ID} \
>     --protocol -1 \
>     --cidr ${VPC_CIDR_BLOCK_MAIN}
{
    "Return": true,
    "SecurityGroupRules": [
        {
            "SecurityGroupRuleId": "sgr-067bef11521ac9f84",
            "GroupId": "sg-036a9939b8dca2957",
            "GroupOwnerId": "999999999999",
            "IsEgress": false,
            "IpProtocol": "-1",
            "FromPort": -1,
            "ToPort": -1,
            "CidrIpv4": "10.0.0.0/16"
        }
    ]
}

パブリック EC2作成

コマンド
aws ec2 run-instances \
  --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
  --instance-type t2.micro \
  --security-group-ids ${ONP_EC2_SECURITY_GROUP_2_ID} \
  --subnet-id ${SUBNET_ID_ONP} \
  --private-ip-address ${ONP_EC2_PRIVATE_2_IP} \
  --no-associate-public-ip-address \
  --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_ONP_2_NAME}}]"
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 run-instances \
>   --image-id resolve:ssm:/aws/service/cloud9/amis/amazonlinux-2-x86_64 \
>   --instance-type t2.micro \
>   --security-group-ids ${ONP_EC2_SECURITY_GROUP_2_ID} \
>   --subnet-id ${SUBNET_ID_ONP} \
>   --private-ip-address ${ONP_EC2_PRIVATE_2_IP} \
>   --no-associate-public-ip-address \
>   --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=${EC2_ONP_2_NAME}}]"
{
    "Groups": [],
    "Instances": [
        {
            "AmiLaunchIndex": 0,
            "ImageId": "ami-057086e4e77484a4a",
            "InstanceId": "i-0224321cc66e5e61c",
            "InstanceType": "t2.micro",
            "LaunchTime": "2024-06-09T13:54:28+00:00",
            "Monitoring": {
                "State": "disabled"
            },
            "Placement": {
                "AvailabilityZone": "ap-northeast-1a",
                "GroupName": "",
                "Tenancy": "default"
            },
            "PrivateDnsName": "ip-192-168-0-100.ap-northeast-1.compute.internal",
            "PrivateIpAddress": "192.168.0.100",
            "ProductCodes": [],
            "PublicDnsName": "",
            "State": {
                "Code": 0,
                "Name": "pending"
            },
            "StateTransitionReason": "",
            "SubnetId": "subnet-083066e22334ecd5e",
            "VpcId": "vpc-0c34ac37fdf3439c2",
            "Architecture": "x86_64",
            "BlockDeviceMappings": [],
            "ClientToken": "7da11a8c-7295-4905-8321-801605cc5bce",
            "EbsOptimized": false,
            "EnaSupport": true,
            "Hypervisor": "xen",
            "NetworkInterfaces": [
                {
                    "Attachment": {
                        "AttachTime": "2024-06-09T13:54:28+00:00",
                        "AttachmentId": "eni-attach-0819dd6e4d09763e9",
                        "DeleteOnTermination": true,
                        "DeviceIndex": 0,
                        "Status": "attaching",
                        "NetworkCardIndex": 0
                    },
                    "Description": "",
                    "Groups": [
                        {
                            "GroupName": "onp",
                            "GroupId": "sg-036a9939b8dca2957"
                        }
                    ],
                    "Ipv6Addresses": [],
                    "MacAddress": "06:cc:e9:32:c0:db",
                    "NetworkInterfaceId": "eni-06b43a74a2def0158",
                    "OwnerId": "999999999999",
                    "PrivateIpAddress": "192.168.0.100",
                    "PrivateIpAddresses": [
                        {
                            "Primary": true,
                            "PrivateIpAddress": "192.168.0.100"
                        }
                    ],
                    "SourceDestCheck": true,
                    "Status": "in-use",
                    "SubnetId": "subnet-083066e22334ecd5e",
                    "VpcId": "vpc-0c34ac37fdf3439c2",
                    "InterfaceType": "interface"
                }
            ],
            "RootDeviceName": "/dev/xvda",
            "RootDeviceType": "ebs",
            "SecurityGroups": [
                {
                    "GroupName": "onp",
                    "GroupId": "sg-036a9939b8dca2957"
                }
            ],
            "SourceDestCheck": true,
            "StateReason": {
                "Code": "pending",
                "Message": "pending"
            },
            "Tags": [
                {
                    "Key": "Name",
                    "Value": "OnP"
                }
            ],
            "VirtualizationType": "hvm",
            "CpuOptions": {
                "CoreCount": 1,
                "ThreadsPerCore": 1
            },
            "CapacityReservationSpecification": {
                "CapacityReservationPreference": "open"
            },
            "MetadataOptions": {
                "State": "pending",
                "HttpTokens": "optional",
                "HttpPutResponseHopLimit": 1,
                "HttpEndpoint": "enabled",
                "HttpProtocolIpv6": "disabled",
                "InstanceMetadataTags": "disabled"
            },
            "EnclaveOptions": {
                "Enabled": false
            },
            "PrivateDnsNameOptions": {
                "HostnameType": "ip-name",
                "EnableResourceNameDnsARecord": false,
                "EnableResourceNameDnsAAAARecord": false
            },
            "MaintenanceOptions": {
                "AutoRecovery": "default"
            },
            "CurrentInstanceBootMode": "legacy-bios"
        }
    ],
    "OwnerId": "999999999999",
    "ReservationId": "r-01177b17c832fbdf1"
}

IPアドレス確認

コマンド
ip address show
出力
admin:~/environment $ ip address show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:1e:48:f6:6d:8b brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.240/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 2289sec preferred_lft 2289sec
    inet6 fe80::41e:48ff:fef6:6d8b/64 scope link 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:b7:b4:8c:83 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
``
## 疎通確認 
```:コマンド
ping 192.168.0.100
出力
admin:~/environment $ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_seq=1 ttl=254 time=4.43 ms
64 bytes from 192.168.0.100: icmp_seq=2 ttl=254 time=4.01 ms
64 bytes from 192.168.0.100: icmp_seq=3 ttl=254 time=4.16 ms
64 bytes from 192.168.0.100: icmp_seq=4 ttl=254 time=4.11 ms
^C
--- 192.168.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 4.019/4.181/4.430/0.152 ms

仮想プライベートゲートウェイのデタッチ

コマンド
aws ec2 detach-vpn-gateway \
    --vpn-gateway-id ${VGW_ID_MAIN} \
    --vpc-id ${VPC_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 detach-vpn-gateway \
>     --vpn-gateway-id ${VGW_ID_MAIN} \
>     --vpc-id ${VPC_ID_MAIN}

疎通確認 (デタッチ後)

コマンド
ping 192.168.0.100
出力
admin:~/environment $ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
^C
--- 192.168.0.100 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3067ms

VPNトンネル状態確認

コマンド
aws ec2 describe-vpn-connections \
    --vpn-connection-ids ${VPN_ID_MAIN} \
    --query 'VpnConnections[0].VgwTelemetry'
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 describe-vpn-connections \
>     --vpn-connection-ids ${VPN_ID_MAIN} \
>     --query 'VpnConnections[0].VgwTelemetry'
[
    {
        "AcceptedRouteCount": 1,
        "LastStatusChange": "2024-06-09T11:25:03+00:00",
        "OutsideIpAddress": "3.114.51.170",
        "Status": "UP",
        "StatusMessage": "1 BGP ROUTES"
    },
    {
        "AcceptedRouteCount": 1,
        "LastStatusChange": "2024-06-09T11:25:05+00:00",
        "OutsideIpAddress": "35.76.170.130",
        "Status": "UP",
        "StatusMessage": "1 BGP ROUTES"
    }
]

仮想プライベートゲートウェイをVPCへアタッチ

コマンド
aws ec2 attach-vpn-gateway \
    --vpc-id ${VPC_ID_MAIN} \
    --vpn-gateway-id ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 attach-vpn-gateway \
>     --vpc-id ${VPC_ID_MAIN} \
>     --vpn-gateway-id ${VGW_ID_MAIN}
{
    "VpcAttachment": {
        "State": "attaching",
        "VpcId": "vpc-044f0a97b7e8a476a"
    }
}

ルートテーブルの伝搬設定

コマンド
aws ec2 enable-vgw-route-propagation \
    --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
    --gateway-id ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 enable-vgw-route-propagation \
>     --route-table-id ${PUBLIC_ROUTE_ID_MAIN} \
>     --gateway-id ${VGW_ID_MAIN}

疎通確認 (復旧後)

コマンド
ping 192.168.0.100
出力
admin:~/environment $ ping 192.168.0.100
PING 192.168.0.100 (192.168.0.100) 56(84) bytes of data.
64 bytes from 192.168.0.100: icmp_seq=1 ttl=254 time=4.30 ms
64 bytes from 192.168.0.100: icmp_seq=2 ttl=254 time=5.45 ms
64 bytes from 192.168.0.100: icmp_seq=3 ttl=254 time=4.11 ms
64 bytes from 192.168.0.100: icmp_seq=4 ttl=254 time=6.27 ms
^C
--- 192.168.0.100 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 4.115/5.039/6.278/0.882 ms

リソースの削除

Cloud9 削除

変数設定 (Cloud9)

コマンド
CLOUD9_ENVIRONMENT_ID=$(
    aws cloud9 list-environments \
        --query environmentIds[2] \
        --output text
)\
&& echo ${CLOUD9_ENVIRONMENT_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ CLOUD9_ENVIRONMENT_ID=$(
>     aws cloud9 list-environments \
>         --query environmentIds[2] \
>         --output text
> )\
> && echo ${CLOUD9_ENVIRONMENT_ID}
b49e70dac3ce4fd7a037a3285ef93f8b

Cloud9削除

コマンド
aws cloud9 delete-environment \
    --environment-id ${CLOUD9_ENVIRONMENT_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws cloud9 delete-environment \
>     --environment-id ${CLOUD9_ENVIRONMENT_ID}

Elastic IP 削除(解放)

関連付け解除

コマンド
aws ec2 disassociate-address \
    --public-ip ${ADDRESS_ALLOCATION_IP}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 disassociate-address \
>     --public-ip ${ADDRESS_ALLOCATION_IP}

Elastic IP 削除(解放)

コマンド
aws ec2 release-address \
    --allocation-id ${ADDRESS_ALLOCATION_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 release-address \
>     --allocation-id ${ADDRESS_ALLOCATION_ID}

EC2 削除

コマンド
aws ec2 terminate-instances \
  --region ap-northeast-1 \
  --instance-ids ${EC2_ID_PEERING} ${EC2_ID_CGW} ${EC2_ID_ONP}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 terminate-instances \
>   --region ap-northeast-1 \
>   --instance-ids ${EC2_ID_PEERING} ${EC2_ID_CGW} ${EC2_ID_ONP}
{
    "TerminatingInstances": [
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "i-0493671798dbd6f07",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "i-0c5e77f5aa0d68f78",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
        {
            "CurrentState": {
                "Code": 32,
                "Name": "shutting-down"
            },
            "InstanceId": "i-0224321cc66e5e61c",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}

キーペア 削除

コマンド
aws ec2 delete-key-pair --key-name ${KEY_PAIR_NAME}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 delete-key-pair --key-name ${KEY_PAIR_NAME}
{
    "Return": true,
    "KeyPairId": "key-0ba25e562b113b2d9"
}

Subnet 削除

メイン

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_MAIN}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_MAIN}

ピアリング

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_PEERING}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_PEERING}

OnP

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_ONP}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_ONP}

セキュリティグループ 削除

ピアリング

コマンド
aws ec2 delete-security-group --group-id ${EC2_SECURITY_GROUP_ID}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-security-group --group-id ${EC2_SECURITY_GROUP_ID}

OnP

コマンド
aws ec2 delete-security-group --group-id ${ONP_EC2_SECURITY_GROUP_ID} 
aws ec2 delete-security-group --group-id ${ONP_EC2_SECURITY_GROUP_2_ID}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-security-group --group-id ${ONP_EC2_SECURITY_GROUP_ID}
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-security-group --group-id ${ONP_EC2_SECURITY_GROUP_2_ID}

サイト間VPN接続 削除

コマンド
aws ec2 delete-vpn-connection --vpn-connection-id ${VPN_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 delete-vpn-connection --vpn-connection-id ${VPN_ID_MAIN}

カスタマーゲートウェイ 削除

コマンド
aws ec2 delete-customer-gateway --customer-gateway-id ${CGW_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 delete-customer-gateway --customer-gateway-id ${CGW_ID_MAIN}

VGW 削除

仮想プライベートゲートウェイのデタッチ

コマンド
aws ec2 detach-vpn-gateway \
    --vpn-gateway-id ${VGW_ID_MAIN} \
    --vpc-id ${VPC_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 detach-vpn-gateway \
>     --vpn-gateway-id ${VGW_ID_MAIN} \
>     --vpc-id ${VPC_ID_MAIN}

仮想プライベートゲートウェイの削除

コマンド
aws ec2 delete-vpn-gateway --vpn-gateway-id ${VGW_ID_MAIN}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 delete-vpn-gateway --vpn-gateway-id ${VGW_ID_MAIN}

ピアリング接続 削除

コマンド
aws ec2 delete-vpc-peering-connection --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
出力
[cloudshell-user@ip-10-130-50-123 ~]$ aws ec2 delete-vpc-peering-connection --vpc-peering-connection-id ${PEERING_CONNECTION_ID}
{
    "Return": true
}

Subnet 削除

メイン

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_MAIN}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_MAIN}

ピアリング

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_PEERING}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_PEERING}

OnP

コマンド
aws ec2 delete-subnet --subnet-id ${SUBNET_ID_ONP}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-subnet --subnet-id ${SUBNET_ID_ONP}

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

メイン

コマンド
aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN} --vpc-id ${VPC_ID_MAIN}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN} --vpc-id ${VPC_ID_MAIN}

ピアリング

コマンド
aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING} --vpc-id ${VPC_ID_PEERING}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING} --vpc-id ${VPC_ID_PEERING}

OnP

コマンド
aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP} --vpc-id ${VPC_ID_ONP}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 detach-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP} --vpc-id ${VPC_ID_ONP}

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

メイン

コマンド
aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN}
出力
[cloudshell-user@ip-10-130-38-83 ~]$ aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_MAIN}

ピアリング

コマンド
aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_PEERING}

OnP

コマンド
aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-internet-gateway --internet-gateway-id ${INTERNET_GATEWAY_ID_ONP}

ルートテーブル 削除

メイン

コマンド
aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_MAIN}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_MAIN}

ピアリング

コマンド
aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_PEERING}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_PEERING}

OnP

コマンド
aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_ONP}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-route-table --route-table-id ${PUBLIC_ROUTE_ID_ONP}

VPC 削除

メイン

コマンド
aws ec2 delete-vpc --vpc-id ${VPC_ID_MAIN}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-vpc --vpc-id ${VPC_ID_MAIN}

ピアリング

コマンド
aws ec2 delete-vpc --vpc-id ${VPC_ID_PEERING}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-vpc --vpc-id ${VPC_ID_PEERING}

OnP

コマンド
aws ec2 delete-vpc --vpc-id ${VPC_ID_ONP}
出力
[cloudshell-user@ip-10-130-58-180 ~]$ aws ec2 delete-vpc --vpc-id ${VPC_ID_ONP}

3rd Partyソフトウェアのサブスクリプションのキャンセル

マネージメントコンソールから実施

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?