最近、Transit Gateway について質問される場面が多々ありました。
Transit Gateway を利用すれば、複数の VPC間通信が可能になります。DirectConnect や VPN との通信も可能なため、オンプレミスと AWS 環境を接続するハイブリッドネットワーク構成でも利用されます。
説明する際には環境を見てもらった方が説明しやすい場面もあり、必要なときには Transit Gateway の実際の環境設定を見てもらいます。ただし、実際に設定するのは手間がかかるので、CloudFormation デプロイ可能な説明環境用テンプレートを準備しました。
この記事のターゲットは以下の方になります。
項 | 対象者 |
---|---|
1 | 他の人に Transit Gateway の基礎を説明したいので、説明するための環境をさくっと準備したい。 |
2 | 自分が Transit Gateway の基礎を理解したいので、確認できる環境をさくっと準備したい。 |
3 | この環境で提供される通信不可問題(3問)を確認してみたい。 |
3つ目の通信不可問題(3問)というのは実際に意識しておいたほうが良い設定箇所を3つピックアップして問題にしています。この対応を確認することで、Transit Gateway への理解が深まります。
この記事のターゲットに該当する方は、続きをお読みください。
1. 基礎的説明用テンプレート
1.1. 構成概要
基礎的説明用環境テンプレートの構成は以下の通りです。
Transit Gateway で3つの VPC が接続されている構成が作成されます。

特徴は以下の通りです。
項 | 特徴 |
---|---|
1 | CloudFormation で利用することが前提のテンプレートです。 |
2 | 3つの VPC があり、その中に複数の EC2 が存在しています。 |
3 | VPC は Transit Gateway を経由して接続されています。ただし、疎通が可能なのは VPC1 の EC2インスタンス「VPC1-AZ11-EC2」と VPC2 の EC2インスタンス「VPC2-AZ11-EC2」のみです。正常な設定の確認はその EC2間で実施できます。 |
4 | それ以外の EC2インスタンス間が通信できない原因は「通信不可問題」として原因を確認することができます。 |
5 | EC2 で許可されている通信は ICMP のみです。なお、各 EC2インスタンスのセキュリティグループとネットワークACL は適切に設定されており、「通信不可問題」の原因ではありません。 |
6 | EC2インスタンスは Linux です。OS には AWSマネジメントコンソール上から Systems Manager Session Manager を利用して接続します。 |
7 | Transit Gateway のルートテーブルはデフォルトルートテーブルを使用していません。カスタムルートテーブルで個別に設定しています。また、ルートは静的ルートで設定されています。 |
なお、「通信不可問題」に関しては、以下の通りです。基本的に VPC2 にある EC2インスタンス「VPC2-AZ11-EC2」から他の EC2インスタンスに Ping を実施して疎通確認を実施します。現状は、VPC1 の EC2インスタンス「VPC1-AZ11-EC2」としか疎通できない状況です。

