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?

More than 1 year has passed since last update.

2つのVPCをTransit Gatewayで接続する

Last updated at Posted at 2022-10-27

はじめに

ここで作成するのは、既存の以下のような2つのVPCを Transit Gateway で結ぶ構成です。
Single AZ 間での構成例になります。

Transit Gateway Basic (1).png

ここでは、Private Subnet 間で通信が可能になる構成を作成します。

Transit Gateway を作成する

下準備

VPC ID を取得します。

$ aws ec2 describe-vpcs | jq -r '.Vpcs[] | [.CidrBlock, .VpcId] | @csv'
"10.7.0.0/16","vpc-0e403f03014e706c3"
"10.8.0.0/16","vpc-08e6b9ecd4e90c949"
$ 

VPC ID を変数にセットします。

export VPC_ID_1=vpc-08e6b9ecd4e90c949 # 10.8.0.0/16 側
export VPC_ID_2=vpc-0e403f03014e706c3 # 10.7.0.0/16 側

両方の VPC の Private Subnet の id を調べます。

$  aws ec2 describe-subnets | jq -r '.Subnets[] | [ .CidrBlock, .SubnetId, .AvailabilityZone, .Tags[].Value ] | @csv'
"10.8.128.0/17","subnet-0d1224192eb265726","ap-northeast-1c","my-public"
"10.7.128.0/17","subnet-0a2360ce9dca34f9d","ap-northeast-1d","shared","my-public"
"10.7.0.0/17","subnet-03a000478bacb81f6","ap-northeast-1d","my-private","shared"
"10.8.0.0/17","subnet-0a4ecb7a715715c60","ap-northeast-1c","my-private"
$ 

Private Subent の ID を変数にセットします。

export VPC1_PRIVATE_SUBNET=subnet-0a4ecb7a715715c60  # 10.8.0.0/16 側
export VPC2_PRIVATE_SUBNET=subnet-03a000478bacb81f6  # 10.7.0.0/16 側

Transit Gateway / Transit Gateway Attachment の作成

Transit Gateway を作成します。

$ T_GW=`aws ec2 create-transit-gateway | jq -r .TransitGateway.TransitGatewayId`

# わかり易いようにタグを付けておく
$ aws ec2 create-tags --resources $T_GW --tags Key=Name,Value=my-transit-gateway

Transit Gateway Attachment を作成して、Trasit Gateway と VPC1 の Private サブネットに関連付けします。

$ T_GW_A_VPC1=`aws ec2 create-transit-gateway-vpc-attachment --transit-gateway-id $T_GW --vpc-id $VPC_ID_1 --subnet-ids $VPC1_PRIVATE_SUBNET | jq -r .TransitGatewayVpcAttachment.TransitGatewayAttachmentId`

# 名前を付けておく (Key=Name)
$ aws ec2 create-tags --resources $T_GW_A_VPC1 --tags Key=Name,Value=transit-gw-attachment-vpc1

Attachement 2 を VPC2に作成して、Trasit Gateway と VPC2 の Private Subnet に 関連付け

$ T_GW_A_VPC2=`aws ec2 create-transit-gateway-vpc-attachment --transit-gateway-id $T_GW --vpc-id $VPC_ID_2 --subnet-ids $VPC2_PRIVATE_SUBNET | jq -r .TransitGatewayVpcAttachment.TransitGatewayAttachmentId`

# 名前を付けておく (Key=Name)
$ aws ec2 create-tags --resources $T_GW_A_VPC2 --tags Key=Name,Value=transit-gw-attachment-vpc2

Transit Gateway の Route table Id を取得

$ T_GW_D_RT=`aws ec2 describe-transit-gateways --transit-gateway-id $T_GW | jq -r '.TransitGateways | .[] | .Options.AssociationDefaultRouteTableId'`

# 名前を付けておく (Key=Name)
$ aws ec2 create-tags --resources $T_GW_D_RT --tags Key=Name,Value=transit-gw-route-table

Route Table への Route の追加

両方の VPC の Private Subnet の Route Table に、お互いの Private Subnet への Route を追加します。

Transit Gateway Basic 2 (2).png

下準備

両方の VPC の Private Subnet の ID を調べます。

前の手順より、
VPC1 の Private Subnet ID は、subnet-0a4ecb7a715715c60
VPC2 の Private Subnet ID は、subnet-03a000478bacb81f6
です。この情報からどの行が、Private Subnet の Route Table の情報か判別できます。

