本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 AWS 命令行来创建 AWS Transit Gateway
在本教程中,您将学习如何使用 AWS CLI 来创建一个转发网关,并将两个 VPC 连接到该网关。您将创建中转网关,将两个 VPC 附加至该网关,然后配置必要的路由,以实现中转网关与您的 VPC 之间的通信。
先决条件
开始之前,请确保您已具备以下条件:
AWS CLI 已安装并配置适当的权限。若您尚未安装 AWS CLI,请参阅 AWS 命令行界面文档。
这些 VPC 的 CIDR 既不能完全相同,也不能存在重叠。有关更多信息,请参阅 Amazon VPC 用户指南中的创建 VPC。
每个 VPC 中只有一个 EC2 实例。有关在 VPC 中启动 EC2 实例的步骤,请参阅 《Amazon EC2 用户指南》中的启动实例。
安全组配置为允许实例之间的 ICMP 流量。有关安全组的更多信息,请参阅《Amazon VPC 用户指南》中的使用安全组来控制指向 AWS 资源的流量。
为使用中转网关授予适当的 IAM 权限。要查看中转网关 IAM 权限,请参阅《AWS Transit Gateway 指南》中的AWS Transit Gateway 的身份和访问管理。
步骤
步骤 1:创建中转网关
当您创建中转网关时,AWS 会创建一个默认的中转网关路由表,并将其用作默认的关联路由表和默认的传播路由表。以下是一个在 us-west-2 区域中的 create-transit-gateway 请求示例。该请求中还传递了其他 options。有关 create-transit-gateway 命令的更多信息(包括请求中可传递的选项的列表),请参阅 create-transit-gateway。
aws ec2 create-transit-gateway \ --description "My Transit Gateway" \ --region us-west-2
响应将显示“中转网关已创建”。响应中返回的 Options 均为默认值。
{ "TransitGateway": { "TransitGatewayId": "tgw-1234567890abcdef0", "TransitGatewayArn": "arn:aws:ec2:us-west-2:123456789012:transit-gateway/tgw-1234567890abcdef0", "State": "pending", "OwnerId": "123456789012", "Description": "My Transit Gateway", "CreationTime": "2025-06-23T17:39:33+00:00", "Options": { "AmazonSideAsn": 64512, "AutoAcceptSharedAttachments": "disable", "DefaultRouteTableAssociation": "enable", "AssociationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "DefaultRouteTablePropagation": "enable", "PropagationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "VpnEcmpSupport": "enable", "DnsSupport": "enable", "SecurityGroupReferencingSupport": "disable", "MulticastSupport": "disable" } } }
注意
此命令将返回有关您新创建的中转网关的信息,包括其 ID。请记下中转网关 ID (tgw-1234567890abcdef0),后续步骤中将需要使用该 ID。
步骤 2:验证中转网关可用性状态
创建中转网关时,该网关将处于 pending 状态。该状态会自动从“待处理”变更为“可用”,但在状态变更前,您无法将其附加到任何 VPC。要验证状态,请使用新创建的中转网关 ID,配合筛选条件选项来运行 describe-transit-gatweways 命令。该 filters 选项采用 Name=state 和 Values=available 对的形式。该命令将据此检索并验证您的中转网关是否处于“可用”状态。如果是,则响应会显示 "State": "available"。若处于其他状态,则表示该网关尚未可供使用。等待几分钟,然后再运行该命令。
有关 describe-transit-gateways 命令的更多信息,请参阅 describe-transit-gateways。
aws ec2 describe-transit-gateways \ --transit-gateway-ids tgw-1234567890abcdef0 \ --filters Name=state,Values=available
请等待中转网关状态从 pending 变为 available 后再继续操作。在以下响应中,State 已变更为 available。
{ "TransitGateways": [ { "TransitGatewayId": "tgw-1234567890abcdef0", "TransitGatewayArn": "arn:aws:ec2:us-west-2:123456789012:transit-gateway/tgw-1234567890abcdef0", "State": "available", "OwnerId": "123456789012", "Description": "My Transit Gateway", "CreationTime": "2022-04-20T19:58:25+00:00", "Options": { "AmazonSideAsn": 64512, "AutoAcceptSharedAttachments": "disable", "DefaultRouteTableAssociation": "enable", "AssociationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "DefaultRouteTablePropagation": "enable", "PropagationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "VpnEcmpSupport": "enable", "DnsSupport": "enable", "SecurityGroupReferencingSupport": "disable", "MulticastSupport": "disable" }, "Tags": [ { "Key": "Name", "Value": "example-transit-gateway" } ] } ] }
步骤 3:将 VPC 连接到中转网关
当中转网关可用时,使用 create-transit-gateway-vpc-attachment 来为每个 VPC 创建连接。您需要包含 transit-gateway-id、vpc-id 和 subnet-ids。
有关 create-transit-vpc attachment 命令的更多信息,请参阅 create-transit-gateway-vpc-attachment。
在以下示例中,该命令运行两次,每次针对一个 VPC。
对于第一个 VPC,请使用第一个 vpc_id 和 subnet-ids 来运行以下命令:
aws ec2 create-transit-gateway-vpc-attachment \ --transit-gateway-id tgw-1234567890abcdef0 \ --vpc-id vpc-1234567890abcdef0 \ --subnet-ids subnet-1234567890abcdef0
响应显示“连接成功创建”。所创建的连接处于 pending 状态。无需更改此状态,因为它会自动变为 available 状态。这可能需要花几分钟的时间。
{ "TransitGatewayVpcAttachment": { "TransitGatewayAttachmentId": "tgw-attach-1234567890abcdef0", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-1234567890abcdef0", "VpcOwnerId": "123456789012", "State": "pending", "SubnetIds": [ "subnet-1234567890abcdef0", "subnet-abcdef1234567890" ], "CreationTime": "2025-06-23T18:35:11+00:00", "Options": { "DnsSupport": "enable", "SecurityGroupReferencingSupport": "enable", "Ipv6Support": "disable", "ApplianceModeSupport": "disable" } } }
对于第二个 VPC,请使用第二个 vpc_id 和 subnet-ids 来运行与上述相同的命令:
aws ec2 create-transit-gateway-vpc-attachment \ --transit-gateway-id tgw-1234567890abcdef0 \ --vpc-id vpc-abcdef1234567890 \ --subnet-ids subnet-abcdef01234567890
此命令的响应也显示“连接成功创建”,且该连接当前处于 pending 状态。
{ { "TransitGatewayVpcAttachment": { "TransitGatewayAttachmentId": "tgw-attach-abcdef1234567890", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-abcdef1234567890", "VpcOwnerId": "123456789012", "State": "pending", "SubnetIds": [ "subnet-fedcba0987654321", "subnet-0987654321fedcba" ], "CreationTime": "2025-06-23T18:42:56+00:00", "Options": { "DnsSupport": "enable", "SecurityGroupReferencingSupport": "enable", "Ipv6Support": "disable", "ApplianceModeSupport": "disable" } } }
步骤 4:验证中转网关连接是否可用
中转网关连接在创建时处于 pending 状态。在状态变更为 available 之前,您无法在路由中使用这些连接。此操作将自动进行。使用 describe-transit-gateways 命令,配合 transit-gateway-id 来检查 State。有关 describe-transit-gateways 命令的更多信息,请参阅 describe-transit-gateways。
运行以下命令以检查状态。在此示例中,请求中传递了可选的 Name 和 Values 筛选条件字段:
aws ec2 describe-transit-gateway-vpc-attachments \ --filters Name=transit-gateway-id,Values=tgw-1234567890abcdef0
以下响应显示两个连接均处于 available 状态:
{ "TransitGatewayVpcAttachments": [ { "TransitGatewayAttachmentId": "tgw-attach-1234567890abcdef0", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-1234567890abcdef0", "VpcOwnerId": "123456789012", "State": "available", "SubnetIds": [ "subnet-1234567890abcdef0", "subnet-abcdef1234567890" ], "CreationTime": "2025-06-23T18:35:11+00:00", "Options": { "DnsSupport": "enable", "SecurityGroupReferencingSupport": "enable", "Ipv6Support": "disable", "ApplianceModeSupport": "disable" }, "Tags": [] }, { "TransitGatewayAttachmentId": "tgw-attach-abcdef1234567890", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-abcdef1234567890", "VpcOwnerId": "123456789012", "State": "available", "SubnetIds": [ "subnet-fedcba0987654321", "subnet-0987654321fedcba" ], "CreationTime": "2025-06-23T18:42:56+00:00", "Options": { "DnsSupport": "enable", "SecurityGroupReferencingSupport": "enable", "Ipv6Support": "disable", "ApplianceModeSupport": "disable" }, "Tags": [] } ] }
步骤 5:在中转网关与 VPC 之间添加路由
在每个 VPC 的路由表中配置路由,使用 create-route 命令配合每个 VPC 路由表的 transit-gateway-id,将流量通过中转网关导向其他 VPC。在以下示例中,该命令运行两次,每次针对一个路由表。该请求包含您正在创建的每个 VPC 路由的 route-table-id、destination-cidr-block 和 transit-gateway-id。
有关 create-route 命令的更多信息,请参阅 create-route。
对于第一个 VPC 的路由表,运行以下命令:
aws ec2 create-route \ --route-table-id rtb-1234567890abcdef0 \ --destination-cidr-block 10.2.0.0/16 \ --transit-gateway-id tgw-1234567890abcdef0
对于第二个 VPC 的路由表,运行以下命令。此路由使用的 route-table-id 和 destination-cidr-block 与第一个 VPC 不同。但由于您仅使用单个中转网关,因此使用相同的 transit-gateway-id。
aws ec2 create-route \ --route-table-id rtb-abcdef1234567890 \ --destination-cidr-block 10.1.0.0/16 \ --transit-gateway-id tgw-1234567890abcdef0
响应返回每个路由的 true 值,表明路由已创建。
{ "Return": true }
注意
将目标 CIDR 数据块替换为您 VPC 的实际 CIDR 数据块。
步骤 6:测试中转网关
您可以通过以下方式确认中转网关已成功创建:连接到一个 VPC 中的 EC2 实例,Ping 另一个 VPC 中的实例,然后运行 ping 命令。
-
使用 SSH 或 EC2 Instance Connect 连接到第一个 VPC 中的 EC2 实例。
-
Ping 第二个 VPC 中 EC2 实例的私有 IP 地址:
ping 10.2.0.50注意
请将
10.2.0.50替换为第二个 VPC 中您 EC2 实例的实际私有 IP 地址。
如果 Ping 操作成功,则表明您的中转网关配置正确,并已在 VPC 之间路由流量。
步骤 7:删除中转网关连接和中转网关。
当您不再需要中转网关时,可以将其删除。首先,您必须删除所有连接。运行 delete-transit-gateway-vpc-attachment 命令,对每个连接使用 transit-gateway-attachment-id。运行命令后,使用 delete-transit-gateway 来删除中转网关。接下来,删除在先前步骤中创建的两个 VPC 连接和单个中转网关。
重要
删除所有中转网关连接后,您将不会再产生费用。
-
使用
delete-transit-gateway-vpc-attachment命令来删除 VPC 连接。有关delete-transit-gateway-vpc-attachment命令的更多信息,请参阅 delete-transit-gateway-vpc-attachment。对于第一个连接,运行以下命令:
aws ec2 delete-transit-gateway-vpc-attachment \ --transit-gateway-attachment-id tgw-attach-1234567890abcdef0第一个 VPC 连接的删除响应将返回以下内容:
{ "TransitGatewayVpcAttachment": { "TransitGatewayAttachmentId": "tgw-attach-1234567890abcdef0", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-abcdef1234567890", "VpcOwnerId": "123456789012", "State": "deleting", "CreationTime": "2025-06-23T18:42:56+00:00" } }对于第二个连接,运行
delete-transit-gateway-vpc-attachment命令:aws ec2 delete-transit-gateway-vpc-attachment \ --transit-gateway-attachment-id tgw-attach-abcdef1234567890第二个 VPC 连接的删除响应将返回以下内容:
The response returns: { "TransitGatewayVpcAttachment": { "TransitGatewayAttachmentId": "tgw-attach-abcdef1234567890", "TransitGatewayId": "tgw-1234567890abcdef0", "VpcId": "vpc-abcdef1234567890", "VpcOwnerId": "123456789012", "State": "deleting", "CreationTime": "2025-06-23T18:42:56+00:00" } } -
连接在被删除前一直处于
deleting状态。删除后,您便可以删除中转网关。使用delete-transit-gateway命令并结合transit-gateway-id。有关delete-transit-gateway命令的更多信息,请参阅 delete-transit-gateway。以下示例将删除您在上一步骤中创建的
My Transit Gateway:aws ec2 delete-transit-gateway \ --transit-gateway-id tgw-1234567890abcdef0以下是请求的响应,其中包含被删除的中转网关 ID 和名称,以及创建该网关时设置的原始选项。
{ "TransitGateway": { "TransitGatewayId": "tgw-1234567890abcdef0", "TransitGatewayArn": "arn:aws:ec2:us-west-2:123456789012:transit-gateway/tgw-1234567890abcdef0", "State": "deleting", "OwnerId": "123456789012", "Description": "My Transit Gateway", "CreationTime": "2025-06-23T17:39:33+00:00", "Options": { "AmazonSideAsn": 64512, "AutoAcceptSharedAttachments": "disable", "DefaultRouteTableAssociation": "enable", "AssociationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "DefaultRouteTablePropagation": "enable", "PropagationDefaultRouteTableId": "tgw-rtb-abcdef1234567890a", "VpnEcmpSupport": "enable", "DnsSupport": "enable", "SecurityGroupReferencingSupport": "disable", "MulticastSupport": "disable" }, "Tags": [ { "Key": "Name", "Value": "example-transit-gateway" } ] } }
结论
您已成功创建中转网关,将其连接至两个 VPC,配置了这两个 VPC 之间的路由,并验证了连接性。此示例简要展示了 AWS Transit Gateway 的基本功能。对于更复杂的场景,例如连接到本地网络或实施更高级的路由配置,请参阅《AWS Transit Gateway 指南》。