1.2. テンプレート
基礎的説明用環境テンプレートは以下の通りです。
テンプレート
AWSTemplateFormatVersion: "2010-09-09"
Resources:
# VPC1 (10.1.0.0/16)
VPC1:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.1.0.0/16"
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: VPC1
# VPC2 (10.2.0.0/16)
VPC2:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.2.0.0/16"
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: VPC2
# VPC3 (10.3.0.0/16)
VPC3:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.3.0.0/16"
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: VPC3
# VPC1 のプライベートサブネット (EC2 用) AZ1-1
VPC1AZ11SubnetEC2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC1
CidrBlock: "10.1.1.0/24"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC1-AZ1-1-EC2-Subnet
# VPC1 のプライベートサブネット (EC2 用) AZ1-2
VPC1AZ12SubnetEC2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC1
CidrBlock: "10.1.11.0/24"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC1-AZ1-2-EC2-Subnet
# VPC1 のプライベートサブネット (EC2 用) AZ2-1
VPC1AZ21SubnetEC2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC1
CidrBlock: "10.1.21.0/24"
AvailabilityZone: !Select
- 1
- !GetAZs ""
Tags:
- Key: Name
Value: VPC1-AZ2-1-EC2-Subnet
# VPC1 のプライベートサブネット (TransitGateway 用) AZ1-1
VPC1AZ11SubnetTGW:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC1
CidrBlock: "10.1.2.0/28"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC1-AZ1-1-TGW-Subnet
# VPC1 のプライベートサブネット (TransitGateway 用) AZ2-1
VPC1AZ21SubnetTGW:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC1
CidrBlock: "10.1.22.0/28"
AvailabilityZone: !Select
- 1
- !GetAZs ""
Tags:
- Key: Name
Value: VPC1-AZ2-1-TGW-Subnet
# VPC1 のプライベートサブネット (TransitGateway 用) の NACL
VPC1TGWNACL:
Type: AWS::EC2::NetworkAcl
Properties:
VpcId: !Ref VPC1
Tags:
- Key: Name
Value: VPC1-TGW-Subnet-NACL
VPC1TGWNACLInbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC1TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: false
CidrBlock: 0.0.0.0/0
VPC1TGWNACLOutbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC1TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: true
CidrBlock: 0.0.0.0/0
VPC1AZ11TGWNACLAssociation:
Type: AWS::EC2::SubnetNetworkAclAssociation
Properties:
SubnetId: !Ref VPC1AZ11SubnetTGW
NetworkAclId: !Ref VPC1TGWNACL
VPC1AZ21TGWNACLAssociation:
Type: AWS::EC2::SubnetNetworkAclAssociation
Properties:
SubnetId: !Ref VPC1AZ21SubnetTGW
NetworkAclId: !Ref VPC1TGWNACL
# VPC2 のプライベートサブネット (EC2 用) AZ1
VPC2AZ11SubnetEC2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC2
CidrBlock: "10.2.1.0/24"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC2-AZ1-1-EC2-Subnet
# VPC2 のプライベートサブネット (TransitGateway 用) AZ1
VPC2AZ11SubnetTGW:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC2
CidrBlock: "10.2.2.0/28"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC2-AZ1-1-TGW-Subnet
# VPC2 のプライベートサブネット (TransitGateway 用) の NACL
VPC2TGWNACL:
Type: AWS::EC2::NetworkAcl
Properties:
VpcId: !Ref VPC2
Tags:
- Key: Name
Value: VPC2-TGW-Subnet-NACL
VPC2TGWNACLInbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC2TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: false
CidrBlock: 0.0.0.0/0
VPC2TGWNACLOutbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC2TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: true
CidrBlock: 0.0.0.0/0
VPC2AZ11TGWNACLAssociation:
Type: AWS::EC2::SubnetNetworkAclAssociation
Properties:
SubnetId: !Ref VPC2AZ11SubnetTGW
NetworkAclId: !Ref VPC2TGWNACL
# VPC3 のプライベートサブネット (EC2 用) AZ1
VPC3AZ11SubnetEC2:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC3
CidrBlock: "10.3.1.0/24"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC3-AZ1-1-EC2-Subnet
# VPC3 のプライベートサブネット (TransitGateway 用) AZ1
VPC3AZ11SubnetTGW:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref VPC3
CidrBlock: "10.3.2.0/28"
AvailabilityZone: !Select
- 0
- !GetAZs ""
Tags:
- Key: Name
Value: VPC3-AZ1-1-TGW-Subnet
# VPC3 のプライベートサブネット (TransitGateway 用) の NACL
VPC3TGWNACL:
Type: AWS::EC2::NetworkAcl
Properties:
VpcId: !Ref VPC3
Tags:
- Key: Name
Value: VPC3-TGW-Subnet-NACL
VPC3TGWNACLInbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC3TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: false
CidrBlock: 0.0.0.0/0
VPC3TGWNACLOutbound:
Type: AWS::EC2::NetworkAclEntry
Properties:
NetworkAclId: !Ref VPC3TGWNACL
RuleNumber: 100
Protocol: -1
RuleAction: allow
Egress: true
CidrBlock: 0.0.0.0/0
VPC3AZ11TGWNACLAssociation:
Type: AWS::EC2::SubnetNetworkAclAssociation
Properties:
SubnetId: !Ref VPC3AZ11SubnetTGW
NetworkAclId: !Ref VPC3TGWNACL
# Transit Gateway の作成
TransitGateway:
Type: AWS::EC2::TransitGateway
Properties:
AmazonSideAsn: 64512
DefaultRouteTableAssociation: "disable"
DefaultRouteTablePropagation: "disable"
AutoAcceptSharedAttachments: "enable"
Tags:
- Key: Name
Value: TransitGateway
# VPC1 の Transit Gateway アタッチメント
VPC1TGWAttachment:
Type: AWS::EC2::TransitGatewayVpcAttachment
Properties:
TransitGatewayId: !Ref TransitGateway
VpcId: !Ref VPC1
SubnetIds: [!Ref VPC1AZ11SubnetTGW]
Tags:
- Key: Name
Value: VPC1-Attachment
# VPC2 の Transit Gateway アタッチメント
VPC2TGWAttachment:
Type: AWS::EC2::TransitGatewayVpcAttachment
Properties:
TransitGatewayId: !Ref TransitGateway
VpcId: !Ref VPC2
SubnetIds: [!Ref VPC2AZ11SubnetTGW]
Tags:
- Key: Name
Value: VPC2-Attachment
# VPC3 の Transit Gateway アタッチメント
VPC3TGWAttachment:
Type: AWS::EC2::TransitGatewayVpcAttachment
Properties:
TransitGatewayId: !Ref TransitGateway
VpcId: !Ref VPC3
SubnetIds: [!Ref VPC3AZ11SubnetTGW]
Tags:
- Key: Name
Value: VPC3-Attachment
# VPC1 の Transit Gateway ルートテーブル
VPC1TGWRouteTable:
Type: AWS::EC2::TransitGatewayRouteTable
Properties:
TransitGatewayId: !Ref TransitGateway
Tags:
- Key: Name
Value: VPC1-TGWRouteTable
# VPC1 の Transit Gateway ルートテーブルの関連付け
VPC1TGWAssociation:
Type: AWS::EC2::TransitGatewayRouteTableAssociation
Properties:
TransitGatewayRouteTableId: !Ref VPC1TGWRouteTable
TransitGatewayAttachmentId: !Ref VPC1TGWAttachment
# VPC1 Transit Gateway ルートテーブル 静的ルートの作成 (VPC1 → VPC2)
VPC1TGWStaticRoute:
Type: AWS::EC2::TransitGatewayRoute
Properties:
TransitGatewayRouteTableId: !Ref VPC1TGWRouteTable
DestinationCidrBlock: "10.2.0.0/16"
TransitGatewayAttachmentId: !Ref VPC2TGWAttachment
# VPC2 の Transit Gateway ルートテーブル
VPC2TGWRouteTable:
Type: AWS::EC2::TransitGatewayRouteTable
Properties:
TransitGatewayId: !Ref TransitGateway
Tags:
- Key: Name
Value: VPC2-TGWRouteTable
# VPC2 の Transit Gateway ルートテーブルの関連付け
VPC2TGWAssociation:
Type: AWS::EC2::TransitGatewayRouteTableAssociation
Properties:
TransitGatewayRouteTableId: !Ref VPC2TGWRouteTable
TransitGatewayAttachmentId: !Ref VPC2TGWAttachment
# VPC2 の Transit Gateway ルートテーブル 静的ルートの作成 (VPC2 → VPC1)
VPC2TGWStaticRoute:
Type: AWS::EC2::TransitGatewayRoute
Properties:
TransitGatewayRouteTableId: !Ref VPC2TGWRouteTable
DestinationCidrBlock: "10.1.0.0/16"
TransitGatewayAttachmentId: !Ref VPC1TGWAttachment
# VPC3 の Transit Gateway ルートテーブル
VPC3TGWRouteTable:
Type: AWS::EC2::TransitGatewayRouteTable
Properties:
TransitGatewayId: !Ref TransitGateway
Tags:
- Key: Name
Value: VPC3-TGWRouteTable
# VPC3 の Transit Gateway ルートテーブルの関連付け
VPC3TGWAssociation:
Type: AWS::EC2::TransitGatewayRouteTableAssociation
Properties:
TransitGatewayRouteTableId: !Ref VPC3TGWRouteTable
TransitGatewayAttachmentId: !Ref VPC3TGWAttachment
# VPC3 の Transit Gateway ルートテーブル 静的ルートの作成 ()
# なし!
# VPC1 の SSM VPC エンドポイント用セキュリティグループ
VPC1SSMEndpointSG:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPC1
GroupDescription: "Allow HTTPS for SSM"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC1-SSM-Endpoint-SG
# VPC1 の SSM 用の VPC エンドポイント
VPC1VPCEndpointSSM:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC1
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssm"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC1AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC1SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC1-VPCEndpointSSM
VPC1VPCEndpointSSMMessages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC1
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssmmessages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC1AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC1SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC1-VPCEndpointSSMMessages
VPC1VPCEndpointEC2Messages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC1
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ec2messages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC1AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC1SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC1-VPCEndpointEC2Messages
# VPC2 の SSM VPCエンドポイント用セキュリティグループ
VPC2SSMEndpointSG:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPC2
GroupDescription: "Allow HTTPS for SSM"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC2-SSM-Endpoint-SG
# VPC2 の SSM 用の VPCエンドポイント
VPC2VPCEndpointSSM:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC2
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssm"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC2AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC2SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC2-VPCEndpointSSM
VPC2VPCEndpointSSMMessages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC2
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssmmessages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC2AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC2SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC2-VPCEndpointSSM
VPC2VPCEndpointEC2Messages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC2
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ec2messages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC2AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC2SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC2-VPCEndpointEC2Messages
# VPC3 の SSM VPCエンドポイント用セキュリティグループ
VPC3SSMEndpointSG:
Type: AWS::EC2::SecurityGroup
Properties:
VpcId: !Ref VPC3
GroupDescription: "Allow HTTPS for SSM"
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 443
ToPort: 443
CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC3-SSM-Endpoint-SG
# VPC3 の SSM 用の VPC エンドポイント
VPC3VPCEndpointSSM:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC3
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssm"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC3AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC3SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC3-VPCEndpointSSM
VPC3VPCEndpointSSMMessages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC3
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ssmmessages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC3AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC3SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC3-VPCEndpointSSM
VPC3VPCEndpointEC2Messages:
Type: AWS::EC2::VPCEndpoint
Properties:
VpcId: !Ref VPC3
ServiceName: !Sub "com.amazonaws.${AWS::Region}.ec2messages"
VpcEndpointType: Interface
SubnetIds:
- !Ref VPC3AZ11SubnetEC2
SecurityGroupIds:
- !Ref VPC3SSMEndpointSG
PrivateDnsEnabled: true
Tags:
- Key: Name
Value: VPC3-VPCEndpointEC2Messages
# IAM ロール (SSM アクセス許可)
SSMIAMRoleVPC:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: ec2.amazonaws.com
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
Tags:
- Key: Name
Value: SSMIAMRoleVPC
# IAM インスタンスプロファイル
SSMInstanceProfileVPC:
Type: AWS::IAM::InstanceProfile
Properties:
Roles:
- !Ref SSMIAMRoleVPC
# VPC1 の EC2用 の セキュリティグループ
VPC1SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: VPC1SecurityGroup
VpcId: !Ref VPC1
SecurityGroupIngress:
- IpProtocol: icmp
FromPort: -1
ToPort: -1
CidrIp: "0.0.0.0/0"
#- IpProtocol: tcp
# FromPort: 443
# ToPort: 443
# CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC1-SecurityGroup
# VPC1 の VPC1-AZ11-EC2-Instance 作成
VPC1AZ11EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
InstanceType: t3.micro
SecurityGroupIds: [!Ref VPC1SecurityGroup]
SubnetId: !Ref VPC1AZ11SubnetEC2
IamInstanceProfile: !Ref SSMInstanceProfileVPC
Tags:
- Key: Name
Value: VPC1-AZ11-EC2-Instance
# VPC1 の VPC1-AZ12-EC2-Instance 作成
VPC1AZ12EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
InstanceType: t3.micro
SecurityGroupIds: [!Ref VPC1SecurityGroup]
SubnetId: !Ref VPC1AZ12SubnetEC2
IamInstanceProfile: !Ref SSMInstanceProfileVPC
Tags:
- Key: Name
Value: VPC1-AZ12-EC2-Instance
# VPC1 の VPC1-AZ21-EC2-Instance 作成
VPC1AZ21EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
InstanceType: t3.micro
SecurityGroupIds: [!Ref VPC1SecurityGroup]
SubnetId: !Ref VPC1AZ21SubnetEC2
IamInstanceProfile: !Ref SSMInstanceProfileVPC
Tags:
- Key: Name
Value: VPC1-AZ21-EC2-Instance
# VPC2 の EC2用 の セキュリティグループ
VPC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: VPC2SecurityGroup
VpcId: !Ref VPC2
SecurityGroupIngress:
- IpProtocol: icmp
FromPort: -1
ToPort: -1
CidrIp: "0.0.0.0/0"
#- IpProtocol: tcp
# FromPort: 443
# ToPort: 443
# CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC2-SecurityGroup
# VPC2 の VPC2-AZ11-EC2-Instance 作成
VPC2AZ11EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
InstanceType: t3.micro
SecurityGroupIds: [!Ref VPC2SecurityGroup]
SubnetId: !Ref VPC2AZ11SubnetEC2
IamInstanceProfile: !Ref SSMInstanceProfileVPC
Tags:
- Key: Name
Value: VPC2-AZ11-EC2-Instance
# VPC3 の EC2用 の セキュリティグループ
VPC3SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: VPC3SecurityGroup
VpcId: !Ref VPC3
SecurityGroupIngress:
- IpProtocol: icmp
FromPort: -1
ToPort: -1
CidrIp: "0.0.0.0/0"
#- IpProtocol: tcp
# FromPort: 443
# ToPort: 443
# CidrIp: "0.0.0.0/0"
Tags:
- Key: Name
Value: VPC3-SecurityGroup
# VPC3 の VPC3-AZ11-EC2-Instance 作成
VPC3AZ11EC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}"
InstanceType: t3.micro
SecurityGroupIds: [!Ref VPC3SecurityGroup]
SubnetId: !Ref VPC3AZ11SubnetEC2
IamInstanceProfile: !Ref SSMInstanceProfileVPC
Tags:
- Key: Name
Value: VPC3-AZ11-EC2-Instance
# VPC1 の カスタムルートテーブル(EC2)
VPC1RouteTableEC2:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC1
Tags:
- Key: Name
Value: VPC1-CustomRouteTable-EC2
VPC1RouteTGW:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref VPC1RouteTableEC2
DestinationCidrBlock: "0.0.0.0/0"
TransitGatewayId: !Ref TransitGateway
DependsOn: VPC1TGWAttachment
# VPC1 の カスタムルートテーブルをサブネットに関連付け(EC2)
VPC1AZ11RouteTableAssociationEC2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC1AZ11SubnetEC2
RouteTableId: !Ref VPC1RouteTableEC2
VPC1AZ21RouteTableAssociationEC2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC1AZ21SubnetEC2
RouteTableId: !Ref VPC1RouteTableEC2
# VPC1 の カスタムルートテーブル(TGW)
VPC1RouteTableTGW:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC1
Tags:
- Key: Name
Value: VPC1-CustomRouteTable-TGW
# VPC1 の カスタムルートテーブルをサブネットに関連付け(TGW)
VPC1RouteTableAssociationTGW:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC1AZ11SubnetTGW
RouteTableId: !Ref VPC1RouteTableTGW
VPC1AZ21RouteTableAssociationTGW:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC1AZ21SubnetTGW
RouteTableId: !Ref VPC1RouteTableTGW
# VPC1AZ12 の カスタムルートテーブル(EC2)
VPC1AZ12RouteTableEC2:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC1
Tags:
- Key: Name
Value: VPC1-AZ12-CustomRouteTable-EC2
# VPC1AZ12 の カスタムルートテーブルをサブネットに関連付け(EC2)
VPC1AZ12RouteTableAssociationEC2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC1AZ12SubnetEC2
RouteTableId: !Ref VPC1AZ12RouteTableEC2
# VPC2 の カスタムルートテーブル(EC2)
VPC2RouteTableEC2:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC2
Tags:
- Key: Name
Value: VPC2-CustomRouteTable-EC2
VPC2RouteTGW:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref VPC2RouteTableEC2
DestinationCidrBlock: "0.0.0.0/0"
TransitGatewayId: !Ref TransitGateway
DependsOn: VPC1TGWAttachment
# VPC2 の カスタムルートテーブルをサブネットに関連付け(EC2)
VPC2RouteTableAssociationEC2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC2AZ11SubnetEC2
RouteTableId: !Ref VPC2RouteTableEC2
# VPC2 の カスタムルートテーブル(TGW)
VPC2RouteTableTGW:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC2
Tags:
- Key: Name
Value: VPC2-CustomRouteTable-TGW
# VPC2 の カスタムルートテーブルをサブネットに関連付け(TGW)
VPC2RouteTableAssociationTGW:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC2AZ11SubnetTGW
RouteTableId: !Ref VPC2RouteTableTGW
# VPC3 の カスタムルートテーブル(EC2)
VPC3RouteTableEC2:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC3
Tags:
- Key: Name
Value: VPC3-CustomRouteTable-EC2
VPC3RouteTGW:
Type: AWS::EC2::Route
Properties:
RouteTableId: !Ref VPC3RouteTableEC2
DestinationCidrBlock: "0.0.0.0/0"
TransitGatewayId: !Ref TransitGateway
DependsOn: VPC3TGWAttachment
# VPC3 の カスタムルートテーブルをサブネットに関連付け(EC2)
VPC3RouteTableAssociationEC2:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC3AZ11SubnetEC2
RouteTableId: !Ref VPC3RouteTableEC2
# VPC3 の カスタムルートテーブル(TGW)
VPC3RouteTableTGW:
Type: AWS::EC2::RouteTable
Properties:
VpcId: !Ref VPC3
Tags:
- Key: Name
Value: VPC3-CustomRouteTable-TGW
# VPC3 の カスタムルートテーブルをサブネットに関連付け(TGW)
VPC3RouteTableAssociationTGW:
Type: AWS::EC2::SubnetRouteTableAssociation
Properties:
SubnetId: !Ref VPC3AZ11SubnetTGW
RouteTableId: !Ref VPC3RouteTableTGW
Outputs:
VPC1CIDR:
Description: "VPC1-CidrBlock"
Value: !GetAtt VPC1.CidrBlock
VPC1AZ11EC2InstancePrivateIP:
Description: "VPC1-AZ1-1-EC2Instance-PrivateIp"
Value: !GetAtt VPC1AZ11EC2Instance.PrivateIp
VPC1AZ11EC2InstanceSessionManagerURL:
Description: "VPC1-AZ1-1-EC2Instance-Session Manager URL"
Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/systems-manager/session-manager/${VPC1AZ11EC2Instance}?region=${AWS::Region}"
VPC1AZ12EC2InstancePrivateIP:
Description: "VPC1-AZ1-2-EC2Instance-PrivateIp"
Value: !GetAtt VPC1AZ12EC2Instance.PrivateIp
VPC1AZ12EC2InstanceSessionManagerURL:
Description: "VPC1-AZ1-2-EC2Instance-Session Manager URL"
Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/systems-manager/session-manager/${VPC1AZ12EC2Instance}?region=${AWS::Region}"
VPC1AZ21EC2InstancePrivateIP:
Description: "VPC1-AZ2-1-EC2Instance-PrivateIp"
Value: !GetAtt VPC1AZ21EC2Instance.PrivateIp
VPC1AZ21EC2InstanceSessionManagerURL:
Description: "VPC1-AZ2-1-EC2Instance-Session Manager URL"
Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/systems-manager/session-manager/${VPC1AZ21EC2Instance}?region=${AWS::Region}"
# VPC2
VPC2CIDR:
Description: "VPC2-CidrBlock"
Value: !GetAtt VPC2.CidrBlock
VPC2AZ11EC2InstancePrivateIP:
Description: "VPC2-AZ1-1-EC2Instance-PrivateIp"
Value: !GetAtt VPC2AZ11EC2Instance.PrivateIp
VPC2AZ11EC2InstanceSessionManagerURL:
Description: "VPC2-AZ1-1-EC2Instance-Session Manager URL"
Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/systems-manager/session-manager/${VPC2AZ11EC2Instance}?region=${AWS::Region}"
# VPC3
VPC3CIDR:
Description: "VPC3-CidrBlock"
Value: !GetAtt VPC3.CidrBlock
VPC3AZ11EC2InstancePrivateIP:
Description: "VPC3-AZ1-1-EC2Instance-PrivateIp"
Value: !GetAtt VPC3AZ11EC2Instance.PrivateIp
VPC3AZ11EC2InstanceSessionManagerURL:
Description: "VPC3-AZ1-1-EC2Instance-Session Manager URL"
Value: !Sub "https://${AWS::Region}.console.aws.amazon.com/systems-manager/session-manager/${VPC3AZ11EC2Instance}?region=${AWS::Region}"
テンプレート利用時の注意点は以下となります。
項 | 特徴 |
---|---|
1 | テンプレートを参考にして頂いても問題ありませんが、自己責任でご利用ください。 |
2 | 基本的に東京リージョンでご利用いただくことを推奨します。 |
3 | Amazon VPC リソースのクォータ上限には注意して下さい。標準のリソース上限が5つですが、このテンプレートでは3つの VPC を作成します。最初から3つ以上の VPC が存在する場合、エラーになります。 |
4 | Systems Manager と通信するためのインタフェース VPCエンドポイントと Transit Gatewayアタッチメントを複数作成している関係上、1時間当たり50円前後の利用料が発生します。もし、1か月起動したままにすると30,000円以上になります。確認したいときに作成して、確認が終わったらすぐに削除することをお勧めします。 |
1.3. テンプレートによる環境起動方法
(1) テンプレートの内容をコピーしてファイルを作成して下さい。拡張子を .yaml とします。
(2) AWS のマネジメントコンソールで「CloudFormation」画面を開いてください。リソースを作成したいリージョンかどうかを必ず確認してください。
(3) 画面左側にあるナビゲーションペインから「スタック」を選択します。
(4)「スタックを作成」で「新しいリソースを使用(標準)」を選択します。
(5) テンプレートの設定で「テンプレートファイルのアップロード」を選択して、先ほど作成した yaml ファイルをアップロードします。「次へ」を選択します。
(6) スタック名は好きな名前を付けてください。「次へ」を選択します。
(7)「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れてください。「次へ」を選択します。
(8) 確認画面で一番下までスクロールしてください。「送信」を選択します。
(9) スタックの作成が開始してステータスが「CREATE_IN_PROGRESS」と表示されます。リソースの作成が完了するまで、しばらく待ちます。
(10) スタックの作成が完了するとステータスが「CREATE_IN_PROGRESS」と表示されます。これで環境を利用することができます。
1.4. 起動環境のEC2インスタンスへの接続方法
環境が作成された時点で5台の EC2インスタンスが起動している状態です。
起動後の EC2 には Systems Manager Session Manager を利用して接続できます。
(1) AWS のマネジメントコンソールで「CloudFormation」画面を開いてください。
(2) 画面左側にあるナビゲーションペインから「スタック」を選択します。
(3) 先ほどデプロイした「スタック名」を選択します。
(5) 出力画面が表示されます。ここでは接続確認に必要な情報が表示されています。

