

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

# 创建您的第一个 Node.js 堆栈
<a name="gettingstarted-node"></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 支持 团队联系。

此示例介绍如何创建支持 Node.js 应用程序服务器的 Linux 堆栈以及如何部署简单的应用程序。堆栈包括以下组件：
+ 包含两个实例[的 Node.js App Server 层](workinglayers-node.md)
+ 一个 [Elastic Load Balancing 负载均衡器](layers-elb.md)，用于将流量分配给应用程序服务器实例
+ [Amazon Relational Database Service (Amazon RDS) 服务层](#gettingstarted-node-next)，提供后端数据库

**Topics**
+ [先决条件](#gettingstarted-node-start)
+ [实施应用程序](#gettingstarted-node-app)
+ [创建数据库服务器和负载均衡器](#gettingstarted-node-create-db)
+ [创建堆栈](#gettingstarted-node-stack)
+ [部署应用程序](#gettingstarted-node-deploy)
+ [接下来做什么？](#gettingstarted-node-next)

## 先决条件
<a name="gettingstarted-node-start"></a>

本演练假定：
+ 您拥有 AWS 账户，并且对如何使用 OpsWorks 堆栈有基本的了解。

  如果您不熟悉 OpsWorks Stacks 或 AWS，请通过完成中的[Chef 11 Linux 堆栈入门](gettingstarted.md)入门教程来学习基础知识。
+ 您大致了解如何实施 Node.js 应用程序。

  如果您是首次使用 Node.js，请完成介绍性教程 (例如 [节点：启动并运行](http://chimera.labs.oreilly.com/books/1234000001808/index.html)) 以了解基础知识。
+ 您已在 Amazon Web Services Region 中创建至少一个计划用于此示例的堆栈。

  当您在某个区域中创建第一个堆栈时，Stac OpsWorks ks 会为每种层类型创建一个亚马逊弹性计算云 (Amazon EC2) 安全组。您需要这些安全组来创建 Amazon RDS 数据库 (DB) 实例。如果您不熟悉 OpsWorks Stacks，我们建议您在本示例中[Chef 11 Linux 堆栈入门](gettingstarted.md)使用与学习教程时相同的区域。如果您想使用新区域，请在该区域中创建一个新堆栈；该堆栈不需要具有层或实例。创建堆栈后， OpsWorks Stacks 会自动向该区域添加一组安全组。
+ 您将在[默认 VPC](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-supported-platforms.html) 中创建您的堆栈。

  在本演练中，您可以使用 EC2-Classic，但有些细节会略有不同。例如，使用 EC2-Classic，您可以指定实例的可用区 (AZ)，而不是其子网。
+ 您的 IAM 用户拥有 OpsWorks 堆栈的完全访问权限。

  出于安全原因，强烈建议您不要在本演练中使用账户的根凭证。相反，创建一个拥有 OpsWorks Stacks 完全访问权限的用户，并将这些凭据与 Stacks 一起 OpsWorks 使用。有关更多信息，请参阅 [创建 管理用户](opsworks-security-users-manage-admin.md)。

## 实施应用程序
<a name="gettingstarted-node-app"></a>

本演练使用一个简单的 [Express](http://expressjs.com/) 应用程序，该应用程序连接到 Amazon RDS 数据库实例并列出该实例的数据库。

要实施应用程序，请在工作站上的方便位置创建一个名为 `nodedb` 的目录，并向该目录添加以下三个文件。

**Topics**
+ [程序包描述符](#w2ab1c14c71b9c11c13b8)
+ [布局文件](#w2ab1c14c71b9c11c13c10)
+ [代码文件](#w2ab1c14c71b9c11c13c12)

### 程序包描述符
<a name="w2ab1c14c71b9c11c13b8"></a>

要创建应用程序的程序包描述符，请将一个名为 `package.json` 的包含以下内容的文件添加到 `nodedb` 目录。`package.json` 是 Express 应用程序必需的，并且必须位于应用程序的根目录中。

```
{
  "name": "Nodejs-DB",
  "description": "Node.js example application",
  "version": "0.0.1",
  "dependencies": {
    "express": "*",
    "ejs": "*",
    "mysql": "*"
  }
}
```

此 `package.json` 示例是相当少的。它定义所需的 `name` 和 `version` 属性并列出依赖程序包：
+ `express` 引用 [Express](http://expressjs.com/) 程序包。
+ `ejs` 引用 [EJS](http://www.embeddedjs.com/) 程序包，应用程序使用此程序包将文本插入 HTML 布局文件中。
+ `mysql` 引用 [node-mysql](https://github.com/felixge/node-mysql) 程序包，应用程序使用此程序包连接到 RDS 实例。

有关程序包描述符文件的更多信息，请参阅 [package.json](https://docs.npmjs.com/cli/v9/configuring-npm/package-json)。

### 布局文件
<a name="w2ab1c14c71b9c11c13c10"></a>

要创建应用程序的布局文件，请将 `views` 目录添加到 `nodedb` 目录，然后将文件添加到一个名为 `views` 的包含以下内容的文件添加到 `index.html`：

```
<!DOCTYPE html>
<html>
<head>
  <title>AWS Opsworks Node.js Example</title>
</head>
<body>
  <h1>AWS OpsWorks Node.js Example</h1>
    <p>Amazon RDS Endpoint: <i><%= hostname %></i></p>
    <p>User: <i><%= username %></i></p>
    <p>Password: <i><%= password %></i></p>
    <p>Port: <i><%= port %></i></p>
    <p>Database: <i><%= database %></i></p>

    <p>Connection: <%= connectionerror %></p>
    <p>Databases: <%= databases %></p>
</body>
</html>
```

在本示例中，布局文件是一个简单的 HTML 文档，该文档将显示 Amazon RDS 中的某些数据。每个 `<%= ... =>` 元素均表示一个在应用程序的代码文件 (我们接下来将创建该文件) 中定义的变量的值。

### 代码文件
<a name="w2ab1c14c71b9c11c13c12"></a>

要创建应用程序的代码文件，请将 `server.js` 文件与以下内容一起添加到 `nodedb` 目录。

**重要**  
使用 OpsWorks Stacks，Node.js 应用程序的主代码文件必须命名`server.js`并位于应用程序的根文件夹中。

```
var express = require('express');
var mysql = require('mysql');
var dbconfig = require('opsworks'); //[1] Include database connection data
var app = express();
var outputString = "";

app.engine('html', require('ejs').renderFile);

//[2] Get database connection data
app.locals.hostname = dbconfig.db['host'];
app.locals.username = dbconfig.db['username'];
app.locals.password = dbconfig.db['password'];
app.locals.port = dbconfig.db['port'];
app.locals.database = dbconfig.db['database'];
app.locals.connectionerror = 'successful';
app.locals.databases = '';

//[3] Connect to the Amazon RDS instance
var connection = mysql.createConnection({
    host: dbconfig.db['host'],
    user: dbconfig.db['username'],
    password: dbconfig.db['password'],
    port: dbconfig.db['port'],
    database: dbconfig.db['database']
});

connection.connect(function(err)
{
    if (err) {
        app.locals.connectionerror = err.stack;
        return;
    }
});

// [4] Query the database
connection.query('SHOW DATABASES', function (err, results) {
    if (err) {
        app.locals.databases = err.stack;
    }
    
    if (results) {
        for (var i in results) {
            outputString = outputString + results[i].Database + ', ';
        }
        app.locals.databases = outputString.slice(0, outputString.length-2);
    }
});

connection.end();

app.get('/', function(req, res) {
    res.render('./index.html');
});

app.use(express.static('public'));

//[5] Listen for incoming requests
app.listen(process.env.PORT);
```

该示例显示数据库连接信息，还将查询数据库服务器并显示服务器的数据库。您可以根据需要轻松泛化它以便与数据库进行交互。以下说明是指上一代码中的已编号注释。

**[1] 包括数据库连接数据**  
此 `require` 语句包含数据库连接数据。如后所述，当您将数据库实例附加到应用程序时， OpsWorks Stacks 会将连接数据放在名为的文件中`opsworks.js`，该文件类似于以下内容：  

```
exports.db = {
  "host":"nodeexample.cdlqlk5uwd0k.us-west-2.rds.amazonaws.com",
  "database":"nodeexampledb",
  "port":3306,
  "username":"opsworksuser",
  "password":"your_pwd",
  "reconnect":true,
  "data_source_provider":"rds",
  "type":"mysql"}
```
`opsworks.js` 位于应用程序的 `shared/config` 目录中，即 `/srv/www/app_shortname/shared/config`。但是， OpsWorks Stacks 在应用程序的根目录`opsworks.js`中放置了指向的符号链接，因此您只需使用即可包含该对象。`require 'opsworks'`

**[2] 获取数据库连接数据**  
这组语句通过以下方式显示 `opsworks.js` 的连接数据：将 `db` 对象中的值分配给一组 `app.locals` 属性（每个属性映射到 `index.html` 文件中的一个 <%= ... %> 元素）。呈现的文档将 <%= ... %> 元素替换为对应的属性值。

**[3] 连接到 Amazon RDS 实例**  
该示例使用 `node-mysql` 访问数据库。为了连接到数据库，该示例会通过将连接数据传递到 `connection` 来创建 `createConnection` 对象，然后调用 `connection.connect` 来建立连接。

**[4] 查询数据库**  
建立连接后，该示例会调用 `connection.query` 以查询数据库。此示例只查询服务器的数据库名称。`query` 返回一个 `results` 对象数组（每个数据库对应一个该对象）以及分配给 `Database` 属性的数据库名称。该示例将串联这些名称并将其分配给 `app.locals.databases,`，后者将在渲染的 HTML 页面中显示此列表。  
本示例包含五个数据库，一个是您在创建 RDS 实例时指定的 `nodeexampledb` 数据库，其他四个是由 Amazon RDS 自动创建的数据库。

**[5] 侦听传入请求**  
最后一个语句将侦听指定端口上的传入请求。您无需指定明确的端口值。将应用程序添加到堆栈时，需要指定该应用程序是支持 HTTP 还是 HTTPS 请求。 OpsWorks 然后，Stacks 将`PORT`环境变量设置为 80 (HTTP) 或 443 (HTTPS)，您就可以在应用程序中使用该变量。  
可以在其他端口上进行侦听，但是 Node.js App Server 层的内置安全组 **AWS OpsWorks-nodejs-App-Server** 仅允许进入端口 80、443 和 22 (SSH) 的入站用户流量。要允许流入其他端口的入站用户流量，请使用适当的入站规则[创建安全组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html)并[将其分配给 Node.js App Server 层](workinglayers-basics-edit.md#workinglayers-basics-edit-security)。请勿通过编辑内置安全组来修改入站规则。每次创建堆栈时，Stac OpsWorks ks 都会使用标准设置覆盖内置安全组，因此您所做的任何更改都将丢失。

**注意**  
在[创建](workingapps-creating.md#workingapps-creating-environment)或[更新](workingapps-editing.md)关联的应用程序时，可以将自定义环境变量与您的应用程序关联。您也可以通过使用自定义 JSON 和自定义配方将数据传递到您的应用程序。有关更多信息，请参阅 [传递数据到应用程序](apps-data.md)。

## 创建数据库服务器和负载均衡器
<a name="gettingstarted-node-create-db"></a>

此示例使用 Amazon RDS 数据库服务器和 Elastic Load Balancing 负载均衡器实例。您必须先单独创建每个实例，然后将其合并到堆栈中。本部分介绍如何创建新的数据库和负载均衡器实例。相反，您可以使用现有实例，但建议您通读此过程以确保正确配置这些实例。

下面介绍了如何创建足够此示例使用的最低配置的 RDS 数据库实例。有关更多信息，请参阅 [Amazon RDS 用户指南](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Welcome.html)。

**创建 RDS 数据库实例**

1. 

**打开 控制台。**

   打开 [Amazon RDS 控制台，](https://console.aws.amazon.com/rds/)并将区域设置为美国西部（俄勒冈州）。在导航窗格中，选择 **RDS Dashboard**，然后选择 **Launch DB Instance**。

1. 

**指定数据库引擎。**

   选择 **MySQL Community Edition** 作为数据库引擎。

1. 

**拒绝多可用区部署。**

   选择 **No, this instance...**，然后选择 **Next**。在此示例中，您不需要多可用区部署。

1. 

**配置基本设置。**

   在 **DB Instance Details** 页面上，指定以下设置：
   + **DB Instance Class**：**db.t2.micro**
   + **Multi-AZ Deployment**：**No**
   + **分配的存储空间**：**5** GB
   + **数据库实例标识符**：**nodeexample**
   + **主用户名**：**opsworksuser**
   + **Master Password**：所选密码

   记录实例标识符、用户名和密码以供将来使用，接受其他选项的默认设置，然后选择 **Next**。

1. 

**配置高级设置。**

   在 **Configure Advanced Settings** 页面上，指定以下设置：
   + **数据库名称**：**nodeexampledb**
   + **数据库安全组：AWS--db-** **Master OpsWorks-** Server
**注意**  
**AWS-OpsWorks db-Master-Server** 安全组只允许您的堆栈的实例访问数据库。如果您需要直接访问数据库，请使用适当的入站规则将其他安全组连接到 RDS 数据库实例。有关更多信息，请参阅 [Amazon RDS 安全组](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.RDSSecurityGroups.html)。您也可以通过将实例放置到 VPC 中来控制访问。有关更多信息，请参阅 [在 VPC 中运行堆栈](workingstacks-vpc.md)。

   记录数据库名称以供将来使用，接受其他设置的默认值，然后选择 **Launch DB Instance**。

以下过程介绍如何在此示例中创建 Elastic Load Balancing 负载均衡器。有关更多信息，请参阅 [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elastic-load-balancing.html)。

**创建负载均衡器**

1. 

**打开 Amazon EC2 控制台。**

   打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2/)，确保将该区域设置为美国西部（俄勒冈）。在导航窗格中，选择 **Load Balancers**，然后选择 **Create Load Balancer**。

1. 

**定义负载均衡器。**

   在 **Define Load Balancer** 页面上，指定以下设置。
   + **名称** – **Node-LB**
   + **创建内部 LB** - **My Default VPC**

   接受其他选项的默认设置，然后选择 **Next**。

1. 

**分配安全组。**

   在 **Assign Security Groups** 页面上，指定以下组：
   + **default VPC security group**
   + **AWS-nodej OpsWorks s-App-Server**

   选择**下一步**。在 **Configure Security Settings** 页面上，选择 **Next**。在此示例中，您不需要安全侦听器。

1. 

**配置运行状况检查。**

   在**配置运行状况检查**页面上，将 **Ping 路径**设置为 **/** 并接受其他设置的默认值。选择**下一步**。在**添加 EC2 实例**页面上，选择**下一步**。在**添加标签**页面上，选择**查看并创建**。 OpsWorks Stacks 负责向负载均衡器添加 EC2 实例的任务，此示例不需要标签。

1. 

**创建负载均衡器。**

   在 **Review** 页面上，选择 **Create** 以创建您的负载均衡器。

## 创建堆栈
<a name="gettingstarted-node-stack"></a>

现在，您已拥有创建堆栈所需的所有组件。

**要创建 堆栈，请执行以下操作：**

1. 

**登录 OpsWorks Stacks 控制台。**

   登录 [OpsWorks Stacks 控制台](https://console.aws.amazon.com/opsworks/)并选择 **Add Stack (添加堆栈)**。

1. 

**创建堆栈。**

   要创建新的堆栈，请选择 **Chef 11 stack**，然后指定以下设置。
   +  – **NodeStack**
   + **区域** - **美国西部（俄勒冈）**

     虽然您可在任何 Amazon Web Services Region 中创建堆栈，但在教程中，建议您在美国西部（俄勒冈州）中创建堆栈。

   选择 **Add Stack**。有关堆栈配置设置的更多信息，请参阅[创建新堆栈](workingstacks-creating.md)。

1. 

**使用连接的负载均衡器添加 Node.js App Server 层。**

   在**NodeStack**页面上，选择**添加图层**，然后指定以下设置：
   + **图层类型** — **Node.js App Server**
   + **弹性负载均衡器** — **Node-LB**

   接受其他设置的默认值，然后选择 **Add Layer**。

1. 

**将实例添加到层并启动实例。**

   在导航窗格中，选择 **Instances**，然后将两个实例添加到 Rails App Server 层，如下所示。

   1. 在 **Node.js App Server** 下，选择**添加实例**。

      将 **Size** 设置为 **t2.micro**，接受其他设置的默认值，然后选择 **Add Instance**。

   1. 选择 **\$1Instance**，然后将另一个 **t2.micro** 实例添加到其他子网中的层。

      这会将实例放置在其他可用区 (AZ) 中。

   1. 选择 **Add instance**。

   1. 要启动两个实例，请选择 **Start All Instances**。

   您已向此层分配 Elastic Load Balancing 负载均衡器。当实例进入或离开在线状态时， OpsWorks Stacks 会自动向负载均衡器注册或注销该实例。
**注意**  
对于生产堆栈，我们建议您将应用程序服务器实例分布在多个堆栈中 AZs。如果用户无法连接到可用区，负载均衡器会将传入流量路由到剩余区域中的实例，并且您的站点将继续工作。

1. 

**将 RDS 数据库实例注册到堆栈。**

   在导航窗格中，选择 **Resources** 并将 RDS 数据库实例注册到堆栈，如下所示。

   1. 选择 **RDS** 选项卡，然后选择 **Show Unregistered RDS DB** 实例。

   1. 选择 **nodeexampledb** 实例，然后指定以下设置：
      + **用户** 在创建实例时指定的主用户名；在此示例中为 **opsworksuser**。
      + **密码 ** - 创建实例时指定的主密码。

   1. 选择 **注册到堆栈 ** 以将 RDS 数据库实例作为 [Amazon RDS 服务层](workinglayers-db-rds.md)添加到堆栈。
**警告**  
OpsWorks Stacks 不验证**用户**或**密码**值，它只是将它们传递给应用程序。如果您错误地输入这些值，您的应用程序将无法连接到数据库。

   选择 [注册到堆栈 ](workinglayers-db-rds.md) 以将 RDS 数据库实例作为 **Amazon RDS 服务层**添加到堆栈。

## 部署应用程序
<a name="gettingstarted-node-deploy"></a>

您必须在远程存储库中存储应用程序。部署时， OpsWorks Stacks 会将代码和相关文件从存储库部署到应用服务器实例。为方便起见，此示例将公有 Amazon Simple Storage Service (Amazon S3) 存档用作存储库，但您也可以使用多种其他存储库类型，包括 Git 和 Subversion。有关更多信息，请参阅 [应用程序源](workingapps-creating.md#workingapps-creating-source)。

**部署 应用程序**

1. 

**将应用程序打包到存档文件中。**

   创建 `.zip` 目录和子目录的 `nodedb` 存档，名为 nodedb.zip。您还可以使用其他类型的存档文件，包括 gzip、bzip2 和 tarball。请注意， OpsWorks Stacks 不支持未压缩的压缩包。有关更多信息，请参阅 [应用程序源](workingapps-creating.md#workingapps-creating-source)。

1. 

**将存档文件上传到 Amazon S3。**

   将 `nodedb.zip` 上传到 Amazon S3 存储桶，使该文件成为公有文件，然后复制文件的 URL 以供将来使用。有关如何创建存储桶和上传文件的更多信息，请转至 [Amazon Simple Storage Service 入门指南](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html)。
**注意**  
OpsWorks 堆栈也可以从 Amazon S3 存储桶部署私有文件，但为简单起见，此示例使用公共文件。有关更多信息，请参阅 [应用程序源](workingapps-creating.md#workingapps-creating-source)。

1. 

**创建 OpsWorks Stacks 应用程序。**

   返回 OpsWorks Stacks 控制台，在导航窗格中选择 “**应用程序**”，然后选择 “**添加应用程序**”。指定以下设置：
   + **名称** – `NodeDB`。

     该字符串是应用程序的显示名称。在大多数情况下，您需要应用程序的短名称， OpsWorks Stacks通过将所有字符转换为小写并删除标点符号从显示名称生成该名称。在本示例中，短名称是 `nodedb`。要验证应用程序的短名称，请在创建应用程序后，在 **Apps** 页上选择应用程序以显示其详细信息页面。
   + **Type** – `Node.js`。
   + **Data source type** - `RDS`。
   + **Database instance** - 选择之前注册的 Amazon RDS 数据库实例。
   + **Database name** - 指定您之前创建的数据库名称 (本示例中为 `nodeexampledb`)。
   + **Repository type** - `Http Archive`。

     您必须对公有 Amazon S3 文件使用此存储库类型。`S3 Archive` 类型仅用于私有存档。
   + **Repository URL** - 存档文件的 Amazon S3 URL。

   对其余设置使用默认值，然后单击 **Add App** 创建应用程序。

1. 

**部署应用程序。**

   转至 **Apps** 页面，然后在 NodeDB 应用程序的 **Actions** 列中，选择 **deploy**。然后选择 **De** ploy 将应用程序部署到服务器实例。 OpsWorks Stacks 在每个实例上运行 Deploy 配方，从存储库下载应用程序并重新启动服务器。当每个实例均有一个绿色复选标记且 **Status** 为 **successful** 时，表示部署已完成，并且应用程序已准备好开始处理请求。
**注意**  
如果部署失败，请选择 **Log** 列中的 **show** 以显示部署的 Chef 日志。错误信息显示在底部附近。

1. 

**打开 应用程序。**

   要打开应用程序，请选择 **Layers**，再选择负载均衡器，然后选择负载均衡器的 DNS 名称，这会将 HTTP 请求发送到负载均衡器。您应看到类似于以下内容的信息。  
![\[AWS OpsWorks Node.js example showing RDS endpoint, user credentials, and database details.\]](http://docs.aws.amazon.com/zh_cn/opsworks/latest/userguide/images/node_walkthrough.png)

**注意**  
OpsWorks 在设置过程中，Stacks 会自动将应用程序部署到新实例。仅联机实例需要手动部署。有关更多信息，请参阅 [部署应用程序](workingapps-deploying.md)。有关部署的一般讨论 (包括一些更高级的部署策略)，请参阅[管理和部署应用程序和说明书](best-deploy.md)。

## 接下来做什么？
<a name="gettingstarted-node-next"></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 支持 团队联系。

本演练将指导您了解设置简单的 Node.js 应用程序服务器堆栈的基础知识。以下是有关后续操作的一些建议。

**检查 Node.js 内置说明书**  
如果您想详细了解实例是如何配置的，请参阅该层的内置食谱 [opsworks\$1nodejs](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/opsworks_nodejs)，其中包含 OpsWorks Stacks用于安装和配置软件的配方和相关文件，以及内置的部署食[谱，其中包含Stacks用于部署](https://github.com/aws/opsworks-cookbooks/tree/release-chef-11.10/deploy)应用程序的配方。 OpsWorks 

**自定义服务器配置**  
该示例堆栈是非常基本的堆栈。要在生产中使用，您可能需要自定义堆栈。有关更多信息，请参阅 [自定义堆栈 OpsWorks](customizing.md)。

**添加 SSL 支持**  
您可以为应用程序启用 SSL 支持，并在创建应用程序时向 OpsWorks Stacks 提供相应的证书。 OpsWorks 然后，堆栈将证书安装到相应的目录中。有关更多信息，请参阅 [使用 SSL](workingsecurity-ssl.md)。

**添加内存中数据缓存**  
生产级站点通常会通过在内存中的关键字/值存储 (如 Redis 或 Memcache) 中缓存数据来提高性能。你可以将两者与堆 OpsWorks 栈堆叠一起使用。有关更多信息，请参阅[ElastiCache Redis](other-services-redis.md)和[Memcached](workinglayers-mem.md)。

**使用更高级的部署策略**  
该示例使用一个简单的应用程序部署战略，该战略将更新同时部署到每个实例。此方法简单快捷，但不允许犯错误。如果部署失败或更新存在任何问题，则可能影响生产堆栈中的每个实例，从而可能中断或禁用您的站点，直到您解决该问题。有关部署策略的更多信息，请参阅[管理和部署应用程序和说明书](best-deploy.md)。

**扩展 Node.js App Server 层**  
您可以通过多种方式扩展层。例如，您可以实施配方以在实例上运行脚本，或实施 Chef 部署说明书以自定义应用程序部署。有关更多信息，请参阅 [扩展层](workingcookbook-extend.md)。

**定义环境变量**  
您可以通过定义关联应用程序的环境变量来将数据传递到您的应用程序。部署应用程序时， OpsWorks Stacks 会导出这些变量，以便您可以从应用程序访问它们。有关更多信息，请参阅 [使用环境变量](apps-environment-vars.md)。