

# 示例：在私有子网中部署服务器并且具有 NAT 中的 VPC
<a name="vpc-example-private-subnets-nat"></a>

此示例将演示如何创建可用于生产环境的服务器的 VPC。为了提高故障恢复能力，您需要使用一个自动扩缩组和一个应用程序负载均衡器，在两个可用区中部署服务器。为了提高安全性，您需要在私有子网中部署服务器。服务器通过负载均衡器接收请求。服务器可以使用 NAT 网关连接到互联网。为了提高故障恢复能力，您需要在这两个可用区中部署 NAT 网关。

**Topics**
+ [概述](#overview-vpc-private-subnets-nat)
+ [1. 创建 VPC](#create-vpc-private-subnets-nat)
+ [2. 部署您的应用程序](#deploy-private-subnets)
+ [3. 测试配置](#test-private-subnets)
+ [4. 清理](#clean-up-private-subnets)

## 概述
<a name="overview-vpc-private-subnets-nat"></a>

下图概括了此例中包含的资源。此 VPC 在两个可用区中拥有公有和私有子网。每个公有子网都包含一个 NAT 网关和一个负载均衡器节点。服务器在私有子网中运行，使用自动扩缩组启动和终止，并接收来自负载均衡器的流量。服务器可以使用 NAT 网关连接到互联网。服务器可以使用网关 VPC 端点连接到 Amazon S3。

![一个在两个可用区内拥有子网的 VPC。](http://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/images/vpc-example-private-subnets.png)


### 路由
<a name="routing-vpc-private-subnets-nat"></a>

当您使用 Amazon VPC 控制台创建此 VPC 时，我们会为公有子网创建一个路由表，其中包含本地路由和指向互联网网关的路由。我们还将为私有子网创建一个路由表，其中包含本地路由，以及指向 NAT 网关、仅限出口的互联网网关和网关 VPC 端点的路由。

以下是公有子网的路由表示例，其中同时包含了 IPv4 和 IPv6 路由。如果您创建仅 IPv4 子网而不是双堆栈子网，则您的路由表中将仅包含 IPv4 路由。


| 目标位置 | 目标 | 
| --- | --- | 
| {{10.0.0.0/16}} | 本地 | 
| {{2001:db8:1234:1a00::/56}} | 本地 | 
| 0.0.0.0/0 | {{igw-id}} | 
| ::/0 | {{igw-id}} | 

以下是其中一个私有子网的路由表示例，其中同时包含了 IPv4 和 IPv6 路由。如果您创建仅 IPv4 子网，则您的路由表中将仅包含 IPv4 路由。最后一条路由会将指向 Amazon S3 的流量发送到网关 VPC 端点。


| 目标位置 | 目标 | 
| --- | --- | 
| {{10.0.0.0/16}} | 本地 | 
| {{2001:db8:1234:1a00::/56}} | 本地 | 
| 0.0.0.0/0 | {{nat-gateway-id}} | 
| ::/0 | {{eigw-id}} | 
| {{s3-prefix-list-id}} | {{s3-gateway-id}} | 

### 安全性
<a name="security-vpc-private-subnets-nat"></a>

以下是您可能为服务器所关联安全组创建的规则示例。安全组必须允许从负载均衡器通过侦听器端口和协议的流量。此外，安全组还必须允许运行状况检查流量。


| 来源 | 协议 | 端口范围 | 注释 | 
| --- | --- | --- | --- | 
| {{负载均衡器安全组的 ID}} | {{侦听器协议}} | {{侦听器端口}} | 允许从负载均衡器通过侦听器端口的入站流量 | 
| {{负载均衡器安全组的 ID}} | {{运行状况检查协议}} | {{运行状况检查端口}} | 允许来自负载均衡器的入站运行状况检查流量 | 

## 1. 创建 VPC
<a name="create-vpc-private-subnets-nat"></a>

按照以下过程创建在两个可用区内具有一个公有子网和一个私有子网的 VPC，并在每个可用区中有一个 NAT 网关。

**创建 VPC**

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

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

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

1. **配置 VPC**

   1. 对于 **Name tag auto-generation**（名称标签自动生成），为 VPC 输入名称。

   1. 对于 **IPv4 CIDR 块**，您可以保留默认建议，也可以输入应用程序或网络所需的 CIDR 块。

   1. 如果应用程序使用 IPv6 地址进行通信，则选择 **IPv6 CIDR 块**、**Amazon 提供的 IPv6 CIDR 块**。

1. **配置子网**

   1. 对于**可用区数量**，选择 **2**，这样您可以在多个可用区中启动实例，以提高故障恢复能力。

   1. 对于**Number of public subnets**（公有子网数量），选择 **2**。

   1. 对于 **Number of private subnets**（私有子网数量），选择 **2**。

   1. 您可以保留公有子网的默认 CIDR 块，也可以展开**自定义子网 CIDR 块**并输入 CIDR 块。有关更多信息，请参阅 [子网 CIDR 块](subnet-sizing.md)。

1. 对于 **NAT 网关**，选择**每个可用区 1 个**以提高故障恢复能力。

1. 如果应用程序使用 IPv6 地址进行通信，对于**仅限出口的互联网网关**，请选择**是**。

1. 对于 **VPC 端点**，如果实例必须访问 S3 存储桶，请保留默认设置 **S3 网关**。否则，您私有子网中的实例将无法访问 Amazon S3。此选项不会产生任何费用，因此如果您未来可能使用 S3 存储桶，则可以保留默认值。如果您选择**无**，则以后可以随时添加网关 VPC 端点。

1. 对于 **DNS 选项**，请清除**启用 DNS 主机名**。

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

## 2. 部署您的应用程序
<a name="deploy-private-subnets"></a>

理想情况下，您已经在开发或测试环境中完成了服务器测试，并创建了用于在生产环境中部署应用程序的脚本或映像。

您可以使用 [Amazon EC2 Auto Scaling](https://docs.aws.amazon.com/autoscaling/ec2/userguide/) 在多个可用区部署服务器，并保持应用程序所需的最低服务器容量。

**使用自动扩缩组启动实例**

1. 创建启动模板以指定使用 Amazon EC2 Auto Scaling 启动 EC2 实例所需的配置信息。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》中的 [为自动扩缩组创建启动模板](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-launch-template.html)**。

1. 创建一个自动扩缩组，这是具有最小、最大和所需大小的 EC2 实例的集合。有关更多信息，请参阅《Amazon EC2 Auto Scaling 用户指南》中的 [使用启动模板创建自动扩缩组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/create-asg-launch-template.html)**。

1. 创建一个负载均衡器，以在自动扩缩组中的实例之间均衡地分配流量，并将该负载均衡器附加到您的自动扩缩组。有关更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/) 和《Amazon EC2 Auto Scaling 用户指南》中的 [使用 Elastic Load Balancing](https://docs.aws.amazon.com/autoscaling/ec2/userguide/autoscaling-load-balancer.html)**。

## 3. 测试配置
<a name="test-private-subnets"></a>

完成应用程序部署后，您可以对其进行测试。如果应用程序无法按照预期发送或接收流量，您可以使用 Reacability Analyzer 来帮助排查问题。例如，Reachability Analyzer 可以识别路由表或安全组配置问题。有关更多信息，请参阅 [Reachability Analyzer 角色指南](https://docs.aws.amazon.com/vpc/latest/reachability/)。

## 4. 清理
<a name="clean-up-private-subnets"></a>

完成此配置后，您可以将其删除。您必须首先删除自动扩缩组，终止实例，删除 NAT 网关并删除负载均衡器，然后才能删除 VPC。有关更多信息，请参阅 [删除您的 VPC](delete-vpc.md)。