表示される情報は以下の通りです。
キー | 値 |
---|---|
VPC1CIDR | 10.1.0.0/16 |
VPC1AZ11EC2InstancePrivateIP | VPC1のAZ11に起動したEC2のプライベートIPアドレス |
VPC1AZ11EC2InstanceSessionManagerURL | VPC1のAZ11に起動したEC2の Session Manager 接続URL |
VPC1AZ12EC2InstancePrivateIP | VPC1のAZ12に起動したEC2のプライベートIPアドレス |
VPC1AZ12EC2InstanceSessionManagerURL | VPC1のAZ12に起動したEC2の Session Manager 接続URL |
VPC1AZ21EC2InstancePrivateIP | VPC1のAZ21に起動したEC2のプライベートIPアドレス |
VPC1AZ21EC2InstanceSessionManagerURL | VPC1のAZ21に起動したEC2の Session Manager 接続URL |
VPC2CIDR | 10.2.0.0/16 |
VPC2AZ11EC2InstancePrivateIP | VPC2のAZ11に起動したEC2のプライベートIPアドレス |
VPC2AZ11EC2InstanceSessionManagerURL | VPC2のAZ11に起動したEC2の Session Manager 接続URL |
VPC3CIDR | 10.3.0.0/16 |
VPC3AZ11EC2InstancePrivateIP | VPC3のAZ11に起動したEC2のプライベートIPアドレス |
VPC3AZ11EC2InstanceSessionManagerURL | VPC3のAZ11に起動したEC2の Session Manager 接続URL |
最初に説明した通り、現状 Ping が通るのは、VPC2 にある EC2インスタンス「VPC2-AZ11-EC2」から VPC1 にある EC2インスタンス「VPC1-AZ11-EC2」のみです。

