菜单
AWS Elastic Beanstalk
开发人员指南 (API Version 2010-12-01)

将带有外部 Amazon RDS 数据库的高可用性 Drupal 网站部署到 Elastic Beanstalk

本教程将指导您完成以下过程:在 AWS Elastic Beanstalk 之外启动 RDS 数据库实例并配置一个通过运行 Drupal 网站以连接该数据库实例的高可用性环境。在 Elastic Beanstalk 之外运行数据库实例会将数据库从您的环境的生命周期中分离,并且让您可以从多个环境连接到同一数据库、将数据库互相交换或执行蓝/绿部署,而不会影响您的数据库。

在 Amazon RDS 启动数据库实例

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

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

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

  1. 打开 RDS 控制台

  2. 在导航窗格中选择 Instances

  3. 选择 Launch DB Instance

  4. 选择 DB Engine 并预置配置。

  5. Specify DB Details 下,选择 DB Instance Class。为获得高可用性,将 Multi-AZ Deployment 设置为 Yes

  6. Settings 下,输入 DB Instance IdentifierMaster UsernameMaster Password (以及 Confirm Password) 的值,并记下输入的值以供将来使用。

  7. 选择 Next

  8. 对于 Network and Security 设置,请选择以下选项:

    • VPCDefault VPC

    • 子网组default

    • 公开访问No

    • 可用区No Preference

    • VPC 安全组 - Default VPC Security Group

  9. 对于 Database Name,键入 ebdb,然后验证剩余选项的默认设置。记下以下选项的值:

    • Database Name (数据库名称)

    • Database Port (数据库端口)

  10. 选择 Launch DB Instance

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

修改 RDS 实例的安全组上的入口流量规则

  1. 打开 Amazon RDS 控制台

  2. 选择 Instances

  3. 选择数据库实例的条目旁的箭头以展开视图。

  4. 选择 Details 选项卡。

  5. Security and Network 部分中,与数据库实例关联的安全组将会显示。打开链接以在 Amazon EC2 控制台中查看安全组。

    注意

    打开 Details 选项卡,记下此页上显示的 Endpoint 和安全组名称以供稍后使用。

    安全组名称是 Security Groups 中显示的链接的第一个值 (括号前面)。第二个值 (括号中) 是安全组 ID。

  6. 在安全组详细信息中,选择 Inbound 选项卡。

  7. 选择 Edit

  8. 选择 Add Rule

  9. 对于 Type,请选择应用程序使用的数据库引擎。

  10. 对于 Source,请选择 Custom ,然后键入安全组的组 ID。这将允许安全组中的资源从同一组中的其他资源接收数据库端口上的流量。

  11. 选择 Save

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

下载 Drupal

要为使用 AWS Elastic Beanstalk 部署 Drupal 做准备,您必须将 Drupal 文件复制到您的计算机并提供部分配置信息。AWS Elastic Beanstalk 需要 ZIP 或 WAR 文件格式的源包。

下载 Drupal 和创建源包

  1. 打开 https://www.drupal.org/download

  2. 下载最新版本。

  3. 从下载中将 Drupal 文件提取到本地计算机上的文件夹中,并且应将其重命名为 drupal-beanstalk

  4. 下载以下存储库中的配置文件:

    https://github.com/awslabs/eb-php-drupal/releases/download/v1.0/eb-php-drupal-v1.zip
  5. 将配置文件提取到您的 drupal-beanstalk 文件夹中。

  6. 验证您的 drupal-beanstalk 文件夹结构是否正确。

    ├── .ebextensions
    ├── core
    │ ├── assets
    │ ├── config
    │ ├── includes
    │ ├── lib
    │ ├── misc
    │ ├── modules
    │ ├── profiles
    │ ├── scripts
    │ ├── tests
    │ └── themes
    ├── modules
    ├── profiles
    ├── sites
    │ └── default
    ├── themes
    ├── vendor
    │ ├── asm89
    │ ├── composer
    │ ├── doctrine
    │ ├── easyrdf
    │ ├── egulias
    │ ├── guzzlehttp
    │ ├── ircmaxwell
    │ ├── masterminds
    │ ├── paragonie
    │ ├── psr
    │ ├── stack
    │ ├── symfony
    │ ├── symfony-cmf
    │ ├── twig
    │ ├── wikimedia
    │ └── zendframework
  7. 使用您的默认 VPC 和子网的 ID 以及您的公有 IP 地址修改 .ebextensions 文件夹中的配置文件。

  8. .ebextensions/efs-create.config 文件在您的 VPC 中的每个可用区/子网内创建 EFS 文件系统和挂载点。在 Amazon VPC 控制台中确定您的默认 VPC 和子网 ID。

    --OR--

    .ebextensions/dev.config 文件将对您的环境的访问限制为您的 IP 地址,以便在 Drupal 安装过程中保护它。将靠近文件顶部的占位符 IP 地址替换为您的公有 IP 地址。

  9. 根据您的操作系统,使用以下方法之一在 drupal-beanstalk 文件夹中 (而不是父目录中) 从文件和文件夹创建 ZIP 文件:

  10. Windows - 在 Windows 资源管理器中,选中文件和文件夹,右键点击,然后选择 Send toCompressed (zipped) Folder。将文件命名为 drupal-x.y.z.zip,其中 x.y.z 为 Drupal 的版本。

    --OR--

    Mac OS X 和 Linux - 使用以下命令,其中 x.y.z 是 Drupal 的版本:

    zip -r ../drupal-x.y.z.zip .

