

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

# 在 VPC 中运行堆栈
<a name="workingstacks-vpc"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

您可以通过在虚拟私有云 (VPC) 中创建堆栈的实例来控制用户对这些实例的访问。例如，您可能不希望用户直接访问您堆栈的应用程序服务器或数据库，而要求所有公有流量通过弹性负载均衡器传送。

在 VPC 中运行堆栈的基本步骤如下：

1. 利用 Amazon VPC 控制台、API 或 CloudFormation 模板创建一个正确配置的 VPC。

1. 在创建堆栈时指定 VPC ID。

1. 在适当的子网中启动堆栈的实例。

以下内容简要介绍了 OpsWorks Stacks 中的 VPCs 工作原理。

**重要**  
如果使用 VPC 端点功能，则请注意堆栈中的每个实例必须能够从 Amazon Simple Storage Service (Amazon S3) 中完成以下操作：  
安装实例代理。
安装资产，例如 Ruby。
上传 Chef 运行日志。
检索堆栈命令。
要启用这些操作，您必须确保堆栈的实例有权访问与堆栈区域匹配的以下存储桶。否则，上述操作将失败。  
对于 Chef 12 Linux 和 Chef 12.2 Windows，存储桶如下所示。  


| 代理存储桶 | 资产存储桶 | 日志存储桶 | DNA 存储桶 | 
| --- | --- | --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  | 
对于 Chef 11.10 和 Linux 的早期版本，存储桶如下所示。美国东部（弗吉尼亚州北部）外的区域端点不支持 Chef 11.4 堆栈。  


| 代理存储桶 | 资产存储桶 | 日志存储桶 | DNA 存储桶 | 
| --- | --- | --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/workingstacks-vpc.html)  | 
有关更多信息，请参阅 [VPC 端点](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html)。

**注意**  
要使 OpsWorks 堆栈连接到您启用的 VPC 终端节点，您还必须为 NAT 或公有 IP 配置路由，因为 OpsWorks 堆栈代理仍需要访问公有终端节点。