それでは、EC2インスタンス「VPC2-AZ11-EC2」から EC2インスタンス「VPC1-AZ11-EC2」への Ping による疎通を確認してみます。
(6) EC2インスタンス「VPC2-AZ11-EC2」にアクセスします。
出力された中のキー「VPC2AZ11EC2InstanceSessionManagerURL」の値の URL を選択してください。
EC2インスタンス「VPC2-AZ11-EC2」にアクセスできます。
(7) 出力画面でキー「VPC1AZ11EC2InstancePrivateIP」の値に記載された IPアドレスを確認します。これが、EC2インスタンス「VPC1-AZ1-1-EC2Instance」のプライベート IP アドレスになります。
(8) EC2インスタンス「VPC2-AZ11-EC2」から EC2インスタンス「VPC1-AZ11-EC2」に対して Ping を実行します。
ping -c 5 "VPC1-AZ11-EC2 のプライベートIP"
(9) 問題なく Ping が通ることを確認します。
1.5. 起動環境の 終了方法
確認が完了して、起動環境を終了したい場合は以下の手順を実施します。
(1) AWS のマネジメントコンソールで「CloudFormation」画面を開いてください。
(2) 画面左側にあるナビゲーションペインから「スタック」を選択します。
(3) 先ほどデプロイした「スタック名」を選択します。
(6) スタックの削除が開始してステータスが「DELETE_IN_PROGRESS」と表示されます。リソースの削除が完了するまで、しばらく待ちます。
(7) スタックの削除が完了するとスタック一覧に対象のスタックが表示されなくなります。
補足
起動後にリソースを追加したり変更した場合、削除時にエラーとなる場合があります。その場合は、追加リソースを個別に削除して再度削除処理を実施してください。
2. 基礎的説明用環境テンプレートによる Transit Gateway 通信不可問題
4つのEC2のうち1つが正常にアクセス可能な状況であり、残り3つは接続できない状況です。
2.1. 説明テンプレートによる Transit Gateway 通信不可問題の説明
現在、以下の通り Transit Gateway で接続された複数の VPC 環境が存在します。
VPC2 にある EC2インスタンス「VPC2-AZ11-EC2」にログインして、Ping を実行して疎通確認を実施してください。その結果、VPC1 にある EC2インスタンス「VPC1-AZ11-EC2」のみは応答がありますが、それ以外の 3つの EC2インスタンスからは応答がありません。

