本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 AWS 命令行创建 T AWS ransit Gateway
在本教程中,您将学习如何使用创建公交网关并将两个 VPCs 网关连接到该 AWS CLI 网关。您将创建传输网关,连接两个网关 VPCs,然后配置必要的路由,以启用传输网关与您的之间的通信 VPCs。
先决条件
在开始之前,请确保你有:
AWS CLI 已安装并配置了适当的权限。如果您尚未 AWS CLI 安装,请参阅AWS 命令行界面文档。
既 VPCs 不能相同也不能重叠 CIDRs。有关更多信息,请参阅 Amazon VPC 用户指南中的创建 VPC。
每个 VPC 中有一个 EC2 实例。有关在 VPC 中启动 EC2 实例的步骤,请参阅 Amazon EC2 用户指南中的启动实例。
安全组配置为允许实例之间的 ICMP 流量。有关使用安全组控制流量的步骤,请参阅 Amazon VPC 用户指南中的使用安全组控制 AWS 资源流量。
使用公交网关的适当 IAM 权限。要查看公交网关 IAM 权限,请参阅AWS Transit Gateway 指南中的 Amazon VPC 传输网关中的身份和访问管理。
步数
步骤 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
),因为在后续步骤中将需要它。
步骤 2:验证传输网关可用性状态
创建公交网关时,它会处于pending
状态。状态将自动从 “待处理” 更改为 “可用”,但在状态更改 VPCs 之前,您无法附加任何状态。要验证状态,请使用新创建的公交网关 ID 和 filters 选项运行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:将您的 VPCs 连接到您的公交网关
您的传输网关可用后,使用为每个 VPC 创建一个附件create-transit-gateway-vpc-attachment
。你需要包括transit-gateway-id
vpc-id
、和subnet-ids
。
有关该create-transit-vpc attachment
命令的更多信息,请参见 create-transit-gateway-vpc-attactach。
在以下示例中,该命令运行两次,每个 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 运行与上述相同的命令,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:在您的公交网关和之间添加路线 VPCs
在每个 VPC 的路由表中配置路由,使用命令和每个 VPC 路由表中的create-route
命令将流量引导到另一个 VPC,通过中转网关将transit-gateway-id
流量引导到另一个 VPC。在以下示例中,该命令运行两次,每个路由表运行一次。该请求包括您正在创建transit-gateway-id
的每个 VPC 路由的destination-cidr-block
、和。route-table-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
与第一个 VPC destination-cidr-block
不同的和。但是,由于您只使用单个公交网关,因此使用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 块替换为您的实际 CIDR 块。 VPCs
步骤 6:测试传输网关
您可以通过连接到一个 VPC 中的实例并对另一个 VPC 中的 EC2 实例执行 ping 操作,然后运行ping
命令来确认传输网关已成功创建。
-
使用 SSH 或 Inst EC2 ance Connect 连接到第一个 VPC 中的 EC2 实例
-
Ping 第二个 VPC 中 EC2 实例的私有 IP 地址:
ping 10.2.0.50
注意
10.2.0.50
替换为第二个 VPC 中 EC2 实例的实际私有 IP 地址。
如果 ping 成功,则表示您的传输网关配置正确,并且在您之间路由流量 VPCs。
步骤 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-attactach。对于第一个附件,请运行以下命令:
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" } ] } }
结论
您已经成功创建了一个传输网关,连接了两个 VPCs 网关,在它们之间配置了路由,并验证了连通性。这个简单的示例演示了 Amazon VPC 传输网关的基本功能。对于更复杂的场景,例如连接到本地网络或实施更高级的路由配置,请参阅 Amazon VPC Transit Gateways 用户指南。