创建 VPC - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

创建 VPC

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

有关如何查看或修改 VPC 的信息,请参阅 配置 VPC

VPC 配置选项

您可以在创建 VPC 时指定以下配置选项。

可用区

在一个 Amazon 区域中具有冗余电源、联网和连接的分散数据中心。通过使用多个可用区,您可以获得比单个数据中心具有更高可用性、容错能力和可扩展性的生产级应用程序和数据库。通过将应用程序进行分区,在跨可用区的子网中运行,可以实现更好的隔离和保护,防止停电、雷击、龙卷风、地震等问题的影响。

CIDR 块

您必须为您的 VPC 和子网指定 IP 地址范围。有关更多信息,请参阅为 VPC 和子网分配 IP 地址

DNS 选项

如果您需要在子网中启动的 EC2 实例使用公有 IPv4 DNS 主机名,则必须同时启用这两个 DNS 选项。有关更多信息,请参阅VPC 中的 DNS 属性

  • 启用 DNS 主机名:在 VPC 中启动的 VPC 实例将接收与其公有 IPv4 地址对应的公有 DNS 主机名。

  • 启用 DNS 解析:私有 DNS 主机名的 DNS 解析由名为 Route 53 Resolver 的 Amazon DNS 服务器为 VPC 提供。

Internet 网关

将您的 VPC 连接到互联网t。公有子网中的实例可以访问互联网,因为子网路由表包含一条将指向互联网的流量发送到互联网网关的路由。如果服务器不需要直接从互联网访问,则不应将其部署到公有子网中。有关更多信息,请参阅 互联网网关

名称

您为 VPC 和其他 VPC 资源指定的名称将用于创建名称标签。如果您使用控制台中的名称标签自动生成功能,则标签值的格式为 name-resource

NAT 网关

让私有子网中的实例能够将出站流量发送到互联网,但阻止互联网上的资源连接到实例。在生产环境中,我们建议您在每个活动可用区中部署一个 NAT 网关。有关更多信息,请参阅 NAT 网关

路由表

包含一组被称为路由的规则,用于决定来自您的子网或网关的网络流量将指向何处。有关更多信息,请参阅 路由表

子网

您的 VPC 内的一个 IP 地址范围。您可以在子网中启动 Amazon 资源(如 EC2 实例)。每个子网都完全位于一个可用区之内。通过在至少两个可用区内启动实例,应用程序将不受单一可用区故障的影响。

公有子网有一条指向互联网网关的直接路由。公有子网中的资源可以访问公有互联网。私有子网不具有指向互联网网关的直接路由。私有子网中的资源需要使用另一个组件(例如 NAT 设备)才能访问公共互联网。

有关更多信息,请参阅 子网

Tenancy

此选项定义您启动到此 VPC 中的 EC2 实例是在与其他 Amazon Web Services 账户 共享的硬件上运行,还是在专供您使用的硬件上运行。如果您选择 VPC 的租赁为 Default,则启动到此 VPC 的 EC2 实例将使用您在启动实例时指定的租赁属性 – 有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用定义的参数启动实例。如果您选择 VPC 的租赁为 Dedicated,则这些实例将始终在专供您使用的硬件上作为专用实例运行。如果您使用的是 Amazon Outpost,则您的 Outpost 需要私有连接;您必须使用 Default 租赁。

创建 VPC 以及其他 VPC 资源

按照以下过程创建 VPC 以及运行应用程序所需的其他 VPC 资源,例如子网、路由表、互联网网关和 NAT 网关。有关 VPC 示例配置,请参阅 VPC 示例

使用控制台创建 VPC、子网和其他 VPC 资源
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在 VPC 控制面板上,选择创建 VPC

  3. 对于 Resources to create(要创建的资源),选择 VPC and more(VPC 等)。

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

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

  6. (可选)要支持 IPv6 流量,请选择 IPv6 CIDR 块,然后选择 Amazon 提供的 IPv6 CIDR 块

  7. 选择租赁选项。此选项定义您启动到此 VPC 中的 EC2 实例是在与其他 Amazon Web Services 账户 共享的硬件上运行,还是在专供您使用的硬件上运行。如果您选择 VPC 的租赁为 Default,则启动到此 VPC 的 EC2 实例将使用您在启动实例时指定的租赁属性 – 有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用定义的参数启动实例。如果您选择 VPC 的租赁为 Dedicated,则这些实例将始终在专供您使用的硬件上作为专用实例运行。如果您使用的是 Amazon Outpost,则您的 Outpost 需要私有连接;您必须使用 Default 租赁。

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

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

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

  11. (可选)如果私有子网中的资源需要通过 IPv6 访问公共互联网,对于仅限出口的互联网网关,请选择

  12. (可选)如果您需要直接从 VPC 访问 Amazon S3,请选择 VPC 端点S3 网关。这将为 Amazon S3 创建一个网关 VPC 端点。有关更多信息,请参阅《Amazon PrivateLink 指南》中的 网关 VPC 端点

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

  14. (可选)要向 VPC 添加标签,请展开其他标签,选择添加新标签,然后输入标签键和标签值。

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

  16. 配置完 VPC 后,选择创建 VPC