疎通できない 3つの EC2インスタンスには、疎通するために必要な設定が一部漏れています。CloudFormation で環境をデプロイされた方は、設定を確認して原因を特定してみてください。原因はすべて異なります。
2.2. EC2「VPC1-AZ12-EC2」への通信不可問題
VPC2 の EC2インスタンス「VPC2-AZ11-EC2」から EC2インスタンス「VPC1-AZ12-EC2」への Ping が通らない問題です。

2.2.1. 問題点
2.2.2. 原因
原因
原因は、VPC1 側の EC2インスタンス「VPC1-AZ12-EC2」が存在するサブネットのルートテーブルの設定に不足があるためです。
EC2インスタンス「VPC1-AZ12-EC2」が Transit Gateway 経由で通信するためには、サブネットのルートテーブル上にそのためのルートが必要です。現在、そのためのルートが設定されていません。
一連の通信の流れを図式化すると以下のようになります。
この経路上のどこかに問題があれば通信ができなくなるわけですが、今回は赤色になっている「VPC1-Subnet-EC2-RootTable」の設定に問題があります。
実際に想定通りの経路で通信できているのか確認するためのサービスとして VPC の機能の1つ「Network Manager」があります。その中の「Reachability Analyzer」を利用すると、送信元と送信先の間の通信経路を可視化できます。万一、設定に問題があって疎通できない場合は、その問題解決に寄与します。
ただし、プロトコルとしては TCP と UDP を指定することができますが、ICMP は指定できません。もしこの環境の経路確認に利用される場合は、EC2インスタンスのセキュリティグループの設定で、TCP プトロコルの通信を許可するように設定変更してください。現状は ICMP のみを許可しています。
2.2.3. 対策
具体的な対策手順
(1) AWS のマネジメントコンソールで「VPC」画面を開いてください。
(2) 画面左側にあるナビゲーションペインから「ルートテーブル」を選択する。
(3) 検索画面で「VPC1-AZ12-CustomRouteTable-EC2」と入力します。これが、EC2インスタンス「VPC1-AZ12-EC2」が存在するサブネットのルートテーブルです。
(4) 対象のルートテーブルの「ルートテーブルID」を選択します。以下のルート画面が表示されます。Transit Gateway へのルートがありません。
(5) 「ルートを編集」を選択します。
(6) Transit Gateway へのルートを追加します。
送信先「0.0.0.0/0」、ターゲット「Transit Gateway (VPC1-Attachment)」選択します。設定できたら「変更を保存」を選択します。
(9) AWS Session Manager で EC2インスタンス「VPC2-AZ11-EC2」に接続します。
EC2インスタンス「VPC2-AZ11-EC2」からEC2インスタンス「VPC1-AZ12-EC2」に対して Ping を実行します。
ping -c 5 "VPC1-AZ12-EC2 のプライベートIP"
(10) 問題なく Ping が通ることを確認します。
2.3. EC2「VPC1-AZ21-EC2」への通信不可問題
VPC2 の EC2インスタンス「VPC2-AZ11-EC2」から EC2インスタンス「VPC1-AZ21-EC2」への Ping が通らない問題です。

