

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

# 教程：使用 AWS 命令行创建 T AWS ransit Gateway
<a name="tgw-getting-started-cli"></a>

在本教程中，您将学习如何使用创建公交网关并将两个 VPCs 网关连接到该 AWS CLI 网关。您将创建传输网关，连接两个网关 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`)，后续步骤中将需要使用该 ID。

## 步骤 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>

当中转网关可用时，使用 `create-transit-gateway-vpc-attachment` 来为每个 VPC 创建连接。您需要包含 `transit-gateway-id`、`vpc-id` 和 `subnet-ids`。

有关该`create-transit-vpc attachment`命令的更多信息，请参见 [create-transit-gateway-vpc-attactach。](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。在以下示例中，该命令运行两次，每次针对一个路由表。该请求包含您正在创建的每个 VPC 路由的 `route-table-id`、`destination-cidr-block` 和 `transit-gateway-id`。

有关 `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 的路由表，运行以下命令。此路由使用的 `route-table-id` 和 `destination-cidr-block` 与第一个 VPC 不同。但由于您仅使用单个中转网关，因此使用相同的 `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：测试传输网关
<a name="test-connectivity"></a>

您可以通过以下方式确认中转网关已成功创建：连接到一个 VPC 中的 EC2 实例，Ping 另一个 VPC 中的实例，然后运行 `ping` 命令。

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

1. Ping 第二个 VPC 中 EC2 实例的私有 IP 地址：

   ```
   ping 10.2.0.50
   ```
**注意**  
请将 `10.2.0.50` 替换为第二个 VPC 中您 EC2 实例的实际私有 IP 地址。

如果 ping 成功，则表示您的传输网关配置正确，并且在您之间路由流量 VPCs。

## 步骤 7：删除中转网关连接和中转网关。
<a name="cleanup"></a>

当您不再需要中转网关时，可以将其删除。首先，您必须删除所有连接。运行 `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。](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 公交网关的基本功能。对于更复杂的场景，例如连接到本地网络或实施更高级的路由配置，请参阅[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)。