**Topics**
+ [VPC 基础知识](#workingstacks-vpc-basics)
+ [为 OpsWorks 堆栈堆栈创建 VPC](#workingstacks-vpc-create-vps)

## VPC 基础知识
<a name="workingstacks-vpc-basics"></a>

有关详细讨论，请参阅[亚马逊 Virtual Private Cloud](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Introduction.html)。 VPCs简而言之，VPC 包含一个或多个*子网*，每个子网都包含一个或多个实例。每个子网有一个关联的路由表，可根据其目标 IP 地址定向出站流量。
+ VPC 内部的实例默认情况下可以相互通信，而不考虑其子网。但是，更改网络访问控制列表 (ACLs)、安全组策略或使用静态 IP 地址可能会中断这种通信。
+ 其实例可以与 Internet 通信的子网称为*公有子网*。
+ 其实例仅可与 VPC 中的其他实例通信而不能直接与 Internet 通信的子网称为*私有子网*。

OpsWorks 堆栈需要配置 VPC，以便堆栈中的每个实例（包括私有子网中的实例）都能访问以下终端节点：
+ 的 “Region Support” 部分列出的 OpsWorks Stacks 服务终端节点之一。[OpsWorks 堆栈入门](gettingstarted_intro.md)
+ 以下实例服务终端节点之一，由 OpsWorks Stacks 代理使用。该代理在托管客户实例上运行以便与服务交换数据。
  + opsworks-instance-service.us-east-2.amazonaws.com
  + opsworks-instance-service.us-east-1.amazonaws.com
  + opsworks-instance-service.us-west-1.amazonaws.com
  + opsworks-instance-service.us-west-2.amazonaws.com
  + opsworks-instance-service.ap-south-1.amazows.com
  + opsworks-instance-service.ap-northeast-1.amazonaws.com
  + opsworks-instance-service.ap-northeast-2.amazonaws.com
  + opsworks-instance-service.ap-southeast-1.amazonaws.com
  + opsworks-instance-service.ap-southeast-2.amazonaws.com
  + opsworks-instance-service.ca-central-1.amazows.com
  + opsworks-instance-service.eu-central-1.amazonaws.com
  + opsworks-instance-service.eu-west-1.amazonaws.com
  + opsworks-instance-service.eu-west-2.amazonaws.com
  + opsworks-instance-service.eu-west-3.amazonaws.com
+ Amazon S3
+ 您的操作系统依靠的任何软件包存储库，例如 Amazon Linux 或 Ubuntu Linux 存储库。
+ 您的应用程序和自定义说明书存储库。

可以使用多种方法来配置 VPC 以提供此连接。以下是如何为 OpsWorks Stacks 应用程序服务器堆栈配置 VPC 的简单示例。

![\[VPC diagram showing public and private subnets, NAT, load balancing, and connections to external services.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/vpc.png)


此 VPC 有几个组件：

**子网**  
VPC 有两个子网：一个公有子网和一个私有子网。  
+ 公有子网中包含一个负载均衡器和一个网络地址转换 (NAT) 设备，它可以与外部地址以及私有子网中的实例进行通信。
+ 私有子网包含应用程序服务器，它可与公有子网中的 NAT 和负载均衡器通信，但无法与外部地址直接通信。

**Internet 网关**  
Internet 网关允许具有公有 IP 地址的实例 (例如负载均衡器) 与 VPC 外的地址进行通信。

**负载均衡器**  
Elastic Load Balancing 负载均衡器接收用户的传入流量、将其分配到私有子网中的应用程序服务器，然后向用户返回响应。

**NAT**  
(NAT) 设备为应用程序服务器提供有限的 Internet 访问，通常用于从外部存储库下载软件更新等用途。所有 OpsWorks 堆栈实例都必须能够与 OpsWorks 堆栈和相应的 Linux 存储库通信。处理此问题的一种方法是将具有关联的弹性 IP 地址的 NAT 设备放在公有子网中。然后，您就可以通过 NAT 对来自私有子网中实例的出站流量进行路由。  
一个 NAT 实例可在您的私有子网的出站流量中创建一个单点故障。您可以配置具有一对 NAT 实例的 VPC 来提高可靠性，这对实例可在其中一个出现故障时由另一个接管。有关更多信息，请参阅 [Amazon VPC NAT 实例的高可用性](https://aws.amazon.com/articles/6079781443936876)。您也可以使用 NAT 网关。有关更多信息，请参阅《[Amazon VPC 用户指南](https://docs.aws.amazon.com/vpc/latest/userguide/)》中的 [NAT](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat.html)。

最佳 VPC 配置取决于您的堆栈 OpsWorks 堆栈。以下是一些您可能使用特定 VPC 配置时的示例。有关其他 VPC 场景的示例，请参阅[使用 Amazon VPC 的场景](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenarios.html)。

**处理公有子网中的一个实例**  
如果您有一个没有关联私有资源的单一实例堆栈 (例如不应可公开访问的 Amazon RDS 实例)，您就可以创建具有一个公有子网的 VPC 并将实例放在该子网中。如果您不使用默认 VPC，则必须让实例的层为该实例分配弹性 IP 地址。有关更多信息，请参阅 [OpsWorks 图层基础知识](workinglayers-basics.md)。

**处理私有资源**  
如果您有不应公开访问的资源，则可以创建具有一个公有子网和一个私有子网的 VPC。例如，在负载平衡的自动扩展环境中，您可以将所有 Amazon EC2 实例放在私有子网中，将负载均衡器放在公有子网中。这样，就无法从 Internet 直接访问 Amazon EC2 实例；所有传入流量都必须通过负载均衡器路由。  
私有子网将实例与 Amazon 的 EC2 直接用户访问隔离开来，但它们仍必须向 AWS 和相应的 Linux 软件包存储库发送出站请求。若要允许此类请求，您可以使用诸如具有自己的弹性 IP 地址的网络地址转换 (NAT) 设备，然后通过 NAT 对实例的出站流量进行路由。您可以将 NAT 放在与负载均衡器相同的公有子网中，如上述示例所示。  
+ 如果您使用的是诸如 Amazon RDS 实例等后端数据库，则可以将这些实例放在私有子网中。对于 Amazon RDS 实例，则必须在不同的可用区内指定至少两个不同子网。
+ 如果需要直接访问私有子网中的实例 (例如，要使用 SSH 登录实例)，可以在公有子网中放置一台堡垒主机，代理来自互联网的请求。

**将您自己的网络扩展到 AWS**  
如果您要将自己的网络扩展到云中并直接从您的 VPC 访问 Internet，则可以创建 VPN 网关。有关更多信息，请参阅[场景 3：具有公有和私有子网的 VPC 以及硬件 VPN 访问](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario3.html)。

## 为 OpsWorks 堆栈堆栈创建 VPC
<a name="workingstacks-vpc-create-vps"></a>

本节介绍如何使用示例 [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) 模板为 OpsWorks 堆栈创建 VPC。您可以下载 [OpsWorksVPCtemplates.zip 文件](samples/OpsWorksVPCtemplates.zip)中的模板。有关如何手动创建如本主题中所述 VPC 的更多信息，请参阅[Scenario 2: VPC with Public and Private Subnets](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html)。有关如何配置路由表、安全组等信息，请参阅示例模板。

**注意**  
默认情况下， OpsWorks Stacks 通过串联其 CIDR 范围和可用区来显示子网名称，例如。`10.0.0.1/24 - us-east-1b`为了使名称更具可读性，请为每个子网创建一个标记，**密钥**设置为**Name**，**值**设置为子网名称。 OpsWorks 然后，堆栈会将子网名称附加到默认名称之后。例如，以下示例中的私有子网有一个标记，**名称**设置为**Private**， OpsWorks 显示为`10.0.0.1/24 us-east - 1b - Private`。

您只需几个步骤即可使用 CloudFormation 控制台启动 VPC 模板。以下过程使用示例模板在美国东部（弗吉尼亚州北部）区域创建 VPC。有关如何使用模板在其他区域创建 VPC 的说明，请参阅过程后面的[备注](#vpc-note)。

**创建 VPC**

1. 打开 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)，选择 **US East (N. Virginia) (美国东部 (弗吉尼亚北部))** 区域，然后选择 **Create Stack (创建堆栈)**。

1. 在 **Select Template (选择模板)** 页面上，选择 **Upload a template (上传模板)**。**浏览您在 [OpsWorksVPCtemplates.zip `OpsWorksinVPC.template` 文件中下载的文件](samples/OpsWorksVPCtemplates.zip)。选择继续。**  
![\[CloudFormation 选择模板页面\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/vpc_create_vpc.png)

   您也可以通过打开 [AWS CloudFormation 示例模板](https://aws.amazon.com/cloudformation/aws-cloudformation-templates/)，找到堆栈 VPC 模板并选择**启动堆栈来启动此堆栈**。 OpsWorks 

1. 在 **Specify Parameters (指定参数)** 页面上，接受默认值并选择 **Continue (继续)**。

1. 在 **Add Tags (添加标签)** 页面上，创建一个标签，将 **Key (键)** 设置为 **Name**，并将 **Value (值)** 设置为 VPC 名称。当您创建 OpsWorks 堆栈时，使用此标签可以更轻松地识别您的 VPC。

1. 选择 **Continue (继续)**，然后选择 **Close (关闭)** 以启动堆栈。

<a name="vpc-note"></a>**注意：**您可以使用以下任一方法在其他区域中创建 VPC。
+ 转至[在不同区域使用模板](https://aws.amazon.com/cloudformation/aws-cloudformation-templates/#regions)，选择相应的区域，找到 OpsWorks 堆栈 VPC 模板，然后选择**启动堆栈**。
+ 将模板文件复制到您的系统中，在 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/)中选择适当的区域，并使用 **Create Stack (创建堆栈)** 向导的 **Upload a template to Amazon S3 (将模板上传到 Amazon S3)** 选项从您的系统中上传模板。

示例模板包括提供创建 OpsWorks 堆栈所需的 VPC、子网和负载均衡器的 IDs 输出。您可以通过选择 CloudFormation 控制台窗口底部的 “**输出**” 选项卡来查看它们。

![\[Stack outputs table showing VPC, subnet, and load balancer IDs for OpsWorks-in-VPC stack.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/vpc_cfn_outputs.png)