$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | [ .RouteTableId, .VpcId, .Associations[].SubnetId ] | @csv'
"rtb-0c9934afb03c1c4e9","vpc-08e6b9ecd4e90c949","subnet-0a4ecb7a715715c60"  # VPC1 側 Private Subnet
"rtb-027c33000a9e9d2b2","vpc-08e6b9ecd4e90c949","subnet-0d1224192eb265726"
"rtb-04ab084be4886aa6e","vpc-0eb1b5687d2d71353","subnet-06014a65bd1377f0a"
"rtb-06d5b8fd3ed943371","vpc-0eb1b5687d2d71353","subnet-0261cabed9465687a"
"rtb-01d6d53fe26411781","vpc-0e403f03014e706c3","subnet-0a2360ce9dca34f9d"
"rtb-0cde2c29f42ae4baf","vpc-0e403f03014e706c3","subnet-03a000478bacb81f6" # VPC2 側 Private Subnet
$ 

Private Subnet の Route Table id を変数にセットします。

export VPC1_PRV_SUB_R_TABLE=rtb-0c9934afb03c1c4e9
export VPC2_PRV_SUB_R_TABLE=rtb-0cde2c29f42ae4baf

VPC1 と VPC2 の CIDR も変数にセットしておきます。

export VPC1_CIDR="10.8.0.0/16"
export VPC2_CIDR="10.7.0.0/16"

Route Table への Route の追加

VPC1 の Private Subnet の Route Table に VPC2 への Route として Transit Gateway への Route を追加

$ aws ec2 create-route --route-table-id $VPC1_PRV_SUB_R_TABLE --destination-cidr-block $VPC2_CIDR --gateway-id $T_GW

VPC2 の Private Subnet の Route Table に VPC1 への Route として Transit Gateway への Route 追加

$ aws ec2 create-route --route-table-id $VPC2_PRV_SUB_R_TABLE --destination-cidr-block $VPC1_CIDR --gateway-id $T_GW

以上で Transit Gateway の基本的な構成は完了です。お互いの Private Subnet から、相手の Private Subnet に通信が可能になります。

VPC1 の Private Subnet から VPC2の Public Subnet への通信の設定

要件によっては、さらに Route Table に Route を追加する必要があります。
ここでは、以下の赤い線の通信が可能なように Route Table に Route を追加してみます。

Copy of Transit Gateway Basic 3 (1).png

VPC1 の Private Subnet → VPC2 の Private Subnet → VPC2 のPublic Subnet というルートは存在しますが、そこまでパケットが辿り着いたとします。その後、VPC2 の Public Subnet から戻りのルートを考えると、VPC1 の Private Subnet への戻りのルートがわかりません。

これを可能にするためには、VPC2 の Public Subnet の Route Table に VPC1 の Private Subnet へのルートを追加します。

準備

Route Table の一覧の情報を出力します。

$ aws ec2 describe-route-tables | jq -r '.RouteTables[] | [ .RouteTableId, .VpcId, .Associations[].SubnetId ] | @csv'
"rtb-0c9934afb03c1c4e9","vpc-08e6b9ecd4e90c949","subnet-0a4ecb7a715715c60"  # VPC1 側 Private Subnet
"rtb-027c33000a9e9d2b2","vpc-08e6b9ecd4e90c949","subnet-0d1224192eb265726"
"rtb-04ab084be4886aa6e","vpc-0eb1b5687d2d71353","subnet-06014a65bd1377f0a"
"rtb-06d5b8fd3ed943371","vpc-0eb1b5687d2d71353","subnet-0261cabed9465687a"
"rtb-01d6d53fe26411781","vpc-0e403f03014e706c3","subnet-0a2360ce9dca34f9d" # <= VPC2 側 Public Subnet
"rtb-0cde2c29f42ae4baf","vpc-0e403f03014e706c3","subnet-03a000478bacb81f6" # VPC2 側 Private Subnet
$ 

以前の作業から、VPC2 の Private Subnet は分かっているので、VPC2の Public Subnetもすぐにわかります。

変数に VPC2の Public Route Table の IDをセットします。

export VPC2_PUB_SUB_R_TABLE=rtb-01d6d53fe26411781

ルートの追加

VPC2 の Public Subnet の Route Table に VPC1 への Route として Transit Gateway への Route 追加します。

$ aws ec2 create-route --route-table-id $VPC2_PUB_SUB_R_TABLE --destination-cidr-block $VPC1_CIDR --gateway-id $T_GW

以上で完了です。

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?