本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:使用 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=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-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:新增傳輸閘道與 VPCs之間的路由
設定每個 VPC 路由表中的路由,使用 create-route
命令以及每個 VPC 路由表transit-gateway-id
的 ,透過傳輸閘道將流量導向其他 VPC。在下列範例中,命令會執行兩次,每個路由表各執行一次。請求包含您要建立transit-gateway-id
的每個 VPC 路由route-table-id
的 destination-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
命令,以確認傳輸閘道已成功建立。
-
使用 SSH 或 EC2 Instance Connect 連接到第一個 VPC 中的 EC2 執行個體
-
在第二個 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 連接和單一傳輸閘道。
重要
刪除所有傳輸閘道附件後,您將停止產生費用。
-
使用
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" } ] } }
結論
您已成功建立傳輸閘道、連接兩個 VPCs、設定它們之間的路由,以及已驗證的連線。這個簡單的範例示範 Amazon VPC Transit Gateways 的基本功能。如需更複雜的案例,例如連線至內部部署網路或實作更進階的路由組態,請參閱 Amazon VPC Transit Gateways 使用者指南。