2.3.1. 問題点
問題点
疎通を確認すると、往路は問題なく、復路に問題があります。 VPC1の EC2インスタンス「VPC1-AZ21-EC2」から「Transit Gateway」への通信に問題があります。そして、2.2.で問題だったサブネットのルートテーブルは問題なく設定されているので、それ以外の設定が原因です。
2.3.2. 原因
原因
原因は、EC2インスタンス「VPC1-AZ21-EC2」が存在するサブネットの Availability Zone に Transit Gateway の ENI が存在しないためです。
同じ VPC 内の他のサブネットに Transit Gateway の ENI が存在しますが、Availability Zone が異なると利用できません。
一連の通信の流れを図式化すると以下のようになります。
赤色になっている「TGW-VPC2-Attachment」の設定で EC2 の存在する Availability Zone 以外の設定がされているため、EC2 の存在する Availability Zone には Transit Gateway の ENI が無い状況です。これでは通信ができません。
2.3.3. 対策
対策
EC2インスタンス「VPC1-AZ21-EC2」が存在するサブネットの Availability Zone に Transit Gateway 用のサブネットを作成して、Transit Gateway の ENIを作成することで、疎通が可能になります。
一連の通信の見直し後の流れを図式化すると以下のようになります。先ほどと異なり、EC2インスタンスと同じAvailability Zone に サブネットを準備します。
具体的な対策手順
この環境では、すでにサブネット「VPC1-AZ2-1-TGW-Subnet」が作成済みです。EC2インスタンス「VPC1-AZ21-EC2」と同じ Availability Zone に作成されています。ただし、Transit Gateway の ENI は未作成のため、作成する必要があります。
(1) AWS のマネジメントコンソールで「VPC」画面を開いてください。
(2) 画面左側にあるナビゲーションペインから「Transit Gateway アタッチメント」を選択します。
(3) 検索画面で「VPC1-Attachment」と入力します。これは、VPC1 のアタッチメントです。
(4) 対象のアタッチメントの「Transit Gateway アタッチメント ID」を選択します。アタッチメントの詳細画面が表示されます。
(5) 「アクション」から「Transit Gateway アタッチメントを変更」を選択します。
(6) 変更画面を確認すると、サブネットの指定で 1つの Availability Zone しか選択されていないことが分かります。これが疎通できない原因です。
(7) 2つ目の Availability Zone にチェックを入れます。サブネット「VPC1-AZ2-1-TGW-Subnet」を指定して、「Transit Gateway アタッチメントを変更」を選択します。
(8) 「VPC1-Attachment」で新しい ENI を作成する処理が開始します。状態が「Modifying(変更中)」となり、数分程度処理が実施されます。
数分経過すると「Available(利用可能)」に更新されます。
(9) AWS Session Manager でEC2インスタンス「VPC2-AZ11-EC2」に接続します。
(10) EC2インスタンス「VPC2-AZ11-EC2」からEC2インスタンス「VPC1-AZ21-EC2」に対して Ping を実行します。
ping -c 5 "VPC1-AZ21-EC2 のプライベートIP"
(11) 問題なく Ping が通ることを確認します。
2.4. EC2「VPC3-AZ11-EC2」への通信不可問題
VPC2 の EC2インスタンス「VPC2-AZ11-EC2」から EC2インスタンス「VPC3-AZ11-EC2」への Ping が通らない問題です。

