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

上次更新日期:2022 年 12 月 23 日

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

简短描述

在不影响环境运行状况的前提下,按照以下步骤从 Elastic Beanstalk 环境解耦您的数据库:

  1. 创建 Amazon RDS 数据库快照。
  2. 防止您的 RDS 数据数据库实例被删除。
  3. 创建新 Elastic Beanstalk 环境。
  4. 执行蓝绿部署。
  5. 更新 beanstalk 环境 A 的数据库删除策略。
  6. 从 beanstalk 环境 A 解耦 RDS 实例。
  7. 终止旧 Elastic Beanstalk 环境。

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

解决方法

创建 RDS 数据库快照

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

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

  1. 打开 Amazon RDS 控制台
  2. 选择数据库,然后选择 Modify(修改)。
  3. Deletion protection(删除保护)部分,选择 Enable deletion protection(启用删除保护)选项。
  4. 选择 Continue(继续)。
  5. Scheduling Modifications(计划修改)部分,选择 Apply immediately(立即应用)。
  6. 选择 Modify DB Instance(修改数据库实例)。
  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)。

更新 beanstalk 环境 A 的数据库删除策略

  1. 打开环境 AElastic Beanstalk 控制台
  2. 在导航窗格中,选择 Configuration(配置)。
  3. Database(数据库)配置中,选择 Edit(编辑)。
  4. Database settings(数据库设置)中,将 Database deletion policy(数据库删除策略)设置为 Retain(保留)。
  5. 选择 Apply(应用)。保存配置更改需要花费几分钟。

重要提示:在将 Database deletion policy(数据库删除策略)更改应用于 beanstalk 环境 A 之前,请勿继续执行下一步操作。

从 beanstalk 环境 A 解耦 RDS 实例

  1. 打开环境 AElastic Beanstalk 控制台
  2. 在导航窗格中,选择 Configuration(配置)。
  3. Database(数据库)配置中,选择 Edit(编辑)。
  4. Database settings(数据库设置)中,验证 Database deletion policy(数据库删除策略)是否设置为 Retain(保留)。
  5. 转到 Database connection(数据库连接)部分,然后选择 Decouple database(解耦数据库)。
  6. 选择 Apply(应用)以启动数据库解耦操作。

注意:在此期间,数据库保持正常运行,解耦数据库通常需要不到 5 分钟。

终止旧 Elastic Beanstalk 环境

验证新环境正常运行后,终止旧的 Elastic Beanstalk 环境环境 A)。

终止环境时,将删除所有 Elastic Beanstalk 资源,但 Elastic Beanstalk 创建的 RDS 数据库实例和 RDS 安全组除外。


这篇文章对您有帮助吗?


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