仅创建 VPC

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

使用控制台创建无额外 VPC 资源的 VPC。
  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在 VPC 控制面板上,选择创建 VPC

  3. 对于要创建的资源,选择 仅 VPC

  4. (可选)对于名称标签,输入 VPC 的名称。这样做可创建具有 Name 键以及您指定的值的标签。

  5. 对于 IPv4 CIDR block(IPv4 CIDR 块),请执行以下操作之一:

    • 选择 IPv4 CIDR 手动输入,然后输入您的 VPC 的 IPv4 地址范围。

    • 选择 IPAM 分配的 IPv4 CIDR 块,然后选择您的 Amazon VPC IP 地址管理器(IPAM)IPv4 地址池和网络掩码。CIDR 块的大小受 IPAM 池上的分配规则限制。IPAM 是一项 VPC 功能,可让您更轻松地计划、跟踪和监控 Amazon 工作负载的 IP 地址。有关更多信息,请参阅《Amazon VPC IPAM 用户指南》中的什么是 IPAM?

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

  6. (可选)要创建双堆栈 VPC,请为您的 VPC 指定一个 IPv6 地址范围。对于 IPv6 CIDR block(IPv6 CIDR 块),请执行以下操作之一:

    • 如果使用 Amazon VPC IP 地址管理器,并且需要从 IPAM 池预置 IPv6 CIDR,则选择 IPAM 分配的 IPv6 CIDR 块。您可以通过两个选项,在 CIDR 块下为 VPC 预置一个 IP 地址范围:

      • 网络掩码长度:选择此选项可为 CIDR 选择网络掩码长度。请执行下列操作之一:

        • 如果已为 IPAM 池选择默认网络掩码长度,则可以选择默认为 IPAM 网络掩码长度,以使用 IPAM 管理员为 IPAM 池设置的默认网络掩码长度。有关可选默认网络掩码长度分配规则的更多信息,请参阅《Amazon VPC IPAM 用户指南》中的创建区域 IPv6 池

        • 如果未为 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(网络边界组),选择 Amazon 从中通告 IP 地址的组。Amazon 提供 /56 固定大小的 IPv6 CIDR 块。

    • 选择我拥有的 IPv6 CIDR,以预置您已经带到 Amazon 的 IPv6 CIDR。有关自带 IP 地址范围到 Amazon的更多信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的在 Amazon EC2 中使用您自己的 IP 地址(BYOIP)。您可以通过两个选项,在 CIDR 块下为 VPC 预置一个 IP 地址范围:

      • 无偏好:选择此选项使用 /56 的网络掩码长度。

      • 选择 CIDR:选择此选项可手动输入 IPv6 地址,然后选择比 BYOIP CIDR 的大小更具体的网络掩码长度。例如,假设 BYOIP 池 CIDR 为 /50,则可以为 VPC 选择介于 /52/60 之间的网络掩码长度。可能的 IPv6 网络掩码长度介于 /44/60 之间,增量为 /4。

  7. (可选)选择租赁选项。此选项定义您启动到此 VPC 中的 EC2 实例是在与其他 Amazon Web Services 账户 共享的硬件上运行,还是在专供您使用的硬件上运行。如果您选择 VPC 的租赁为 Default,则启动到此 VPC 的 EC2 实例将使用您在启动实例时指定的租赁属性 – 有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用定义的参数启动实例。如果您选择 VPC 的租赁为 Dedicated,则这些实例将始终在专供您使用的硬件上作为专用实例运行。如果您使用的是 Amazon Outpost,则您的 Outpost 需要私有连接;您必须使用 Default 租赁。

  8. (可选)要向 VPC 添加标签,请选择添加新标签,然后输入标签键和标签值。

  9. 选择 Create VPC(创建 VPC)。

  10. 创建 VPC 后,您可以添加子网。有关更多信息,请参阅创建子网

使用 Amazon CLI 创建 VPC

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

先决条件

在开始之前,请安装并配置 Amazon CLI。配置 Amazon CLI 时,系统会提示您输入 Amazon 凭证。本过程中的示例假定您已配置好默认区域。否则,请为每个命令添加 --region 选项。有关更多信息,请参阅安装或更新 Amazon CLI配置 Amazon CLI