启动 Elastic Beanstalk 环境

使用 AWS 管理控制台启动 Elastic Beanstalk 环境。

  1. 使用下面的预配置链接打开 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=drupal-beanstalk&environmentType=LoadBalanced

  2. 对于 Platform,选择 PHP

  3. 对于 App code,选择 Upload your code

  4. 选择 Upload,并导航至您为 Drupal 文件创建的 ZIP 文件。

  5. 选择 Upload 以选择应用程序代码。

  6. 选择 Configure more options

  7. 对于 Configuration presets,选择 Custom configuration

  8. 选择 Change platform configuration,然后从下拉菜单中选择 64bit Amazon Linux 2016.09 v2.3.1 running PHP 5.6,再选择 Save

  9. 查看所有选项,对这些选项满意后,请选择 Create app

环境创建需要花费大约 5 分钟。

配置安全组和环境属性

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

向环境添加安全组

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. Instances 部分,选择设置图标 ( 编辑 )。

  5. 对于 EC2 security groups,请在自动生成的安全组的名称 (后跟 RDS 数据库实例的安全组的名称) 后面键入一个逗号。这是您之前在配置安全组时记下的名称。

  6. 选择 Apply

  7. 阅读警告,然后选择 Save

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

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

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. 在 Software Configuration 部分中,选择设置图标 ( 编辑 )。

  5. Environment Properties 部分中,定义应用程序读取的用于构建连接字符串的变量。为了实现于与具有集成 RDS 数据库实例的环境的兼容,请使用以下内容:

    • RDS_HOSTNAME – 数据库实例的主机名。

      Amazon RDS 控制台标签 – Endpoint 是主机名。

    • RDS_PORT – 数据库实例接受连接的端口。默认值因数据库引擎而异。

      Amazon RDS 控制台标签 – Port

    • RDS_DB_NAME – 数据库名称,ebdb

      Amazon RDS 控制台标签 – DB Name

    • RDS_USERNAME – 您为数据库配置的用户名。

      Amazon RDS 控制台标签 – Username

    • RDS_PASSWORD – 您为数据库配置的密码。

    选择加号符号 (+) 可添加其他属性。

  6. 选择 Apply

安装 Drupal

完成 Drupal 安装

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

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

  4. 执行具有以下数据库设置的标准安装:

    • Database name – 在 Amazon RDS 控制台中显示的 DB Name

    • Database username and password – 您在创建数据库时输入的 Master UsernameMaster Password 值。

    • Advanced Options > Host – 在 Amazon RDS 控制台中显示的数据库实例的 Endpoint

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

更新环境

本教程包含一个创建安全组并将其分配给环境负载均衡器的配置文件 (loadbalancer-sg.config),使用您在 dev.config 中配置的 IP 地址将端口 80 上的 HTTP 访问限制为来自您的网络的连接。这会防止在完成 Drupal 安装并配置管理员账户之前,外部任何一方连接到您的站点。要从您的负载均衡器配置中删除此限制并在 Internet 中打开该站点,您可以采用以下步骤。

