创建 VPC - Amazon Virtual Private Cloud

创建 VPC

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

有关修改 VPC 的信息,请参阅将 CIDR 块添加到 VPC 或从中删除

创建 VPC 以及其他 VPC 资源

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

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

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

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

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

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

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

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

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

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

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

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

  12. (可选)如果您需要直接从 VPC 访问 Amazon S3,请选择 VPC 端点S3 网关。这将为 Amazon S3 创建一个网关 VPC 端点。有关更多信息,请参阅《AWS 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 功能,可让您更轻松地计划、跟踪和监控 AWS 工作负载的 IP 地址。有关更多信息,请参阅《Amazon VPC IPAM 用户指南》https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html

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

    • 选择我拥有的 IPv6 CIDR,以预置您已经带到 AWS 的 IPv6 CIDR。有关自带 IP 地址范围到 AWS 的更多信息,请参阅《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 实例是在与其他 AWS 账户 共享的硬件上运行,还是在专供您使用的硬件上运行。如果您选择 VPC 的租赁为 Default,则启动到此 VPC 的 EC2 实例将使用您在启动实例时指定的租赁属性 – 有关更多信息,请参阅《Amazon EC2 用户指南》中的使用定义的参数启动实例。如果您选择 VPC 的租赁为 Dedicated,则这些实例将始终在专供您使用的硬件上作为专用实例运行。如果您使用的是 AWS Outpost,则您的 Outpost 需要私有连接;您必须使用 Default 租赁。

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

  9. 选择创建 VPC

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

使用 AWS CLI 创建 VPC

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

先决条件

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

标记

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

--tag-specifications ResourceType=vpc,Tags=[{Key=Name,Value=my-project}]
使用 AWS 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-public-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