教程:使用 AWS 命令行创建 T AWS ransit Gateway - Amazon VPC

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用 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=stateValues=available配对。然后,该命令会搜索以验证您的公交网关的状态是否处于可用状态。如果是,则显示响应"State": "available"。如果它处于任何其他状态,则它尚不可用。等待几分钟,然后再运行该命令。

有关 describe-transit-gateways 命令的更多信息,请参阅describe-transit-gateways

aws ec2 describe-transit-gateways \ --transit-gateway-ids tgw-1234567890abcdef0 \ --filters Name=state,Values=available

等到中转网关状态从变pendingavailable后再继续。在以下响应中,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

运行以下命令以检查状态。在此示例中,请求中传递了可选字段NameValues过滤器字段:

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命令来确认传输网关已成功创建。

  1. 使用 SSH 或 Inst EC2 ance Connect 连接到第一个 VPC 中的 EC2 实例

  2. 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 附件和单个传输网关。

重要

删除所有公交网关附件后,您将停止产生费用。

  1. 使用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" } }
  2. 附件在被删除之前一直处于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 用户指南