将带有外部亚马逊RDS数据库的高可用性PHP应用程序部署到 Elastic Beanstalk - AWS Elastic Beanstalk

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

将带有外部亚马逊RDS数据库的高可用性PHP应用程序部署到 Elastic Beanstalk

本教程将引导您完成在外部启动RDS数据库实例 AWS Elastic Beanstalk,以及配置运行PHP应用程序的高可用性环境以连接到该实例的过程。运行 Elastic Beanstalk 外部的数据库实例会将数据库与环境的生命周期分离。这让您可以从多个环境连接到同一个数据库,将一个数据库交换为另一个数据库,或执行蓝/绿部署,而不影响您的数据库。

本教程使用一个示例PHP应用程序,该应用程序使用 “我的SQL数据库” 来存储用户提供的文本数据。示例应用程序使用配置文件来配置PHP设置,并在数据库中创建表供应用程序使用。本教程还展示了如何使用 Composer 文件在部署期间安装程序包。

先决条件

在开始之前,请从以下地址下载示例应用程序源包 GitHub:eb-demo-php-simple-app- 1.3.zip

本教程中有关亚马逊关系数据库服务 (AmazonRDS) 任务的步骤假设您是在默认的亚马逊虚拟私有云 (AmazonVPC) 中启动资源。所有新账户VPC在每个地区都包含默认账户。如果您没有默认值VPC,则过程会有所不同。有关 EC2-在亚马逊上使用 Elastic Beanstalk RDS Classic 平台和自定义VPC平台的说明,请参阅。

在 Amazon 中启动数据库实例 RDS

要将外部数据库与在 Elastic Beanstalk 中运行的应用程序配合使用,请先在亚马逊上启动数据库实例。RDS当你在亚马逊上启动实例时RDS,它完全独立于 Elastic Beanstalk 和你的 Elastic Beanstalk 环境,不会被 Elastic Beanstalk 终止或监控。

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

以默认方式启动RDS数据库实例 VPC
  1. 打开控制RDS台

  2. 在导航窗格中,选择 Databases(数据库)。

  3. 选择创建数据库

  4. 选择 Standard Create(标准创建)。

    重要

    请勿选择 Easy Create(轻松创建)。如果您选择它,则无法配置启动此RDS数据库所需的设置。

  5. Additional configuration(附加配置)下,对于 Initial database name(初始数据库名称),键入 ebdb

  6. 请查看默认设置并根据您的具体要求调整这些设置。请注意以下选项:

    • 数据库实例类别-选择具有适合您的工作负载的内存和CPU功率的实例大小。

    • Multi-AZ deployment(多可用区部署)– 为了实现高可用性,请将其设置为 Create an Aurora Replica/Reader node in a different AZ(在不同的可用区中创建 Aurora 副本/读取器节点)。

    • Master username(主用户名)和 Master password(主密码)– 数据库用户名和密码。请记下这些设置,因为您以后将使用这些值。

  7. 验证其余选项的默认设置,然后选择 Create database(创建数据库)。

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

修改挂载到您的RDS实例的安全组的入站规则
  1. 打开 Amazon RDS 控制台

  2. 选择 Databases(数据库)。

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

  4. Connectivity(连接)部分中,记下在该页上显示的 Subnets(子网)、Security groups(安全组)和 Endpoint(端点)。这样您稍后可以使用这些信息。

  5. Security(安全性)下面,您可以查看与数据库实例关联的安全组。打开链接,在 Amazon EC2 控制台中查看安全组。

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

  7. 选择 Edit(编辑)。

  8. 选择 Add Rule(添加规则)。

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

  10. 对于 Source(源),键入 sg- 以查看可用安全组的列表。请选择 Elastic Beanstalk 环境中使用的与 Auto Scaling 组关联的安全组。这样,环境中的 Amazon EC2 实例就可以访问数据库。

    用于在 Amazon EC2 控制台中编辑安全组入站规则的屏幕图像。
  11. 选择保存

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

创建 Elastic Beanstalk 环境

使用 Elastic Beanstalk 控制台创建 Elastic Beanstalk 环境。选择PHP平台并接受默认设置和示例代码。启动环境后,您可以将环境配置为连接到数据库,然后部署从中下载的示例应用程序 GitHub。

启动环境(控制台)
  1. 使用这个预先配置的链接打开 Elastic Beanstalk 控制台:console.aws.amazon.com/elasticbeanstalk/home#/?newApplication applicationName=教程& = environmentType LoadBalanced

  2. 对于 Platform(平台),选择与应用程序使用的语言匹配的平台和平台分支。

  3. 对于应用程序代码,选择示例应用程序

  4. 选择复查并启动

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

