

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

# 将数据库添加到 Elastic Beanstalk 环境
<a name="using-features.managing.db"></a>

Elastic Beanstalk 提供与 [Amazon Relational Database Service（Amazon RDS）](https://www.amazonaws.cn/rds/)进行*耦合*数据库集成的功能。在创建环境时，您可以使用 Elastic Beanstalk 将 MySQL、PostgreSQL、Oracle 或 SQL Server 数据库添加到现有环境或新环境中。在添加已与某个环境耦合的数据库实例时，Elastic Beanstalk 会向应用程序提供连接信息。它通过设置数据库主机名、端口、用户名、密码和数据库名称的环境属性来完成此操作。

**使用耦合数据库的优势**  
如果您之前没有将数据库实例与应用程序结合使用，那么我们建议您首先按照本主题中介绍的过程操作，使用 Elastic Beanstalk 服务将数据库添加到测试环境。这样，您就可以验证应用程序是否可以读取环境属性、构建连接字符串以及连接到数据库实例，而无需为 Elastic Beanstalk 外部的数据库执行额外的配置工作。

**投入生产时的注意事项**  
在验证应用程序可与数据库一起正常使用之后，您可以考虑转向生产环境。此时，您可以选择将数据库与 Elastic Beanstalk 环境解耦，以转向提供更大灵活度的配置。解耦的数据库可以作为外部 Amazon RDS 数据库实例保持运行。解耦数据库不会影响环境的正常运行状态。如果您需要终止环境，您可以这样做，还可以选择在 Elastic Beanstalk 之外保持数据库可用和运行的选项。

**迁移到解耦数据库的好处**  
使用外部数据库有多种优点。您可以从多个环境连接到外部数据库，使用集成数据库不支持的数据库类型以及执行 blue/green 部署。作为使用 Elastic Beanstalk 创建的解耦数据库的替代方法，您还可以在 Elastic Beanstalk 环境之外创建数据库实例。这两个选项都会产生一个位于 Elastic Beanstalk 环境外部的数据库实例，并且需要其他安全组和连接字符串配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。

**Topics**
+ [数据库生命周期](#environments-cfg-rds-lifecycle)
+ [使用控制台向环境中添加 Amazon RDS 数据库实例](#environments-cfg-rds-create)
+ [连接到数据库](#environments-cfg-rds-connect)
+ [使用控制台配置集成 RDS 数据库实例](#using-features.managing.db.CON)
+ [使用配置文件配置集成 RDS 数据库实例](#using-features.managing.db.namespace)
+ [使用控制台解耦 RDS 数据库实例](#using-features.decoupling.db)
+ [使用配置文件解耦 RDS 数据库实例](#using-features.decoupling-config-files.db)

## 数据库生命周期
<a name="environments-cfg-rds-lifecycle"></a>

在将数据库与 Elastic Beanstalk 环境解耦后，您可以选择要对其执行的操作。您可以选择的选项统称为*删除策略*。在您[将数据库与 Elastic Beanstalk 环境解耦](#using-features.decoupling.db)或者终止 Elastic Beanstalk 环境之后，以下删除策略适用于数据库：
+ *Snapshot*（快照）– 在 Elastic Beanstalk 终止数据库之前，它会保存数据库的快照。当您将数据库实例添加到 Elastic Beanstalk 环境或创建独立数据库时，您可以从快照中恢复数据库。有关从快照中创建新的独立数据库实例的更多信息，请参阅*《Amazon RDS 用户指南》*中的[从数据库快照还原](https://docs.amazonaws.cn//AmazonRDS/latest/UserGuide/USER_RestoreFromSnapshot.html)。您可能产生存储数据库快照的费用。有关更多信息，请参阅 [Amazon RDS 定价](https://www.amazonaws.cn/rds/pricing/)的*备份存储*部分。
+ *Delete*（删除）– Elastic Beanstalk 终止数据库。终止后，数据库实例将不再可用于任何操作。
+ *Retain*（保留）– 数据库实例未终止。尽管数据库与 Elastic Beanstalk 解耦，但它仍然可用且可运行。然后，您可以配置一个或多个环境以作为外部 Amazon RDS 数据库实例连接到数据库。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。

## 使用控制台向环境中添加 Amazon RDS 数据库实例
<a name="environments-cfg-rds-create"></a>

您可以使用 Elastic Beanstalk 控制台将数据库实例添加到环境。

**向环境添加数据库实例**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 选择数据库引擎，然后输入用户名和密码。

1. 要保存更改，请选择页面底部的 **Apply**（应用）。

您可以配置以下选项：
+ **Snapshot**（快照）– 选择现有数据库快照。Elastic Beanstalk 还原该快照并将它添加到您的环境。默认值为 **None**（无）。默认值为 **None**（无），这将允许您使用此页面上的其他设置来配置新的数据库。
+ **Engine**（引擎）– 选择数据库引擎。
+ **Engine version**（引擎版本）– 选择数据库引擎的具体版本。
+ **Instance Class**（实例类）– 选择数据库实例类。有关数据库实例类的信息，请参阅 [https://aws.amazon.com/rds/](https://www.amazonaws.cn/rds/)。
+ **Storage**（存储）– 选择要为数据库预置的存储空间量。您可以以后增加分配的存储空间，但是不能降低它。有关存储分配的信息，请参阅[功能](https://www.amazonaws.cn/rds/#features)。
+ **Username**（用户名）– 仅使用数字和字母组合输入您选择的用户名称。
+ **Password**（密码）– 输入您选择的密码，包含 8-16 个可打印 ASCII 字符（不包括 `/`、`\` 和 `@`）。
+ **Availability**（可用性）– 选择 **High (Multi-AZ)**（高(多可用区)）可在第二个可用区中运行热备份以实现高可用性。
+ **Database deletion policy**（数据库删除策略）– 删除策略决定数据库在与您的环境[解耦](#using-features.decoupling.db)之后会发生的情况。可以设置为下列值之一：`Create Snapshot`、`Retain` 或 `Delete`。这些值在同一主题中的[数据库生命周期](#environments-cfg-rds-lifecycle)中进行了描述。

**注意**  
Elastic Beanstalk 会使用您提供的用户名和密码为数据库创建主用户。要了解有关主用户及其权限的更多信息，请参阅[主用户账户权限](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/UsingWithRDS.MasterAccounts.html)。

添加一个数据库实例大约需要 10 分钟。更新完成后，新数据库与环境*耦合*。您的应用程序就可以通过以下环境属性访问数据库实例的主机名和其他连接信息。


| 属性名称 | 描述 | 属性值 | 
| --- | --- | --- | 
|  `RDS_HOSTNAME`  |  数据库实例的主机名。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Endpoint**（端点）。  | 
|  `RDS_PORT`  |  数据库实例接受连接的端口。默认值因数据库引擎而异。  |  在 Amazon RDS 控制台的 **Connectivity & security**（连接和安全）选项卡上：**Port**（端口）。  | 
|  `RDS_DB_NAME`  |  数据库名称 **ebdb**。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**DB Name**（数据库名称）。  | 
|  `RDS_USERNAME`  |  您为数据库配置的用户名。  |  在 Amazon RDS 控制台的 **Configuration**（配置）选项卡上：**Master username**（主用户名）。  | 
|  `RDS_PASSWORD`  |  您为数据库配置的密码。  |  在 Amazon RDS 控制台中不可供参考。  | 

## 连接到数据库
<a name="environments-cfg-rds-connect"></a>

使用连接信息，通过环境变量与应用程序内的数据库连接。有关配合使用 Amazon RDS 和您的应用程序的详细信息，请参阅以下主题。
+ Java SE – [连接数据库 (Java SE 平台)](java-rds.md#java-rds-javase)
+ Java with Tomcat – [连接数据库 (Tomcat 平台)](java-rds.md#java-rds-tomcat)
+ Node.js – [连接到数据库](create-deploy-nodejs.rds.md#nodejs-rds-connect)
+ .NET – [连接到数据库](create_deploy_NET.rds.md#dotnet-rds-connect)
+ PHP – [使用 PDO 或 “我的” 连接到数据库 SQLi](create_deploy_PHP.rds.md#php-rds-connect)
+ Python – [连接到数据库](create-deploy-python-rds.md#python-rds-connect)
+ Ruby – [连接到数据库](create_deploy_Ruby.rds.md#ruby-rds-connect)

## 使用控制台配置集成 RDS 数据库实例
<a name="using-features.managing.db.CON"></a>

在 [Elastic Beanstalk 控制台](environments-console.md)中，您可以在环境的 **Configuration**（配置）页面上的 **Database**（数据库）部分中查看和修改数据库实例的配置设置。

**在 Elastic Beanstalk 控制台中配置环境的数据库实例**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

创建数据库后，您可以修改**实例类**、****存储**、密码**、**可用性**和**数据库删除策略**设置。如果您更改实例类，Elastic Beanstalk 将重新预置数据库实例。

如果您不再需要 Elastic Beanstalk 将数据库与环境关联，则可以通过选择 **Decouple database**（解耦数据库）来选择将其解耦。了解此操作涉及的选项和注意事项非常重要。有关更多信息，请参阅 [使用控制台解耦 RDS 数据库实例](#using-features.decoupling.db)。

**警告**  
请勿在 Elastic Beanstalk 提供的功能之外修改耦合数据库实例的设置（例如，在 Amazon RDS 控制台中）。如果您执行此操作，则 Amazon RDS 数据库配置可能与您的环境的定义不同步。在更新或重新启动环境时，环境中指定的设置将覆盖在 Elastic Beanstalk 外部所做的任何设置。  
如果您需要修改 Elastic Beanstalk 不直接支持的设置，请使用 Elastic Beanstalk [配置文件](#using-features.managing.db.namespace)。

## 使用配置文件配置集成 RDS 数据库实例
<a name="using-features.managing.db.namespace"></a>

您可以使用[配置文件](ebextensions.md)配置环境的数据库实例。使用 [`aws:rds:dbinstance`](command-options-general.md#command-options-general-rdsdbinstance) 命名空间中的选项。以下示例将分配的数据库存储大小修改为 100 GB。

**Example .ebextensions/ .config db-instance-options**  

```
option_settings:
  aws:rds:dbinstance:
    DBAllocatedStorage: 100
```

如果您需要配置 Elastic Beanstalk 不支持的数据库实例属性，则仍可使用配置文件，并使用 `resources` 键指定您的设置。以下示例将值设置为 `StorageType` 和 `Iops` Amazon RDS 属性。

**Example .ebextensions/ .config db-instance-properties**  

```
Resources:
  AWSEBRDSDatabase:
    Type: AWS::RDS::DBInstance
    Properties:
      StorageType:io1
      Iops: 1000
```

## 使用控制台解耦 RDS 数据库实例
<a name="using-features.decoupling.db"></a>

您可以将数据库与 Elastic Beanstalk 环境解耦，而不会影响环境的运行状况。在解耦数据库之前，请考虑以下要求：
+ *数据库解耦后应该会发生什么？*

  您可以选择创建数据库的快照，然后将其终止，将数据库作为 Elastic Beanstalk 之外的独立数据库保留运行，或者永久删除该数据库。**Database deletion policy**（数据库删除策略）设置决定了此结果。有关删除策略的详细描述，请参阅在同一主题中的 [数据库生命周期](#environments-cfg-rds-lifecycle)。
+ *在解耦之前，您是否需要对数据库配置设置进行任何更改？*

  如果您想对数据库进行任何配置更改，那么应该在数据库*解耦之前*应用它们。这包括对 **Database deletion policy**（数据库删除策略）的更改。仅应用解耦设置时，使用 **Decouple database**（解耦数据库）设置同时提交的任何待处理的更改将被忽略。

  

**将数据库实例与环境解耦**

1. 打开 [Elastic Beanstalk](https://console.amazonaws.cn/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 Amazon Web Services 区域

1. 在导航窗格中，选择 **Environments**（环境），然后从列表中选择环境的名称。

1. 在导航窗格中，选择 **Configuration (配置)**。

1. 在 **Database**（数据库）配置类别中，选择 **Edit**（编辑）。

1. 查看 **Database settings**（数据库设置）部分中的所有配置值，尤其是 **Database deletion policy**（数据库删除策略），此策略决定了数据库在解耦后会发生什么情况。

     
![\[Database settings form with engine, instance, storage, and deletion policy options.\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-rds-options-w-db-deletion-policies.png)

   

   如果所有其他配置设置均正确，请跳到**步骤 6** 来解耦数据库。
**警告**  
将 **Database deletion policy**（删除数据库策略）设置与 **Decouple database**（解耦数据库）*分开**应用*非常重要。如果您选择 **Apply**（应用）的目的是同时保存 **Decouple database**（解耦数据库）和新选择的 **Database deletion policy**（数据库删除策略），您选择的新删除策略将被忽略。Elastic Beanstalk 将按照先前设定的删除策略解耦数据库。如果先前设置的删除策略为 `Delete` 或者 `Create Snapshot`，则会有丢失数据库的风险，而不是遵循预期的待处理策略。

   如果任何配置设置需要更新，请执行以下操作：

   1. 在 **Database settings**（数据库设置）面板中进行必要的修改。

   1. 选择**应用**。保存数据库的配置更改将需要几分钟时间。

   1. 返回到**步骤 3**，然后从导航窗格中选择 **Configuration**（配置）。

1. 转到窗格的 **Database connection**（数据库连接）部分。

     
![\[Database connection options showing "Couple database" selected and "Decouple database" unselected.\]](http://docs.amazonaws.cn/elasticbeanstalk/latest/dg/images/aeb-rds-couple-decouple-db.png)

   

1. 选择 **Decouple database**（解耦数据库）。

1. 选择 **Apply**（应用）以启动数据库解耦操作。

删除策略设置决定了数据库的结果以及解耦数据库所需的时间长度。
+ 如果删除策略设置为 `Delete`，数据库将被删除。该操作可能需要大约 10-20 分钟，具体取决于数据库的大小。
+ 如果删除策略设置为 `Snapshot`，将创建数据库快照。然后，数据库将被删除。此过程所需的时间长度因数据库的大小而异。
+ 如果删除策略设置为 `Retain`，数据库在 Elastic Beanstalk 环境之外仍可运行。解耦数据库通常需要不到五分钟的时间。

 如果您决定在 Elastic Beanstalk 环境之外保留数据库，则需要采取其他步骤对其进行配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。如果您计划为生产环境使用解耦数据库，请验证数据库使用的存储类型适合您的工作负载。有关更多信息，请参阅《Amazon RDS 用户指南》**中的[数据库实例存储](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/CHAP_Storage.html)和[修改数据库实例](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)。

## 使用配置文件解耦 RDS 数据库实例
<a name="using-features.decoupling-config-files.db"></a>

您可以将数据库实例与 Elastic Beanstalk 环境解耦，而不会影响环境的运行状况。数据库实例在数据库解耦时应用的 *数据库删除策略*。

解耦数据库所需的两个选项都在 [aws:rds:dbinstance](command-options-general.md#command-options-general-rdsdbinstance) 命名空间中。这些特性如下所示：
+ `DBDeletionPolicy` 选项设置了删除策略。可以设置为下列值之一：`Snapshot`、`Delete` 或 `Retain`。这些值在同一主题中的[数据库生命周期](#environments-cfg-rds-lifecycle)中进行了描述。
+ `HasCoupledDatabase` 选项确定您的环境是否有耦合数据库。
  + 如果切换为 `true`，Elastic Beanstalk 会创建一个与您的环境耦合的新数据库实例。
  + 如果切换为 `false`，Elastic Beanstalk 开始将数据库实例与您的环境解耦。

如果要在解耦之前更改数据库配置，请先在单独的操作中应用任何配置更改。这包括更改 `DBDeletionPolicy` 配置。应用更改后，请运行单独的命令来设置解耦选项。如果同时提交其他配置设置和解耦设置，则在应用解耦设置时忽略其他配置选项设置。

**警告**  
请您务必运行这些命令以将 `DBDeletionPolicy` 和 `HasCoupledDatabase` 设置作为两个单独的操作应用。如果活跃删除策略已设置为 `Delete` 或者 `Snapshot`，您会有丢失数据库的风险。数据库遵循当前处于活跃状态的删除策略，而不是您预期的待处理删除策略。

**将数据库实例与环境解耦**

请按照以下步骤将数据库与 Elastic Beanstalk 环境解耦。您可以使用 EB CLI 或 Amazon CLI 来完成这些步骤。有关更多信息，请参阅[使用配置文件的高级环境自定义项](ebextensions.md)。

1. 如果要更改删除策略，请按以下格式设置配置文件。在此示例中，删除策略设置为保留。  
**Example**  

   ```
   option_settings:
     aws:rds:dbinstance:
       DBDeletionPolicy: Retain
   ```

1. 使用首选工具运行命令以完成配置更新。

1. 设置配置文件以将 `HasCoupledDatabase` 设置为 `false`。  
**Example**  

   ```
   option_settings:
     aws:rds:dbinstance:
       HasCoupledDatabase: false
   ```

1. 使用首选工具运行命令以完成配置更新。

删除策略设置决定了数据库的结果以及解耦数据库所需的时间长度。
+ 如果删除策略设置为 `Delete`，数据库将被删除。该操作可能需要大约 10-20 分钟，具体取决于数据库的大小。
+ 如果删除策略设置为 `Snapshot`，将创建数据库快照。然后，数据库将被删除。此过程所需的时间长度因数据库的大小而异。
+ 如果删除策略设置为 `Retain`，数据库在 Elastic Beanstalk 环境之外仍可运行。解耦数据库通常需要不到五分钟的时间。

 如果您决定在 Elastic Beanstalk 环境之外保留数据库，则需要采取其他步骤对其进行配置。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)。如果您计划为生产环境使用解耦数据库，请验证数据库使用的存储类型适合您的工作负载。有关更多信息，请参阅《Amazon RDS 用户指南》**中的[数据库实例存储](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/CHAP_Storage.html)和[修改数据库实例](https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html)。