Tagging

在创建资源后,您可以使用 create-tags 命令为资源添加标签。您还可以按如下方式将 --tag-specification 选项添加到资源的创建命令中。

--tag-specifications ResourceType=vpc,Tags=[{Key=Name,Value=my-project}]
使用 Amazon CLI 创建 VPC 以及其他 VPC 资源
  1. 使用下面的 create-vpc 命令创建具有指定 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
  2. [双堆栈 VPC] 使用以下 describe-vpcs 命令获取与 VPC 关联的 IPv6 CIDR 块。

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

    下面是示例输出。

    2600:1f13:cfe:3600::/56
  3. 根据您的使用场景创建一个或多个子网。在生产环境中,我们建议您至少在两个可用区中启动资源。使用下面的任意一种命令创建每个子网。

    • 仅 IPv4 子网 – 要创建具有特定 IPv4 CIDR 块的子网,请使用下面的 create-subnet 命令。

      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
  4. 如果您的 Web 服务器或 NAT 网关需要公有子网,请执行以下操作:

    1. 使用以下 create-internet-gateway 命令创建互联网网关。该命令将返回新互联网网关的 ID。

      aws ec2 create-internet-gateway --query InternetGateway.InternetGatewayId --output text
    2. 使用以下 attach-internet-gateway 命令将互联网网关附加到 VPC。使用上一步返回的互联网网关 ID。

      aws ec2 attach-internet-gateway --vpc-id vpc-1a2b3c4d5e6f1a2b3 --internet-gateway-id igw-id
    3. 使用以下 create-route-table 命令为公有子网创建自定义路由表。该命令将返回新路由表的 ID。

      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
    4. 使用以下 create-route 命令,在路由表中创建一条会将所有 IPv4 流量发送到互联网网关的路由。使用公有子网的路由表 ID。

      aws ec2 create-route --route-table-id rtb-id-public --destination-cidr-block 0.0.0.0/0 --gateway-id igw-id
    5. 使用以下 associate-route-table 命令将路由表关联到公有子网。使用公有子网的路由表 ID 和公有子网的 ID。

      aws ec2 associate-route-table --route-table-id rtb-id-public --subnet-id subnet-id-public-subnet
  5. [IPv6] 您可以添加仅限出口的互联网网关,以确保私有子网中的实例可以通过 IPv6 访问互联网(例如,获取软件更新),但互联网上的主机无法访问您的实例。

    1. 使用以下 create-egress-only-internet-gateway 命令创建仅限出口的互联网网关。该命令将返回新互联网网关的 ID。

      aws ec2 create-egress-only-internet-gateway --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query EgressOnlyInternetGateway.EgressOnlyInternetGatewayId --output text
    2. 使用以下 create-route-table 命令为私有子网创建自定义路由表。该命令将返回新路由表的 ID。

      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
    3. 使用以下 create-route 命令,在私有子网的路由表中创建一条会将所有 IPv6 流量发送到仅限出口的互联网网关的路由。使用上一步中返回的路由表 ID。

      aws ec2 create-route --route-table-id rtb-id-private --destination-cidr-block ::/0 --egress-only-internet-gateway eigw-id
    4. 使用以下 associate-route-table 命令将路由表关联到私有子网。

      aws ec2 associate-route-table --route-table-id rtb-id-private --subnet-id subnet-id-private-subnet
  6. 如果您需要为私有子网中的资源使用 NAT 网关,请执行以下操作:

    1. 使用以下 allocate-address 命令为 NAT 网关创建弹性 IP 地址。

      aws ec2 allocate-address --domain vpc --query AllocationId --output text
    2. 使用以下 create-nat-gateway 命令创建 NAT 网关。使用上一步返回的分配 ID。

      aws ec2 create-nat-gateway --subnet-id subnet-id-private-subnet --allocation-id eipalloc-id
    3. (可选)如果您已经在第 5 步中为私有子网创建了路由表,请跳过这一步。否则,请使用下面的 create-route-table 命令为您的私有子网创建路由表。该命令将返回新路由表的 ID。

      aws ec2 create-route-table --vpc-id vpc-1a2b3c4d5e6f1a2b3 --query RouteTable.RouteTableId --output text
    4. 使用以下 create-route 命令,在私有子网的路由表中创建一条会将所有 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
    5. (可选)如果您已在第 5 步中将路由表关联到私有子网,请跳过这一步。否则,请使用下面的 associate-route-table 命令将路由表关联到私有子网。使用您在这一步或第 5 步中为私有子网创建的路由表的 ID。

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