教學課程:使用 AWS 命令列建立 AWS Transit Gateway - Amazon VPC

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

教學課程:使用 AWS 命令列建立 AWS Transit Gateway

在本教學課程中,您將了解如何使用 AWS CLI 建立傳輸閘道,並將兩個 VPCs連接到其中。您將建立傳輸閘道、連接兩個 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 Transit Gateways 中的 ee Identity and access management

步驟 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 以及篩選條件選項來執行 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-idsubnet-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

執行下列命令來檢查狀態。在此範例中,選用 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 路由表中的路由,使用 create-route命令以及每個 VPC 路由表transit-gateway-id的 ,透過傳輸閘道將流量導向其他 VPC。在下列範例中,命令會執行兩次,每個路由表各執行一次。請求包含您要建立transit-gateway-id的每個 VPC 路由route-table-iddestination-cidr-block、 和 。

如需 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 的路由表,請執行下列命令。此路由使用與第一個 VPC destination-cidr-block 不同的 route-table-id和 。不過,由於您只使用單一傳輸閘道,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 區塊取代為 VPCs 的實際 CIDR 區塊。

步驟 6:測試傳輸閘道

您可以連線至一個 VPC 中的 EC2 執行個體,並在另一個 VPC 中 Ping 執行個體,然後執行 ping命令,以確認傳輸閘道已成功建立。

  1. 使用 SSH 或 EC2 Instance Connect 連接到第一個 VPC 中的 EC2 執行個體

  2. 在第二個 VPC 中 Ping EC2 執行個體的私有 IP 地址:

    ping 10.2.0.50
    注意

    10.2.0.50 將 取代為第二個 VPC 中 EC2 執行個體的實際私有 IP 地址。

如果 ping 成功,表示您的傳輸閘道已正確設定,並在 VPCs之間路由流量。

步驟 7:刪除傳輸閘道附件和傳輸閘道

當您不再需要傳輸閘道時,您可以將其刪除。首先,您必須刪除所有附件。針對每個附件使用 transit-gateway-attachment-id 來執行 delete-transit-gateway-vpc-attachment命令。執行 命令後,使用 delete-transit-gateway刪除傳輸閘道。針對下列項目,請刪除先前步驟中建立的兩個 VPC 連接和單一傳輸閘道。

重要

刪除所有傳輸閘道附件後,您將停止產生費用。

  1. 使用 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" } }
  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 Transit Gateways 的基本功能。如需更複雜的案例,例如連線至內部部署網路或實作更進階的路由組態,請參閱 Amazon VPC Transit Gateways 使用者指南