

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

# 将带有外部 Amazon RDS 数据库的高可用性 Drupal 网站部署到 Elastic Beanstalk
<a name="php-hadrupal-tutorial"></a>

本教程将引导您完成在[外部启动 RDS 数据库实例](AWSHowTo.RDS.md)的过程 AWS Elastic Beanstalk。然后，它介绍了配置运行 Drupal 网站的高可用性环境以连接到该数据库实例。该网站使用 Amazon Elastic File System (Amazon EFS) 作为已上传文件的共享存储空间。在 Elastic Beanstalk 之外运行数据库实例会将数据库与环境生命周期分离，并允许您从多个环境连接到同一个数据库，将一个数据库换成另一个数据库，或者在不影响数据库的情况下 blue/green 执行部署。

**Topics**
+ [先决条件](#php-hadrupal-tutorial-prereqs)
+ [在 Amazon RDS 中启动数据库实例](#php-hadrupal-tutorial-database)
+ [启动 Elastic Beanstalk 环境](#php-hadrupal-tutorial-launch)
+ [配置安全设置和环境属性](#php-hadrupal-tutorial-configure)
+ [配置并部署您的应用程序](#php-hadrupal-tutorial-deploy)
+ [安装 Drupal](#php-hadrupal-tutorial-install)
+ [更新 Drupal 配置并删除访问限制](#php-hadrupal-tutorial-updateenv)
+ [配置 Auto Scaling 组](#php-hadrupal-tutorial-autoscaling)
+ [清理](#php-hadrupal-tutorial-cleanup)
+ [后续步骤](#php-hadrupal-tutorial-nextsteps)

## 先决条件
<a name="php-hadrupal-tutorial-prereqs"></a>

本教程假设您对基本 Elastic Beanstalk 操作和 Elastic Beanstalk 控制台有一定了解。如果尚不了解，请按照[了解如何开始使用 Elastic Beanstalk](GettingStarted.md)中的说明操作以启动您的第一个 Elastic Beanstalk 环境。

为了遵循本指南中的步骤，您需要命令行终端或 Shell，以便运行命令。命令显示在列表中，以提示符（\$1）和当前目录名称（如果有）开头。

```
~/eb-project$ this is a command
this is output
```

在 Linux 和 macOS 中，您可使用您首选的 Shell 和程序包管理器。在 Windows 上，您可以[安装适用于 Linux 的 Windows 子系统](https://docs.microsoft.com/en-us/windows/wsl/install-win10)，以获取与 Windows 集成的 Ubuntu 和 Bash 版本。

本教程中针对 Amazon Relational Database Service (Amazon RDS) 任务的过程假定您正在默认的 [Amazon Virtual Private Cloud](https://docs.aws.amazon.com/vpc/latest/userguide/) (Amazon VPC) 中启动资源。所有新账户在每个区域中均包含一个默认 VPC。如果您没有默认 VPC，则这些过程将会发生变化。[将 Elastic Beanstalk 和 Amazon RDS 结合使用](AWSHowTo.RDS.md)有关 EC2经典和自定义 VPC 平台的说明，请参阅。

此示例应用程序使用 Amazon EFS。它仅适用于支持 Amazon EFS 的 AWS 区域。要了解有关支持 AWS 区域的信息，请参阅中的 [Amazon Elastic File System 终端节点和配额*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/elasticfilesystem.html)。

如果您的 Elastic Beanstalk 环境的平台使用 PHP 7.4 或更早版本，我们建议您在本教程中使用 Drupal 8.9.13 版本。对于安装有 PHP 8.0 或更高版本的平台，我们建议您使用 Drupal 9.1.5。

有关 Drupal 版本及其支持的 PHP 版本的更多信息，请参阅 Drupal 网站上的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。Drupal 推荐的核心版本已在 [https://www.drupal 网站上列出。 org/project/drupal](https://www.drupal.org/project/drupal)。

## 在 Amazon RDS 中启动数据库实例
<a name="php-hadrupal-tutorial-database"></a>

要将外部数据库与在 Elastic Beanstalk 中运行的应用程序结合使用，请首先使用 Amazon RDS 启动数据库实例。当您使用 Amazon RDS 启动实例时，它完全独立于 Elastic Beanstalk 和您的 Elastic Beanstalk 环境，并且不会由 Elastic Beanstalk 终止或监控。

使用 Amazon RDS 控制台可启动多可用区 **MySQL** 数据库实例。选择多可用区部署可确保您的数据库将进行故障转移并在源数据库实例中断服务时继续可用。

**在默认 VPC 中启动 RDS 数据库实例**

1. 打开 [RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 在导航窗格中，选择 **Databases**（数据库）。

1. 选择**创建数据库**。

1. 选择 **Standard Create**（标准创建）。
**重要**  
请勿选择 **Easy Create**（轻松创建）。如果您选择它，您将无法配置启动此 RDS 数据库所需的设置。

1. 在 **Additional configuration**（附加配置）下，对于 **Initial database name**（初始数据库名称），键入 **ebdb**。

1. 请查看默认设置并根据您的具体要求调整这些设置。请注意以下选项：
   + **DB instance class**（数据库实例类）– 选择对于您的工作负载具有适当的内存量和 CPU 能力的实例大小。
   + **多可用区部署** — 为了获得高可用性，请将其设置为在**不同的可用区中创建 Aurora Replica/Reader 节点**。
   + **Master username**（主用户名）和 **Master password**（主密码）– 数据库用户名和密码。请记下这些设置，因为您以后将使用这些值。

1. 验证其余选项的默认设置，然后选择 **Create database**（创建数据库）。

接下来，修改附加到数据库实例的安全组以允许相应的端口上的入站流量。这与您稍后要附加到 Elastic Beanstalk 环境的安全组相同，因此您添加的规则将向同一安全组中的其他资源授予入口流量权限。

**修改附加到 RDS 实例的安全组上的入站规则**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds/home)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例的名称以查看其详细信息。

1. 在**连接**部分中，记下在该页上显示的**子网**、**安全组**和**端点**。这样您稍后可以使用这些信息。

1. 在 **Security**（安全性）下面，您可以查看与数据库实例关联的安全组。打开链接，在 Amazon EC2 控制台中查看安全组。

1. 在安全组详细信息中，选择 **Inbound**（入站）选项卡。

1. 选择 **Edit**（编辑）。

1. 选择 **Add Rule**（添加规则）。

1. 对于 **Type**（类型），请选择应用程序使用的数据库引擎。

1. 对于 **Source**（源），键入 **sg-** 以查看可用安全组的列表。请选择 Elastic Beanstalk 环境中使用的与 Auto Scaling 组关联的安全组。这样，环境中的 Amazon EC2 实例就可以访问数据库。  
![\[用于在 Amazon EC2 控制台中编辑安全组入站规则的屏幕图像。\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/ec2-securitygroup-rds.png)

1. 选择**保存**。

创建一个数据库实例大约需要 10 分钟。同时，启动您的 Elastic Beanstalk 环境。

## 启动 Elastic Beanstalk 环境
<a name="php-hadrupal-tutorial-launch"></a>

使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择 **PHP** 平台并接受默认设置和示例代码。在启动环境后，可以配置环境以连接到数据库，然后将 Drupal 代码部署到环境。

**启动环境（控制台）**

1. [使用以下预配置链接打开 Elastic Beanstalk 控制台：console.aws.amazon。 com/elasticbeanstalk/home\$1/newApplication？ 应用程序名称=教程&环境类型= LoadBalanced](https://console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced)

1. 对于 **Platform**（平台），选择与应用程序使用的语言匹配的平台和平台分支。

1. 对于**应用程序代码**，选择**示例应用程序**。

1. 选择**复查并启动**。

1. 检查可用选项。选择要使用的可用选项，然后在准备就绪后选择**创建应用程序**。

环境创建大约需要 5 分钟，将创建以下资源：
+ **EC2 实例** — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (Amazon EC2) 虚拟机。

  各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台使用 Apache 或 NGINX 作为 Web 应用程序前的反向代理，向其转发请求、提供静态资产以及生成访问和错误日志。
+ **实例安全组** — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的 HTTP 流量到达运行您的 Web 应用程序的 EC2 实例。默认情况下，其他端口不允许流量进入。
+ **负载均衡器** – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。
+ **负载均衡器安全组**-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。利用此资源，HTTP 流量可从 Internet 到达负载均衡器。默认情况下，其他端口不允许流量进入。
+ **Auto Scaling 组** – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。
+ **Amazon S3 存储桶** – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。
+ **Amazon CloudWatch CloudWatch 警**报 — 两个警报，用于监控环境中实例的负载，并在负载过高或过低时触发。警报触发后，您的 Auto Scaling 组会扩展或收缩以进行响应。
+ **CloudFormation 堆栈** — Elastic CloudFormation Beanstalk 用于在您的环境中启动资源并传播配置更改。这些资源在您可通过 [CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)查看的模板中定义。
+ **域名**-以表单形式路由到您的 Web 应用程序的域名**subdomain*。 *region*.elasticbeanstalk.com。*
**域安全**  
为增强 Elastic Beanstalk 应用程序的安全性，已将 *elasticbeanstalk.com* 域注册到 [公共后缀列表（PSL）](https://publicsuffix.org/)。  
如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie，我们建议您使用带有前缀 `__Host-` 的 Cookie 来提高安全性。这种做法可以保护您的域免遭跨站点请求伪造（CSRF）攻击。要了解更多信息，请参阅 Mozilla 开发者网络中的 [Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie_prefixes) 页面。

所有这些资源都由 Elastic Beanstalk 管理。当您终止环境时，Elastic Beanstalk 会终止其包含的所有资源。您启动的 RDS 数据库实例位于您的环境之外，因此您需负责管理其生命周期。

**注意**  
Elastic Beanstalk 创建的 Amazon S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息，请参阅 [将 Elastic Beanstalk 和 Amazon S3 结合使用](AWSHowTo.S3.md)。

## 配置安全设置和环境属性
<a name="php-hadrupal-tutorial-configure"></a>

将数据库实例的安全组添加到正在运行的环境。此过程将使 Elastic Beanstalk 使用附加的其他安全组重新配置环境中的所有实例。

**向环境添加安全组**
+ 请执行以下操作之一：
  + 使用 Elastic Beanstalk 控制台添加安全组

    1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

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

    1. 在 **Instances**（实例）配置类别中，选择 **Edit**（编辑）。

    1. 在**EC2 安全组**下，除了 Elastic Beanstalk 创建的实例安全组外，还要选择要附加到实例的安全组。

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

    1. 阅读警告，然后选择 **Confirm**（确认）。
  + 要使用[配置文件](ebextensions.md)添加安全组，请使用 [https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config](https://github.com/awsdocs/elastic-beanstalk-samples/tree/main/configuration-files/aws-provided/security-configuration/securitygroup-addexisting.config) 示例文件。

接下来，使用环境属性将连接信息传递给环境。示例应用程序使用了默认的一组属性，这些属性与您在环境中预置数据库时 Elastic Beanstalk 配置的属性匹配。

**为 Amazon RDS 数据库实例配置环境属性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 在**环境属性**部分中，定义应用程序读取的用于构建连接字符串的变量。为了实现与具有集成 RDS 数据库实例的环境的兼容，请使用以下名称和值。您可以在 [RDS 控制台](https://console.aws.amazon.com/rds/home)中找到除密码以外的所有值。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/php-hadrupal-tutorial.html)  
![\[添加了 RDS 属性的环境属性配置部分\]](http://docs.aws.amazon.com/zh_cn/elasticbeanstalk/latest/dg/images/environment-cfg-envprops-rds.png)

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

安装 Drupal 后，您需要使用 SSH 连接到实例，以检索某些配置详细信息。将 SSH 密钥分配给环境的实例。

**配置 SSH**

1. 如果您之前没有创建过密钥对，请打开亚马逊 EC2控制台的[密钥对页面](https://console.aws.amazon.com/ec2/v2/home#KeyPairs)，然后按照说明创建密钥对。

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

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

1. 在 **Security**（安全性）下，选择 **Edit**（编辑）。

1. 对于**EC2 密钥对**，请选择您的密钥对。

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

## 配置并部署您的应用程序
<a name="php-hadrupal-tutorial-deploy"></a>

[要为 Elastic Beanstalk 创建 Drupal 项目，请下载 Drupal 源代码并将其与 aws-samples/ 存储库中的文件合并。eb-php-drupal](https://github.com/aws-samples/eb-php-drupal) GitHub

**创建 Drupal 项目**

1. 运行以下命令从 *www.drupal.org/download* 下载 Drupal。要了解有关下载的更多信息，请参阅 [Drupal 网站](https://www.drupal.org/download)。

   如果您的 Elastic Beanstalk 环境的平台使用 PHP 7.4 或更早版本，我们建议您在本教程中下载 Drupal 8.9.13 版本。您可以运行以下命令下载该版本。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-8.9.13.tar.gz -o drupal.tar.gz
   ```

   如果您的平台使用 PHP 8.0 或更高版本，我们建议您下载 Drupal 9.1.5。您可以使用此命令下载它。

   ```
   ~$ curl https://ftp.drupal.org/files/projects/drupal-9.1.5.tar.gz -o drupal.tar.gz
   ```

   有关 Drupal 版本及其支持的 PHP 版本的更多信息，请参阅 Drupal 官方文档中的 [PHP 要求](https://www.drupal.org/docs/system-requirements/php-requirements#php_required)。Drupal 推荐的核心版本已在 [Drupal 网站](https://www.drupal.org/project/drupal)上列出。

1. 使用以下命令从示例存储库中下载配置文件：

   ```
   ~$ wget https://github.com/aws-samples/eb-php-drupal/releases/download/v1.1/eb-php-drupal-v1.zip
   ```

1. 提取 Drupal 并更改文件夹的名称。

   如果您已下载 Drupal 8.9.13：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-8.9.13 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

   如果您已下载 Drupal 9.1.5：

   ```
    ~$ tar -xvf drupal.tar.gz
    ~$ mv drupal-9.1.5 drupal-beanstalk
    ~$ cd drupal-beanstalk
   ```

1. 从 Drupal 安装中提取配置文件。

   ```
    ~/drupal-beanstalk$ unzip ../eb-php-drupal-v1.zip
     creating: .ebextensions/
     inflating: .ebextensions/dev.config
     inflating: .ebextensions/drupal.config
     inflating: .ebextensions/efs-create.config
     inflating: .ebextensions/efs-filesystem.template
     inflating: .ebextensions/efs-mount.config
     inflating: .ebextensions/loadbalancer-sg.config
     inflating: LICENSE
     inflating: README.md
     inflating: beanstalk-settings.php
   ```

验证您的 `drupal-beanstalk` 文件夹结构是否正确，如下所示。

```
drupal-beanstalk$ tree -aL 1
.
├── autoload.php
├── beanstalk-settings.php
├── composer.json
├── composer.lock
├── core
├── .csslintrc
├── .ebextensions
├── .ebextensions
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── example.gitignore
├── .gitattributes
├── .htaccess
├── .ht.router.php
├── index.php
├── LICENSE
├── LICENSE.txt
├── modules
├── profiles
├── README.md
├── README.txt
├── robots.txt
├── sites
├── themes
├── update.php
├── vendor
└── web.config
```

项目存储库中的 `beanstalk-settings.php` 文件使用您在上一步中定义的环境变量来配置数据库连接。`.ebextensions` 文件夹包含用于在您的 Elastic Beanstalk 环境中创建其他资源的配置文件。

该配置文件要求您进行修改以使用账户。将文件中的占位符值替换为相应的值， IDs 然后创建源包。

**更新配置文件并创建源代码包。**

1. 按如下方式修改配置文件。
   + `.ebextensions/dev.config` - 将对您的环境的访问限制为您的 IP 地址，以便在 Drupal 安装过程中保护环境。将靠近文件顶部的占位符 IP 地址替换为您的公有 IP 地址。
   + `.ebextensions/efs-create.config` - 在您的 VPC 中的每个可用区/子网中创建 EFS 文件系统和装载点。在 [Amazon VPC 控制台 IDs 中识别您的默认 VPC](https://console.aws.amazon.com/vpc/home#subnets:filter=default) 和子网。

1. 创建将文件包含在项目文件夹中的[源代码包](applications-sourcebundle.md)。以下命令将创建名为 `drupal-beanstalk.zip` 的源包。它将排除 `vendor` 文件夹中的文件，因为这些文件会占用大量空间并且对于将您的应用程序部署到 Elastic Beanstalk 不是必需的。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk.zip -r * .[^.]* -x "vendor/*"
   ```

将源包上传到 Elastic Beanstalk 以将 Drupal 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 安装 Drupal
<a name="php-hadrupal-tutorial-install"></a>

**完成 Drupal 安装**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

1. 选择 URL 以便在浏览器中打开您的站点。您将会重定向到 Drupal 安装向导，因为该站点还未配置。

1. 执行具有以下数据库设置的标准安装：
   + **数据库名称** - Amazon RDS 控制台中显示的**数据库名称**。
   + **数据库用户名和密码** - 您在创建数据库时输入的**主用户名**和**主密码**值。
   + **高级选项 > 主机** - 在 Amazon RDS 控制台中显示的数据库实例的**终端节点**。

安装大约需要一分钟能完成。

## 更新 Drupal 配置并删除访问限制
<a name="php-hadrupal-tutorial-updateenv"></a>

Drupal 安装过程将在实例上的 `settings.php` 文件夹中创建一个名为 `sites/default` 的文件。您的源代码中需要此文件来避免在后续部署中重置您的站点，但该文件当前包含了您不希望提交到源的密钥。连接到应用程序实例以从设置文件中检索信息。

**使用 SSH 连接到应用程序实例**

1. 打开 Amazon EC2 控制台的[实例页面](https://console.aws.amazon.com/ec2/v2/home#Instances:sort=tag:Name)。

1. 选择应用程序实例。它是以您的 Elastic Beanstalk 环境命名的实例。

1. 选择**连接**。

1. 按照以下说明将实例与 SSH 连接。该命令看上去类似以下内容。

   ```
   $ ssh -i ~/.ssh/mykey ec2-user@ec2-00-55-33-222.us-west-2.compute.amazonaws.com
   ```

从最后一行设置文件中获取同步目录 ID。

```
[ec2-user ~]$ tail -n 1 /var/app/current/sites/default/settings.php
$config_directories['sync'] = 'sites/default/files/config_4ccfX2sPQm79p1mk5IbUq9S_FokcENO4mxyC-L18-4g_xKj_7j9ydn31kDOYOgnzMu071Tvc4Q/sync';
```

该文件还包含站点的当前哈希键，但您可以忽略当前值并使用您自己的值。

将同步目录路径和哈希键分配到环境属性。项目存储库中的自定义设置文件将读取这些属性以便在部署期间配置站点，并读取您之前设置的数据库连接属性。

**Drupal 配置属性**
+ `SYNC_DIR` - 同步目录的路径。
+ `HASH_SALT` - 符合[环境属性要求](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)的任何字符串值。

**在 Elastic Beanstalk 控制台中配置环境变量**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

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

1. 在 **Updates, monitoring, and logging**（更新、监控和日志记录）配置类别中，选择 **Edit**（编辑）。

1. 向下滚动到**运行时环境变量**。

1. 选择**添加环境变量**。

1. 对于**来源**，选择**纯文本**。
**注意**  
下拉列表中的 **Secrets Manager** 和 **SSM Parameter Store** 值用于将环境变量配置为用于存储敏感数据（例如凭证和 API 密钥）的密钥。有关更多信息，请参阅 [将 Elastic B AWS Secrets Manager ean AWS Systems Manager stalk 与参数存储和参数存储一起使用](AWSHowTo.secrets.md)。

1. 输入**环境变量名称**和**环境变量值**对。

1. 如需添加更多变量，请重复**步骤 6** 至**步骤 8**。

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

最后，示例项目包含一个创建安全组并将其分配给环境负载均衡器的配置文件 (`loadbalancer-sg.config`)，使用您在 `dev.config` 中配置的 IP 地址将端口 80 上的 HTTP 访问限制为来自您的网络的连接。否则，在您安装 Drupal 并配置您的管理员账户之前，外部方可能连接到您的站点。

**更新 Drupal 的配置并删除访问限制**

1. 从项目目录中删除 `.ebextensions/loadbalancer-sg.config` 文件。

   ```
   ~/drupal-beanstalk$ rm .ebextensions/loadbalancer-sg.config
   ```

1. 将自定义 `settings.php` 文件复制到站点文件夹中。

   ```
   ~/drupal-beanstalk$ cp beanstalk-settings.php sites/default/settings.php
   ```

1. 创建源包。

   ```
   ~/eb-drupal$ zip ../drupal-beanstalk-v2.zip -r * .[^.]* -x "vendor/*"
   ```

将源包上传到 Elastic Beanstalk 以将 Drupal 部署到您的环境。

**部署源包**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

1. 在环境概述页面上，选择 **Upload and deploy**（上传和部署）。

1. 使用屏幕上的对话框上传源包。

1. 选择 **Deploy**（部署）。

1. 部署完成后，选择站点 URL 以在新选项卡中打开您的网站。

## 配置 Auto Scaling 组
<a name="php-hadrupal-tutorial-autoscaling"></a>

最后，使用较高的最低实例计数配置您环境的 Auto Scaling 组。请始终至少运行两个实例，以防止您环境中的 Web 服务器发生单点故障，并支持您在不中断站点服务的情况下部署更改。

**配置您的环境的 Auto Scaling 组以获得高可用性**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

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

1. 在 **Capacity (容量)** 配置类别中，选择 **Edit (编辑)**。

1. 在 **Auto Scaling group**（Auto Scaling 组）部分中，将 **Min instances**（最小实例数）设置为 **2**。

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

为了支持多个实例中的内容上传，示例项目使用 Amazon Elastic File System 来创建共享文件系统。在站点上创建一个帖子，然后上传内容以将其存储在共享文件系统上。查看帖子并多次刷新页面，以命中两个实例并验证共享文件系统是否正常工作。

## 清理
<a name="php-hadrupal-tutorial-cleanup"></a>

演示代码使用完毕后，您可以终止环境。[Elastic Beanstalk 会删除 AWS 所有相关资源，[例如 EC2 亚马逊](using-features.managing.ec2.md)[实例、数据库实例、](using-features.managing.db.md)负载均衡器[、安全组](using-features.managing.elb.md)和警报。](using-features.alarms.md#using-features.alarms.title)

移除资源不会删除 Elastic Beanstalk 应用程序，因此您可以随时为您的应用程序创建新环境。

**从控制台终止 Elastic Beanstalk 环境**

1. 打开 [Elastic Beanstalk](https://console.aws.amazon.com/elasticbeanstalk) 控制台，然后**在 “区域” 列表中，选择您**的。 AWS 区域

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

1. 选择 **Actions**（操作），然后选择 **Terminate environment**（终止环境）。

1. 使用屏幕上的对话框确认环境终止。

此外，您还可以终止在您的 Elastic Beanstalk 环境外部创建的数据库资源。当您终止 Amazon RDS 数据库实例时，可以拍摄快照并在以后将数据恢复到其他实例。

**终止您的 RDS 数据库实例**

1. 打开 [Amazon RDS 控制台](https://console.aws.amazon.com/rds)。

1. 选择 **Databases**（数据库）。

1. 选择您的数据库实例。

1. 选择**操作**，然后选择**删除**。

1. 选择是否创建快照，然后选择**删除**。

## 后续步骤
<a name="php-hadrupal-tutorial-nextsteps"></a>

当您继续开发应用程序时，您可能希望通过某种方式来管理环境和部署应用程序，而无需手动创建 .zip 文件并将该文件上传到 Elastic Beanstalk 控制台。[Elastic Beanstalk 命令行](eb-cli3.md)界面 (EB CLI easy-to-use) 提供了从命令行创建、配置应用程序并将其部署到 Elastic Beanstalk 环境的命令。

示例应用程序使用配置文件配置 PHP 设置并在数据库中创建表 (如果表尚未存在)。您还可以使用配置文件在环境创建期间配置实例的安全组设置，以避免耗时的配置更新。请参阅[使用配置文件 (`.ebextensions`) 进行高级环境自定义](ebextensions.md)了解更多信息。

对于开发和测试，您可能希望使用 Elastic Beanstalk 的用于将托管数据库实例直接添加到环境的功能。有关在环境内设置数据库的说明，请参阅[将数据库添加到 Elastic Beanstalk 环境](using-features.managing.db.md)。

如果您需要高性能数据库，请考虑使用 [Amazon Aurora](https://aws.amazon.com/rds/aurora/)。Amazon Aurora 是与 MySQL 兼容的数据库引擎，能够以低成本提供商用数据库功能。要将您的应用程序连接到另一个数据库，请重复执行[安全组配置](php-ha-tutorial.md#php-hawrds-tutorial-database)步骤并[更新与 RDS 相关的环境属性](php-ha-tutorial.md#php-hawrds-tutorial-configure)。

最后，如果计划在生产环境中使用应用程序，您会希望为环境[配置自定义域名](customdomains.md)，并为安全连接[启用 HTTPS](configuring-https.md)。