本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 Amazon 命令行创建 T Amazon ransit Gateway
在本教程中,您将学习如何使用创建公交网关并将两个 VPCs 网关连接到该 Amazon CLI 网关。您将创建传输网关,连接两个网关 VPCs,然后配置必要的路由,以启用传输网关与您的之间的通信 VPCs。
先决条件
在开始之前,请确保你有:
Amazon CLI 已安装并配置了适当的权限。如果您尚未 Amazon CLI 安装,请参阅Amazon 命令行界面文档。
既 VPCs 不能相同也不能重叠 CIDRs。有关更多信息,请参阅 Amazon VPC 用户指南中的创建 VPC。
每个 VPC 中有一个 EC2 实例。有关在 VPC 中启动 EC2 实例的步骤,请参阅 Amazon EC2 用户指南中的启动实例。
配置为允许实例之间的 ICMP 流量的安全组。有关使用安全组控制流量的步骤,请参阅 Amazon VPC 用户指南中的使用安全组控制 Amazon 资源流量。
使用公交网关的适当 IAM 权限。要查看公交网关 IAM 权限,请参阅Amazon Transit Gateway 指南中 Amazon 转网关中的身份和访问管理。
步数
步骤 1:创建中转网关
创建传输网关时, Amazon 会创建一个默认的公交网关路由表,并将其用作默认关联路由表和默认传播路由表。以下显示了该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-idvpc-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命令的更多信息,请参阅创建路由。
对于第一个 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 公交网关的基本功能。对于更复杂的场景,例如连接到本地网络或实现更高级的路由配置,请参阅 T Amazon ransit Gateways 指南。