环境创建大约需要 5 分钟,将创建以下资源:

  • EC2实例 — 配置为在您选择的平台上运行 Web 应用程序的亚马逊弹性计算云 (AmazonEC2) 虚拟机。

    各平台运行一组特定软件、配置文件和脚本以支持特定的语言版本、框架、Web 容器或其组合。大多数平台都使用 Apache 或NGINX作为反向代理,它位于您的 Web 应用程序前面,向其转发请求,提供静态资产,并生成访问和错误日志。

  • 实例安全组 — 配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自负载均衡器的HTTP流量到达运行您的 Web 应用程序的EC2实例。默认情况下,其他端口不允许流量进入。

  • 负载均衡器 – 配置为向运行您的应用程序的实例分配请求的 Elastic Load Balancing 负载均衡器。负载均衡器还使您无需将实例直接公开在 Internet 上。

  • 负载均衡器安全组-配置为允许端口 80 上的入站流量的 Amazon EC2 安全组。此资源允许来自互联网的HTTP流量到达负载均衡器。默认情况下,其他端口不允许流量进入。

  • Auto Scaling 组 – 配置为在实例终止或不可用时替换实例的 Auto Scaling 组。

  • Amazon S3 存储桶 – 使用 Elastic Beanstalk 时创建的源代码、日志和其他构件的存储位置。

  • Amazon CloudWatch CloudWatch 警报 — 两个警报,用于监控您环境中实例的负载,并在负载过高或过低时触发。警报触发后,您的 Auto Scaling 组会扩展或收缩以进行响应。

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

  • 域名-以以下形式路由到您的 Web 应用程序的域名 subdomain.region.elasticbeanstalk.com。

    注意

    为了增强 Elastic Beanstalk 应用程序的安全性,elasticbeanstalk.co m 域已在公共后缀列表 () 中注册。PSL为进一步增强安全性,如果您需要在 Elastic Beanstalk 应用程序的默认域名中设置敏感 Cookie,我们建议您使用带 __Host- 前缀的 Cookie。这种做法将有助于保护您的域名免受跨站请求伪造企图的侵害()CSRF。要了解更多信息,请参阅 Mozilla 开发者网络中的 Set-Cookie 页面。

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

注意

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

配置安全组、环境属性和扩展

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

向环境添加安全组
  • 请执行以下操作之一:

    • 使用 Elastic Beanstalk 控制台添加安全组

      1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

      2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

        注意

        如果您有多个环境,请使用搜索栏筛选环境列表。

      3. 在导航窗格中,选择 Configuration(配置)。

      4. Instances(实例)配置类别中,选择 Edit(编辑)。

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

      6. 要保存更改,请选择页面底部的 Apply(应用)。

      7. 阅读警告,然后选择 Confirm(确认)。

    • 要使用配置文件添加安全组,请使用 securitygroup-addexisting.config 示例文件。

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

为 Amazon RDS 数据库实例配置环境属性
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

  5. 环境属性部分中,定义应用程序读取的用于构建连接字符串的变量。为了与具有集成RDS数据库实例的环境兼容,请使用以下名称和值。您可以在RDS控制台中找到除密码之外的所有值。

    属性名称 描述 属性值

    RDS_HOSTNAME

    数据库实例的主机名。

    在 Amazon RDS 控制台的 “连接和安全” 选项卡上:终端节点

    RDS_PORT

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

    在 Amazon RDS 控制台的 “连接和安全” 选项卡上:端口

    RDS_DB_NAME

    数据库名称 ebdb

    在 Amazon RDS 控制台的配置选项卡上:数据库名称

    RDS_USERNAME

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

    在 Amazon RDS 控制台的配置选项卡上:主用户名

    RDS_PASSWORD

    您为数据库配置的密码。

    在 Amazon RDS 控制台中不可参考。

    添加了属性的环境RDS属性配置部分
  6. 要保存更改,请选择页面底部的 Apply(应用)。

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

配置您的环境的 Auto Scaling 组以获得高可用性
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration (配置)

  4. Capacity (容量) 配置类别中,选择 Edit (编辑)

  5. Auto Scaling group(Auto Scaling 组)部分中,将 Min instances(最小实例数)设置为 2

  6. 要保存更改,请选择页面底部的 Apply(应用)。

部署示例应用程序。

现在,您的环境已准备就绪,可以运行示例应用程序并连接到 Amazon RDS。将示例应用程序部署到您的环境。

注意

如果你还没有 GitHub,可以从以下网址下载源包:eb-demo-php-simple-app- 1.3.zip

部署源包
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在环境概述页面上,选择 Upload and deploy(上传和部署)。

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

  5. 选择 Deploy(部署)。

  6. 部署完成后,您可以选择URL要在新选项卡中打开网站的站点。

该网站收集用户评论并使用 “我的SQL数据库” 来存储数据。要添加评论,请选择 Share Your Thought(分享您的想法),输入评论,然后选择 Submit Your Thought(提交您的想法)。Web 应用程序会将评论写入数据库,以便环境中的任何实例均可读取它,并且在实例中断服务时不会丢失。

User interface for sharing thoughts, with a posted comment about Elastic Beanstalk on AWS.

清除

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

从控制台终止你的 Elastic Beanstalk 环境
  1. 打开 Elastic Beanstalk 控制台,然后在 “区域” 列表中,选择您的。 AWS 区域

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 选择 Actions(操作),然后选择 Terminate environment(终止环境)。

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

利用 Elastic Beanstalk,可以随时为您的应用程序轻松创建新环境。

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

终止您的RDS数据库实例
  1. 打开 Amazon RDS 控制台

  2. 选择 Databases(数据库)。

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

  4. 选择操作,然后选择删除

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

后续步骤

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

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

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

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

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