2.4.1. 問題点
2.4.2. 原因
原因
原因は、Transit Gateway のルートテーブルに VPC3 に関するルート設定がされていないためです。
まず、VPC2-Attachment に関しては VPC1 にルーティングする設定がされていますが、VPC3 へのルーティング設定がされていません。
そして、VPC3-Attachment に関しては ルート設定が入っていない状態です。
これでは、VPC3は Transit Gateway を経由して送受信ができない状況となっています。
EC2インスタンス「VPC1-AZ11-EC2」が Transit Gateway 経由で通信するためには、 Transit Gateway のルートテーブル上にそのためのルートが必要です。現在、そのためのルートが設定されていません。
一連の通信の流れを図式化すると以下のようになります。
赤色になっている「TGW-RootTable」の設定に問題があります。
2.4.3. 対策
対策
Transit Gateway ルートテーブルに、VPC3 に関する送信・受信両方の設定を実施することで、VPC2にある EC2インスタンス「VPC2-AZ11-EC2」との疎通が可能になります。
具体的な対策手順
まず、VPC2 から VPC3 への通信を可能にする設定を Transit Gateway ルートテーブルに実施します。(1) AWS のマネジメントコンソールで「VPC」画面を開いてください。
(2) 画面左側にあるナビゲーションペインから「Transit Gateway ルートテーブル」を選択する。
(3) 検索画面で「VPC2-TGWRouteTable」と入力します。これが、VPC2Attachment用のルートテーブルです。
(4) 対象のルートテーブルの「Transit Gateway ルートテーブル ID」を選択します。
(5) ルートテーブルの詳細画面で「ルート」タブを選択します。以下の通り VPC2 から VPC1 (10.1.0.0/16) に対するルートのみが定義されていることが分かります。VPC3へのルートがないので追加する必要があります。

