

# 创建 VPC
<a name="create-vpc"></a>

按照以下过程创建虚拟私有云（VPC）。VPC 必须有额外的资源，例如子网、路由表和网关，然后才能在 VPC 中创建 AWS 资源。

**Topics**
+ [创建 VPC 以及其他 VPC 资源](#create-vpc-and-other-resources)
+ [仅创建 VPC](#create-vpc-only)
+ [使用 AWS CLI 创建 VPC](#create-vpc-cli)

有关修改 VPC 的信息，请参阅[将 CIDR 块添加到 VPC 或从中删除](add-ipv4-cidr.md)。

## 创建 VPC 以及其他 VPC 资源
<a name="create-vpc-and-other-resources"></a>

按照以下过程创建 VPC 以及运行应用程序所需的其他 VPC 资源，例如子网、路由表、互联网网关和 NAT 网关。有关 VPC 示例配置，请参阅 [VPC 示例](vpc-examples-intro.md)。

**使用控制台创建 VPC、子网和其他 VPC 资源**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在 VPC 控制面板上，选择**创建 VPC**。

1. 对于 **Resources to create**（要创建的资源），选择 **VPC and more**（VPC 等）。

1. 保持选中**名称标签自动生成**以为 VPC 资源创建名称标签，或者清除此选项以为 VPC 资源提供您自己的名称标签。

1. 对于 **IPv4 CIDR 块**，输入 VPC 的 IPv4 地址范围。VPC 必须具有一个 IPv4 地址范围。

1. （可选）要支持 IPv6 流量，请选择 **IPv6 CIDR 块**，然后选择 **Amazon 提供的 IPv6 CIDR 块**。

1. 选择**租赁**选项。此选项定义您启动到此 VPC 中的 EC2 实例是在与其他 AWS 账户 共享的硬件上运行，还是在专供您使用的硬件上运行。如果您选择将 VPC 的租赁设为 `Default`，则在此 VPC 中启动的 EC2 实例将使用您在启动实例时指定的租赁属性。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[使用定义的参数启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。如果您选择 VPC 的租赁为 `Dedicated`，则这些实例将始终在专供您使用的硬件上作为[专用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)运行。如果您使用的是 AWS Outpost，则您的 Outpost 需要私有连接；您必须使用 `Default` 租赁。

1. 对于**可用区（AZ）数量**，我们建议生产环境至少在两个可用区域中预置子网。要为您的子网选择可用区，请展开**自定义可用区**。否则可让 AWS 为您选择。

1. 要配置子网，请选择**公有子网的数量**和**私有子网的数量**的值。要选择子网的 IP 地址范围，请展开**自定义子网 CIDR 块**。否则可让 AWS 为您选择。

1. （可选）如果私有子网中的资源需要通过 IPv4 访问公共互联网，则对于 **NAT 网关**，请选择要在其中创建 NAT 网关的可用区数量。在生产环境中，我们建议您在每个可用区部署一个 NAT 网关，其中包含需要访问公共互联网的资源。请注意，使用 NAT 网关会产生成本。有关更多信息，请参阅 [适用于 NAT 网关的定价](nat-gateway-pricing.md)。

1. （可选）如果私有子网中的资源需要通过 IPv6 访问公共互联网，对于**仅限出口的互联网网关**，请选择**是**。

1. （可选）如果您需要直接从 VPC 访问 Amazon S3，请选择 **VPC 端点**、**S3 网关**。这将为 Amazon S3 创建一个网关 VPC 端点。有关更多信息，请参阅《*AWS PrivateLink 指南*》中的 [Gateway endpoints](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)。

1. （可选）对于 **DNS 选项**，默认情况下，两个域名解析选项均处于启用状态。如果默认设置无法满足您的需求，您可以禁用这些选项。

1. （可选）要向 VPC 添加标签，请展开**其他标签**，选择**添加新标签**，然后输入标签键和标签值。

1. 在**预览**窗格中，您可以直观地显示您所配置的 VPC 资源之间的关系。实线表示资源之间的关系。虚线表示指向 NAT 网关、互联网网关和网关端点的网络流量。创建 VPC 后，您可以使用**资源地图**选项卡，随时以此格式直观地显示 VPC 的资源。有关更多信息，请参阅 [可视化 VPC 中的资源](view-vpc-resource-map.md)。

1. 配置完 VPC 后，选择**创建 VPC**。

## 仅创建 VPC
<a name="create-vpc-only"></a>

按照以下过程，使用 Amazon VPC 控制台创建无额外 VPC 资源的 VPC。

**使用控制台创建无额外 VPC 资源的 VPC。**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在 VPC 控制面板上，选择**创建 VPC**。

1. 对于**要创建的资源**，选择 **仅 VPC**。

1. （可选）对于**名称标签**，输入 VPC 的名称。这样做可创建具有 `Name` 键以及您指定的值的标签。

1. 对于 **IPv4 CIDR block**（IPv4 CIDR 块），请执行以下操作之一：
   + 选择 **IPv4 CIDR 手动输入**，然后输入您的 VPC 的 IPv4 地址范围。
   + 选择 **IPAM 分配的 IPv4 CIDR 块**，然后选择您的 Amazon VPC IP 地址管理器（IPAM）IPv4 地址池和网络掩码。CIDR 块的大小受 IPAM 池上的分配规则限制。IPAM 是一项 VPC 功能，可让您更轻松地计划、跟踪和监控 AWS 工作负载的 IP 地址。有关更多信息，请参阅《Amazon VPC IPAM 用户指南》[https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html](https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html)。

     如果您使用 IPAM 来管理 IP 地址，我们建议您选择此选项。否则，您为 VPC 指定的 CIDR 块可能与 IPAM CIDR 分配重叠。

1. （可选）要创建双堆栈 VPC，请为您的 VPC 指定一个 IPv6 地址范围。对于 **IPv6 CIDR block（IPv6 CIDR 块）**，请执行以下操作之一：
   + 如果使用 Amazon VPC IP 地址管理器，并且需要从 IPAM 池预置 IPv6 CIDR，则选择 **IPAM 分配的 IPv6 CIDR 块**。如果您使用 IPAM 分配的 IPv6 CIDR 块为 VPC 预置 IPv6 CIDR，则可以利用连续的 IPv6 CIDR 来创建 VPC。连续分配的 CIDR 是按顺序分配的 CIDR。它们使您能够简化安全和网络规则；IPv6 CIDR 可以跨网络和安全结构（如访问控制列表、路由表、安全组和防火墙）聚合在单个条目中。

     您可以通过两个选项，在 **CIDR 块**下为 VPC 预置一个 IP 地址范围：
     + **网络掩码长度**：选择此选项可为 CIDR 选择网络掩码长度。请执行以下操作之一：
       + 如果已为 IPAM 池选择默认网络掩码长度，则可以选择**默认为 IPAM 网络掩码长度**，以使用 IPAM 管理员为 IPAM 池设置的默认网络掩码长度。有关可选默认网络掩码长度分配规则的更多信息，请参阅《Amazon VPC IPAM 用户指南》**中的[创建区域 IPv6 池](https://docs.aws.amazon.com/vpc/latest/ipam/create-ipv6-reg-pool.html)。
       + 如果未为 IPAM 池选择默认网络掩码长度，则选择一个比 IPAM 池 CIDR 的网络掩码长度更具体的网络掩码长度。例如，假设 IPAM 池 CIDR 为 /50，则可以为 VPC 选择介于 **/52** 至 **/60** 之间的网络掩码长度。可能的网络掩码长度介于 **/44** 和 **/60** 之间，增量为 /4。
     + **选择 CIDR**：选择此选项可手动输入 IPv6 地址。您只能选择比 IPAM 池 CIDR 的网络掩码长度更具体的网络掩码长度。例如，假设 IPAM 池 CIDR 为 /50，则可以为 VPC 选择介于 **/52** 至 **/60** 之间的网络掩码长度。可能的 IPv6 网络掩码长度介于 **/44** 和 **/60** 之间，增量为 /4。
   + 选择 **Amazon 提供的 IPv6 CIDR 块**，以从 Amazon 的 IPv6 地址池请求 IPv6 CIDR 块。对于 **Network Border Group**（网络边界组），选择 AWS 从中通告 IP 地址的组。Amazon 提供 **/56** 固定大小的 IPv6 CIDR 块。
   + 选择**我拥有的 IPv6 CIDR**，以预置您已经带到 AWS 的 IPv6 CIDR。有关自带 IP 地址范围到 AWS 的更多信息，请参阅《*Amazon EC2 用户指南*》中的[自带 IP 地址（BYOIP）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-byoip.html)。您可以使用以下 **CIDR 块**选项为 VPC 预置 IP 地址范围：
     + **无偏好**：选择此选项使用 **/56** 的网络掩码长度。
     + **选择 CIDR**：选择此选项可手动输入 IPv6 地址，然后选择比 BYOIP CIDR 的大小更具体的网络掩码长度。例如，假设 BYOIP 池 CIDR 为 /50，则可以为 VPC 选择介于 **/52** 至 **/60** 之间的网络掩码长度。可能的 IPv6 网络掩码长度介于 **/44** 和 **/60** 之间，增量为 /4。

1. （可选）选择**租赁**选项。此选项定义您启动到此 VPC 中的 EC2 实例是在与其他 AWS 账户 共享的硬件上运行，还是在专供您使用的硬件上运行。如果您选择 VPC 的租赁为 `Default`，则启动到此 VPC 的 EC2 实例将使用您在启动实例时指定的租赁属性 – 有关更多信息，请参阅《*Amazon EC2 用户指南*》中的[使用定义的参数启动实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html)。如果您选择 VPC 的租赁为 `Dedicated`，则这些实例将始终在专供您使用的硬件上作为[专用实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)运行。如果您使用的是 AWS Outpost，则您的 Outpost 需要私有连接；您必须使用 `Default` 租赁。

1. （可选）要向 VPC 添加标签，请选择**添加新标签**，然后输入标签键和标签值。

1. 选择**创建 VPC**。

1. 创建 VPC 后，您可以添加子网。有关更多信息，请参阅 [创建子网](create-subnets.md)。

## 使用 AWS CLI 创建 VPC
<a name="create-vpc-cli"></a>

以下过程包含创建 VPC 的示例 AWS CLI 命令以及运行应用程序所需的其他 VPC 资源。如果您运行此过程中的所有命令，您将创建一个 VPC、一个公有子网、一个私有子网、针对每个子网的路由表、一个互联网网关、一个仅限出口的互联网网关和一个公有 NAT 网关。如果您不需要所有这些资源，则可以仅使用您需要的示例命令。

**先决条件**  
在开始之前，请安装并配置 AWS CLI。配置 AWS CLI 时，系统会提示您输入 AWS 凭证。本过程中的示例假定您已配置好默认区域。否则，请为每个命令添加 `--region` 选项。有关更多信息，请参阅[安装或更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)和[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

**标记**  
在创建资源后，您可以使用 [create-tags](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-tags.html) 命令为资源添加标签。您还可以按如下方式将 `--tag-specification` 选项添加到资源的创建命令中。

```
--tag-specifications ResourceType=vpc,Tags=[{Key=Name,Value=my-project}]
```

**使用 AWS CLI 创建 VPC 以及其他 VPC 资源**

1. 使用下面的 [create-vpc](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc.html) 命令创建具有指定 IPv4 CIDR 块的 VPC。

   ```
   aws ec2 create-vpc --cidr-block 10.0.0.0/24 --query Vpc.VpcId --output text
   ```

   要创建双堆栈 VPC，请如以下示例所示，添加 `--amazon-provided-ipv6-cidr-block` 选项以添加 Amazon 提供的 IPv6 CIDR 块。

   ```
   aws ec2 create-vpc --cidr-block 10.0.0.0/24 --amazon-provided-ipv6-cidr-block --query Vpc.VpcId --output text
   ```

   这些命令将返回新 VPC 的 ID。示例如下：

   ```
   vpc-1a2b3c4d5e6f1a2b3
   ```

1. [双堆栈 VPC] 使用以下 [describe-vpcs](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-vpcs.html) 命令获取与 VPC 关联的 IPv6 CIDR 块。

   ```
   aws ec2 describe-vpcs --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query Vpcs[].Ipv6CidrBlockAssociationSet[].Ipv6CidrBlock --output text
   ```

   下面是示例输出。

   ```
   2600:1f13:cfe:3600::/56
   ```

1. 根据您的使用场景创建一个或多个子网。在生产环境中，我们建议您至少在两个可用区中启动资源。使用下面的任意一种命令创建每个子网。
   + **仅 IPv4 子网** – 要创建具有特定 IPv4 CIDR 块的子网，请使用下面的 [create-subnet](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-subnet.html) 命令。

     ```
     aws ec2 create-subnet --vpc-id vpc-1a2b3c4d5e6f1a2b3 --cidr-block 10.0.1.0/20 --availability-zone us-east-2a --query Subnet.SubnetId --output text
     ```
   + **双堆栈子网** – 如果您创建了双堆栈 VPC，则可以如以下命令所示，使用 `--ipv6-cidr-block` 选项创建双堆栈子网。

     ```
     aws ec2 create-subnet --vpc-id vpc-1a2b3c4d5e6f1a2b3 --cidr-block 10.0.1.0/20 --ipv6-cidr-block 2600:1f13:cfe:3600::/64 --availability-zone us-east-2a --query Subnet.SubnetId --output text
     ```
   + **仅 IPv6 子网** – 如果您创建了双堆栈 VPC，则可以如以下命令所示，使用 `--ipv6-native` 选项创建仅 IPv6 子网。

     ```
     aws ec2 create-subnet --vpc-id vpc-1a2b3c4d5e6f1a2b3 --ipv6-native --ipv6-cidr-block 2600:1f13:cfe:3600::/64 --availability-zone us-east-2a --query Subnet.SubnetId --output text
     ```

   这些命令将返回新子网的 ID。示例如下：

   ```
   subnet-1a2b3c4d5e6f1a2b3
   ```

1. 如果您的 Web 服务器或 NAT 网关需要公有子网，请执行以下操作：

   1. 使用以下 [create-internet-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-internet-gateway.html) 命令创建互联网网关。该命令将返回新互联网网关的 ID。

      ```
      aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text
      ```

   1. 使用以下 [attach-internet-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-internet-gateway.html) 命令将互联网网关附加到 VPC。使用上一步返回的互联网网关 ID。

      ```
      aws ec2 attach-internet-gateway --vpc-id vpc-1a2b3c4d5e6f1a2b3 --internet-gateway-id igw-id
      ```

   1. 使用以下 [create-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route-table.html) 命令为公有子网创建自定义路由表。该命令将返回新路由表的 ID。

      ```
      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
      ```

   1. 使用以下 [create-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route.html) 命令，在路由表中创建一条会将所有 IPv4 流量发送到互联网网关的路由。使用公有子网的路由表 ID。

      ```
      aws ec2 create-route --route-table-id rtb-id-public --destination-cidr-block 0.0.0.0/0 --gateway-id igw-id
      ```

   1. 使用以下 [associate-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-route-table.html) 命令将路由表关联到公有子网。使用公有子网的路由表 ID 和公有子网的 ID。

      ```
      aws ec2 associate-route-table --route-table-id rtb-id-public --subnet-id subnet-id-public-subnet
      ```

1. [IPv6] 您可以添加仅限出口的互联网网关，以确保私有子网中的实例可以通过 IPv6 访问互联网（例如，获取软件更新），但互联网上的主机无法访问您的实例。

   1. 使用以下 [create-egress-only-internet-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-egress-only-internet-gateway.html) 命令创建仅限出口的互联网网关。该命令将返回新互联网网关的 ID。

      ```
      aws ec2 create-egress-only-internet-gateway --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query EgressOnlyInternetGateway.EgressOnlyInternetGatewayId --output text
      ```

   1. 使用以下 [create-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route-table.html) 命令为私有子网创建自定义路由表。该命令将返回新路由表的 ID。

      ```
      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
      ```

   1. 使用以下 [create-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route.html) 命令，在私有子网的路由表中创建一条会将所有 IPv6 流量发送到仅限出口的互联网网关的路由。使用上一步中返回的路由表 ID。

      ```
      aws ec2 create-route --route-table-id rtb-id-private --destination-cidr-block ::/0 --egress-only-internet-gateway eigw-id
      ```

   1. 使用以下 [associate-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-route-table.html) 命令将路由表关联到私有子网。

      ```
      aws ec2 associate-route-table --route-table-id rtb-id-private --subnet-id subnet-id-private-subnet
      ```

1. 如果您需要为私有子网中的资源使用 NAT 网关，请执行以下操作：

   1. 使用以下 [allocate-address](https://docs.aws.amazon.com/cli/latest/reference/ec2/allocate-address.html) 命令为 NAT 网关创建弹性 IP 地址。

      ```
      aws ec2 allocate-address --domain vpc --query AllocationId --output text
      ```

   1. 使用以下 [create-nat-gateway](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-nat-gateway.html) 命令在公有子网中创建 NAT 网关。使用上一步返回的分配 ID。

      ```
      aws ec2 create-nat-gateway --subnet-id subnet-id-public-subnet --allocation-id eipalloc-id
      ```

   1. （可选）如果您已经在第 5 步中为私有子网创建了路由表，请跳过这一步。否则，请使用下面的 [create-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route-table.html) 命令为您的私有子网创建路由表。该命令将返回新路由表的 ID。

      ```
      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
      ```

   1. 使用以下 [create-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-route.html) 命令，在私有子网的路由表中创建一条会将所有 IPv4 流量发送到 NAT 网关的路由。使用您在这一步或第 5 步中为私有子网创建的路由表的 ID。

      ```
      aws ec2 create-route --route-table-id rtb-id-private --destination-cidr-block 0.0.0.0/0 --gateway-id nat-id
      ```

   1. （可选）如果您已在第 5 步中将路由表关联到私有子网，请跳过这一步。否则，请使用下面的 [associate-route-table](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-route-table.html) 命令将路由表关联到私有子网。使用您在这一步或第 5 步中为私有子网创建的路由表的 ID。

      ```
      aws ec2 associate-route-table --route-table-id rtb-id-private --subnet-id subnet-id-private-subnet
      ```