我应如何从 Elastic Beanstalk 环境解耦 Amazon RDS 实例而不导致停机、数据库同步问题或数据丢失?

上次更新时间:2020 年 9 月 23 日

我有一个 Amazon Relational Database Service (Amazon RDS) 数据库实例附加到我的 AWS Elastic Beanstalk 环境。我想要删除实例和环境之间的依赖关系。我应如何避免停机、数据库同步问题或数据丢失?

简短描述

按照解决方法中的步骤执行以下操作:

  • 使用 Elastic Beanstalk 蓝(环境 A)/绿(环境 B)部署以从环境 A 中解耦该 RDS 数据库实例。
  • 使用需要的信息创建新的 Elastic Beanstalk 环境(环境 B)以连接到该 RDS 数据库实例。

重要提示:挂载到 Elastic Beanstalk 环境的 RDS 数据库实例非常适合开发和测试环境,但不是生产环境的理想选择,因为数据库实例的生命周期与应用程序环境的生命周期绑定。如果终止该环境,您将会丢失数据,因为 RDS 数据库实例会被环境删除。有关更多信息,请参阅将 Elastic Beanstalk 用于 Amazon RDS

解决方法

创建 RDS 数据库快照

  1. 打开 Elastic Beanstalk 控制台
  2. 选择您想从您的 RDS 数据库实例解耦的 Elastic Beanstalk 环境(环境 A)。
  3. 在导航窗格中,选择配置
  4. 对于数据库,选择修改
  5. 选择终端节点
  6. 为您的 RDS 数据库实例创建 RDS 数据库快照

防止您的 RDS 数据数据库实例被删除

  1. 打开 Amazon RDS 控制台
  2. 选择数据库,然后选择修改
  3. 删除保护部分,选择启用删除保护选项。
  4. 选择继续
  5. 计划修改部分,选择立即应用
  6. 选择修改数据库实例
  7. 刷新 Amazon RDS 控制台,然后验证是否已成功启用删除保护。

创建新 Elastic Beanstalk 环境

您的新 Elastic Beanstalk 环境(环境 B)不能包含相同 Elastic Beanstalk 应用程序中的 RDS 数据库实例。

注意:为方便在之后执行蓝/绿部署(或 CNAME 交换),请验证环境 A环境 B 使用的应用程序版本相同。

  1. 创建环境 B
  2. 将环境 B 连接到环境 A 的现有 RDS 数据库实例。
    注意: 有关更多信息,请参阅 启动并连接到默认 VPC 中的外部 Amazon RDS 实例
  3. 验证环境 B 可以连接到现有的 RDS 数据库实例,并且您的应用程序按预期方式运行。

执行蓝/绿部署以避免停机

  1. 打开环境 BElastic Beanstalk 控制台。
  2. 交换新旧 Elastic Beanstalk 环境的环境 URL。
    注意:有关更多信息,请参阅使用 Elastic Beanstalk 进行蓝/绿部署
  3. 验证环境 B 的 URL 在打开时能够响应且按预期方式运行。

重要提示:在 DNS 变更已传播且您的旧 DNS 记录过期后才能终止环境 A。DNS 记录可能需要经过长达 48 小时才会过期。DNS 服务器不一定从其缓存中清除旧记录,这取决于您在 DNS 记录上设置的生存时间 (TTL)。

删除旧 Elastic Beanstalk 环境的安全组规则

  1. 打开 Amazon RDS 控制台
  2. 选择您的数据库。
  3. 选择连接与安全视图。
  4. 安全性中选择您需要修改的安全组。
  5. 对于操作,请选择编辑入站规则
  6. 删除包含环境 A 的安全组作为源的规则。
  7. Elastic Beanstalk 控制台中,验证环境 B 和您的应用程序是否均按预期运行。

终止旧 Elastic Beanstalk 环境

终止旧 Elastic Beanstalk 环境环境 A)。

终止环境时,将删除所有 Elastic Beanstalk 资源,但 RDS 数据库实例和旧安全组除外。删除保护可防止删除 RDS 数据库实例和旧安全组。

终止环境时,您将在 Elastic Beanstalk 事件日志中看到以下错误消息:

Deleting RDS database named: aaxxxxxxxxxx failed Reason: Cannot delete protected DB Instance aaxxxxxxxxxx, please disable deletion protection and try again
Stack deletion failed: The following resource(s) failed to delete: [AWSEBRDSDatabase].

删除堆栈

  1. 打开 AWS CloudFormation 控制台
  2. 根据环境 A 的环境的 ID 选择堆栈。
    注意:堆栈的状态为 DELETE_FAILED
  3. 选择删除
  4. 在列出您要保留的资源删除堆栈弹出窗口中,选择卡在 DELETE_FAILED 状态的 RDS 资源,然后选择删除堆栈
  5. (可选)终止环境 A并删除您之前创建的 RDS 快照。

这篇文章对您有帮助吗?


您是否需要账单或技术支持?