

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

# 教學課程：使用 AWS 命令列建立 AWS Transit Gateway
<a name="tgw-getting-started-cli"></a>

在本教學課程中，您將了解如何使用 AWS CLI 建立傳輸閘道，並將兩個 VPCs連接到其中。您將建立傳輸閘道、連接兩個 VPCs，然後設定必要的路由，以啟用傳輸閘道與 VPCs之間的通訊。

## 先決條件
<a name="prerequisites"></a>

開始之前，請確定您已：
+ AWS CLI 已安裝並設定適當的許可。如果您沒有安裝 AWS CLI ，請參閱 *AWS 命令列界面文件*。
+ VPCs 不能有相同或重疊CIDRs。如需詳細資訊，請參閱 *Amazon VPC 使用者指南*中的[建立 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/create-vpc.html)。
+ 每個 VPC 中有一個 EC2 執行個體。如需在 VPC 中啟動 EC2 執行個體的步驟，請參閱《*Amazon EC2 使用者指南*》中的[啟動執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2_GetStarted.html#ec2-launch-instance)。
+ 設定為允許執行個體之間 ICMP 流量的安全群組。如需使用安全群組控制流量的步驟，請參閱《*Amazon VPC 使用者指南*》中的[使用安全群組控制 AWS 資源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)。
+ 使用傳輸閘道的適當 IAM 許可。若要檢查傳輸閘道 IAM 許可，請參閱《 *AWS Transit Gateway 指南*[》中的 AWS 傳輸閘道中的身分和存取管理](https://docs.aws.amazon.com/vpc/latest/tgw/transit-gateway-authentication-access-control.html)。

**Topics**
+ [先決條件](#prerequisites)
+ [步驟 1：建立傳輸閘道](#create-transit-gateway)
+ [步驟 2：驗證傳輸閘道可用性狀態](#verify-state)
+ [步驟 3：將 VPCs連接至傳輸閘道](#attach-vpcs)
+ [步驟 4：確認傳輸閘道附件可用](#configure-routes)
+ [步驟 5：新增傳輸閘道與 VPCs之間的路由](#create-routes)
+ [步驟 6：測試傳輸閘道](#test-connectivity)
+ [步驟 7：刪除傳輸閘道附件和傳輸閘道](#cleanup)
+ [結論](#conclusion)

## 步驟 1：建立傳輸閘道
<a name="create-transit-gateway"></a>

當您建立傳輸閘道時， 會 AWS 建立預設傳輸閘道路由表，並將其用作預設關聯路由表和預設傳播路由表。以下顯示 `us-west-2`區域中的範例`create-transit-gateway`請求。請求中傳遞`options`了其他 。如需 `create-transit-gateway`命令的詳細資訊，包括您可以在請求中傳遞的選項清單，請參閱 [create-transit-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/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：驗證傳輸閘道可用性狀態
<a name="verify-state"></a>

當您建立傳輸閘道時，它會處於 `pending` 狀態。狀態會從待定自動變更為可用，但在狀態變更之前，您無法連接任何 VPCs。若要驗證狀態，請使用新建立的傳輸閘道 ID 以及篩選條件選項來執行 `describe-transit-gatweways`命令。`filters` 選項使用 `Name=state`和 `Values=available`對。然後， 命令會搜尋以確認傳輸閘道的狀態是否處於可用狀態。如果是，回應會顯示 `"State": "available"`。如果處於任何其他狀態，則尚無法使用。等待幾分鐘再執行 命令。

如需 `describe-transit-gateways`命令的詳細資訊，請參閱 [describe-transit-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/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連接至傳輸閘道
<a name="attach-vpcs"></a>

一旦您的傳輸閘道可用，請使用 為每個 VPC 建立附件`create-transit-gateway-vpc-attachment`。您需要包含 `transit-gateway-id`、 `vpc-id`和 `subnet-ids`。

如需 `create-transit-vpc attachment`命令的詳細資訊，請參閱 [create-transit-gateway-vpc-attachment](https://docs.aws.amazon.com/cli/latest/reference/ec2/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：確認傳輸閘道附件可用
<a name="configure-routes"></a>

傳輸閘道附件會以初始`pending`狀態建立。在狀態變更為 之前，您將無法在路由中使用這些附件`available`。這會自動發生。使用 `describe-transit-gateways`命令以及 `transit-gateway-id`來檢查 `State`。如需 `describe-transit-gateways`命令的詳細資訊，請參閱 [describe-transit-gateways](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route)。

執行下列命令來檢查狀態。在此範例中，選用 `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之間的路由
<a name="create-routes"></a>

設定每個 VPC 路由表中的路由，使用 `create-route`命令以及每個 VPC 路由表`transit-gateway-id`的 ，透過傳輸閘道將流量導向其他 VPC。在下列範例中，命令會執行兩次，每個路由表一次。請求包含您要建立`transit-gateway-id`的每個 VPC 路由`route-table-id`的 `destination-cidr-block`、 和 。

如需 `create-route`命令的詳細資訊，請參閱 [create-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/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：測試傳輸閘道
<a name="test-connectivity"></a>

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

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

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

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

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

## 步驟 7：刪除傳輸閘道附件和傳輸閘道
<a name="cleanup"></a>

當您不再需要傳輸閘道時，您可以將其刪除。首先，您必須刪除所有附件。`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](https://docs.aws.amazon.com/cli/latest/reference/ec2/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"
       }
   }
   ```

1. 附件處於 `deleting` 狀態，直到刪除為止。刪除後，您就可以刪除傳輸閘道。使用 `delete-transit-gateway`命令搭配 `transit-gateway-id`。如需 `delete-transit-gateway`命令的詳細資訊，請參閱 [delete-transit-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/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"
               }
           ]
       }
   }
   ```

## 結論
<a name="conclusion"></a>

您已成功建立傳輸閘道、連接兩個 VPCs、設定它們之間的路由，以及已驗證的連線。這個簡單的範例示範 AWS Transit Gateways 的基本功能。如需更複雜的案例，例如連線至內部部署網路或實作更進階的路由組態，請參閱 [https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html](https://docs.aws.amazon.com/vpc/latest/tgw/what-is-transit-gateway.html)。