(6) 「静的ルートを作成」を選択します。CIDR に「10.3.0.0/16」(VPC3 の CIDR) と入力します。タイプは「アクティブ」を選択します。アタッチメントを選択は「VPC3-Attachment」を選択します。
「静的ルートを作成」を選択します。
(7) 以下の通りルートが追加されます。これで、VPC2 からは VPC1 と VPC3 への通信が可能になります。
次に、VPC3 から VPC2 への通信を可能にする設定を Transit Gateway ルートテーブルに実施します。
(8) AWS のマネジメントコンソールで「VPC」画面を開いてください。
(9) 画面左側にあるナビゲーションペインから「Transit Gateway ルートテーブル」を選択する。
(10) 検索画面で「VPC3-TGWRouteTable」と入力します。これが、VPC3Attachment用のルートテーブルです。
(11) 対象のルートテーブルの「Transit Gateway ルートテーブル ID」を選択します。
(12) ルートテーブルの詳細画面で「ルート」タブを選択します。以下の通りルートが何も設定されていません。
(13)「静的ルートを作成」を選択します。CIDR に「10.2.0.0/16」(VPC2 の CIDR) と入力します。タイプは「アクティブ」を選択します。アタッチメントを選択は「VPC2-Attachment」を選択します。
「静的ルートを作成」を選択します。
(14) 以下の通りルートが追加されます。これで、VPC3 からは VPC2 への通信が可能になります。
(15) AWS Session Manager でEC2インスタンス「VPC2-AZ11-EC2」に接続します。
(16) EC2インスタンス「VPC3-AZ11-EC2」に対して Ping を実行します。
ping -c 5 "VPC3-AZ11-EC2 のプライベートIP"
(17) 問題なく Ping が通ることを確認します。
2.5. 説明テンプレートによる Transit Gateway 通信不可問題のまとめ
この章では3つの問題について解説しました。
まとめ
今回は、VPCサブネットのルートテーブルの問題、Availability Zone の問題、Transit Gateway ルートテーブルの問題の3つでした。
ルーティングの設定は、資料を読むだけで詳細まで理解するのは難しいです。今回の環境を利用いただいて実際の設定を確認の上、理解を深めてください。
3. まとめ
Transit Gateway の基礎的説明用環境をさくっと利用したいという方はご活用ください。
※ 記載内容は個人的なものであり、所属する企業や組織、団体を代表する見解その他ではありません。