删除限制并更新环境

  1. 在本地计算机上,从 .ebextensions/loadbalancer-sg-config 文件夹删除 drupal-beanstalk 文件。

  2. 根据您的操作系统,使用以下方法之一在 drupal-beanstalk 文件夹中 (而不是父目录中) 从文件和文件夹创建 ZIP 文件:

  3. Windows - 在 Windows 资源管理器中,选中文件和文件夹,右键点击,然后选择 Send toCompressed (zipped) Folder。使用以下格式命名该文件,其中 x.y.z 是 Drupal 的版本。

    drupal-x.y.z-v2.zip

    --OR--

    Mac OS X 和 Linux - 使用以下命令,其中 x.y.z 是 Drupal 的版本:

    zip -r ../drupal-x.y.z-v2.zip .
  4. 打开 Elastic Beanstalk 控制台

  5. 导航到您的环境的管理页

  6. 选择 Upload and Deploy

  7. 选择 Choose File,并导航至您为 Drupal 文件创建的 ZIP 文件。

  8. 输入一个能将该更新版本与上一版本区分开的 Version label

  9. 选择 Deploy

配置 Autoscaling

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

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

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Configuration

  4. Scaling 部分,选择设置图标 ( 编辑 )。

  5. Auto Scaling 下,将 Minimum instance count 设置为 2,将 Maximum instance count 设置为大于 2 的值。

  6. 选择 Apply

审核

启动环境将创建以下资源:

  • EC2 实例 – 配置来在您选择的平台上运行 Web 应用程序的 Amazon Elastic Compute Cloud (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 组会扩展或收缩进行响应。

  • AWS CloudFormation 堆栈 – Elastic Beanstalk 使用 AWS CloudFormation 启动您环境中的资源并传播配置更改。这些资源在您可通过 AWS CloudFormation 控制台查看的模板中定义。

  • 域名 – 一个域名,它以下面的形式路由到您的 Web 应用程序:子域区域.elasticbeanstalk.com

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

注意

Elastic Beanstalk 创建的 S3 存储桶将在多个环境之间共享并且在环境终止期间不会被删除。有关更多信息,请参阅 配合使用 Elastic Beanstalk 和 Amazon Simple Storage Service

清除

Elastic Beanstalk 使用完毕时,您可以终止您的环境。Elastic Beanstalk 会终止与环境关联的所有 AWS 资源,例如 Amazon EC2 实例数据库实例负载均衡器、安全组和警报

终止 Elastic Beanstalk 环境

  1. 打开 Elastic Beanstalk 控制台

  2. 导航到您的环境的管理页

  3. 选择 Actions,然后选择 Terminate Environment

  4. Confirm Termination 对话框中,键入环境名称,然后选择 Terminate

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

终止您的 RDS 数据库实例

  1. 打开 Amazon RDS 控制台

  2. 选择 Instances

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

  4. 选择 Instance Actions,然后选择 Delete

  5. 选择是否创建快照,然后选择 Delete

删除 DynamoDB 表

  1. 在 DynamoDB 控制台中打开表页面

  2. 选择表。

  3. 选择 Actions,然后选择 Delete table

  4. 选择 Delete

后续步骤

如果要继续部署应用程序,您可能希望管理环境和部署应用程序,而无需手动创建 .zip 文件和将其上传至 Elastic Beanstalk 控制台。Elastic Beanstalk 命令行界面 (EB CLI) 提供了易于使用的命令,可用于从命令行创建、配置应用程序并将应用程序部署到 Elastic Beanstalk 环境。

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

对于开发和测试,您可能希望使用 Elastic Beanstalk 的用于将托管数据库实例直接添加到环境的功能。有关在环境内设置数据库的说明,请参阅使用 Elastic Beanstalk 配置数据库

如果您需要高性能数据库,请考虑使用 Amazon Aurora。Amazon Aurora 是与 MySQL 兼容的数据库引擎,能够以低成本提供商用数据库功能。要将您的应用程序连接到另一个数据库,请重复执行安全组配置步骤并更新与 RDS 相关的环境属性

最后,如果您计划在生产环境中使用应用程序,请为环境配置自定义域名并为安全连接启用 HTTPS