我应如何从 Elastic Beanstalk 环境解耦 Amazon RDS 实例而不导致停机、数据库同步问题或数据丢失?
上次更新日期:2022 年 12 月 23 日
我有一个 Amazon Relational Database Service(Amazon RDS)数据库实例附加到我的 AWS Elastic Beanstalk 环境。我想删除实例和环境之间的依赖关系,同时避免停机、数据库同步问题和数据丢失。
简短描述
在不影响环境运行状况的前提下,按照以下步骤从 Elastic Beanstalk 环境解耦您的数据库:
- 创建 Amazon RDS 数据库快照。
- 防止您的 RDS 数据数据库实例被删除。
- 创建新 Elastic Beanstalk 环境。
- 执行蓝绿部署。
- 更新 beanstalk 环境 A 的数据库删除策略。
- 从 beanstalk 环境 A 解耦 RDS 实例。
- 终止旧 Elastic Beanstalk 环境。
重要提示:挂载到 Elastic Beanstalk 环境的 RDS 数据库实例非常适合开发和测试环境。但不是生产环境的理想选择,因为数据库实例的生命周期与应用程序环境的生命周期绑定。如果终止该环境,您将会丢失数据,因为 RDS 数据库实例会被环境删除。有关更多信息,请参阅将 Elastic Beanstalk 结合 Amazon RDS 使用。
解决方法
创建 RDS 数据库快照
- 打开 Elastic Beanstalk 控制台。
- 选择您想从其中解耦 RDS 数据库实例的 Elastic Beanstalk 环境(环境 A)。
- 在导航窗格中,选择 Configuration(配置)。
- 对于 Database(数据库),选择 Modify(修改)。
- 选择 Endpoint(端点)。
- 为您的 RDS 数据库实例 Create an RDS DB snapshot(创建 RDS 数据库快照)。
防止您的 RDS 数据数据库实例被删除
- 打开 Amazon RDS 控制台。
- 选择数据库,然后选择 Modify(修改)。
- 在 Deletion protection(删除保护)部分,选择 Enable deletion protection(启用删除保护)选项。
- 选择 Continue(继续)。
- 在 Scheduling Modifications(计划修改)部分,选择 Apply immediately(立即应用)。
- 选择 Modify DB Instance(修改数据库实例)。
- 刷新 Amazon RDS 控制台,然后验证是否已启用删除保护。
创建新 Elastic Beanstalk 环境
您的新 Elastic Beanstalk 环境(环境 B)不能包含相同 Elastic Beanstalk 应用程序中的 RDS 数据库实例。
注意:为方便在之后执行蓝绿部署(或 CNAME 交换),请确保环境 A 和环境 B 属于同一应用程序。
- 创建环境 B。
- 将环境 B 连接到环境 A 的现有 RDS 数据库实例。
注意:有关更多信息,请参阅启动并连接到默认 VPC 中的外部 Amazon RDS 实例。 - 验证环境 B 是否连接到现有的 RDS 数据库实例,并且您的应用程序是否正常运行。
执行蓝绿部署以避免停机
- 打开环境 B 的 Elastic Beanstalk 控制台。
- 交换新旧 Elastic Beanstalk 环境的环境 URL。
注意:有关更多信息,请参阅使用 Elastic Beanstalk 进行蓝绿部署。 - 验证环境 B 的 URL 是否响应,以及您的应用程序是否正常运行。
重要提示:在 DNS 变更已传播且您的旧 DNS 记录过期后才能终止环境 A。DNS 记录可能需要经过长达 48 小时才会过期。DNS 服务器不会从其缓存中清除旧记录,这取决于您在 DNS 记录上设置的生存时间(TTL)。
更新 beanstalk 环境 A 的数据库删除策略
- 打开环境 A 的 Elastic Beanstalk 控制台。
- 在导航窗格中,选择 Configuration(配置)。
- 在 Database(数据库)配置中,选择 Edit(编辑)。
- 在 Database settings(数据库设置)中,将 Database deletion policy(数据库删除策略)设置为 Retain(保留)。
- 选择 Apply(应用)。保存配置更改需要花费几分钟。
重要提示:在将 Database deletion policy(数据库删除策略)更改应用于 beanstalk 环境 A 之前,请勿继续执行下一步操作。
从 beanstalk 环境 A 解耦 RDS 实例
- 打开环境 A 的 Elastic Beanstalk 控制台。
- 在导航窗格中,选择 Configuration(配置)。
- 在 Database(数据库)配置中,选择 Edit(编辑)。
- 在 Database settings(数据库设置)中,验证 Database deletion policy(数据库删除策略)是否设置为 Retain(保留)。
- 转到 Database connection(数据库连接)部分,然后选择 Decouple database(解耦数据库)。
- 选择 Apply(应用)以启动数据库解耦操作。
注意:在此期间,数据库保持正常运行,解耦数据库通常需要不到 5 分钟。
终止旧 Elastic Beanstalk 环境
验证新环境正常运行后,终止旧的 Elastic Beanstalk 环境(环境 A)。
终止环境时,将删除所有 Elastic Beanstalk 资源,但 Elastic Beanstalk 创建的 RDS 数据库实例和 RDS 安全组除外。