如何在不造成停机、数据库同步问题或数据丢失的情况下将 Amazon RDS 实例与 Elastic Beanstalk 环境分离?

2 分钟阅读
0

我有一个连接到 AWS Elastic Beanstalk 环境的 Amazon Relational Database Service(Amazon RDS)数据库实例。我希望在删除实例和环境之间的依赖关系时不会出现停机、数据库同步问题和数据丢失问题。

简短描述

以下过程可将您的数据库与 Elastic Beanstalk 环境分离,且不会影响环境的运行状况:

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

**重要事项:**最佳做法是,仅在开发和测试环境中将 RDS 数据库实例连接到 Elastic Beanstalk 环境。在生产环境中,数据库实例的生命周期与应用程序环境的生命周期息息相关。因此,最佳做法是不要将 RDS 数据库实例连接到生产环境下的 Elastic Beanstalk 环境。如果终止环境,则会丢失数据,因为环境会删除数据库实例。有关更多信息,请参阅 将 Elastic Beanstalk 结合 Amazon RDS 使用

解决方法

为实例创建数据库快照

要创建实例的数据库快照,请完成以下步骤:

  1. 打开 Elastic Beanstalk 控制台
  2. 创建 Elastic Beanstalk 环境。
  3. 复制环境 ID。
  4. 打开 Amazon RDS 控制台
  5. 在导航窗格中,选择数据库
  6. 在搜索字段中输入环境 ID,然后选择数据库。
  7. 创建数据库快照

防止数据库实例被删除

要防止数据库实例被删除,请完成以下步骤:

  1. 打开 Amazon RDS 控制台
  2. 在导航窗格中,选择数据库
  3. 选择数据库,然后选择修改
  4. 删除保护下,选择启用删除保护,然后选择继续
  5. 对于计划修改,选择立即应用,然后选择修改集群
  6. 刷新 Amazon RDS 控制台,然后确认删除保护已开启。

创建新的 Elastic Beanstalk 环境

**注意:**新 Elastic Beanstalk 环境不能包含数据库实例。

要创建新的 Elastic Beanstalk 环境,请完成以下步骤:

  1. 创建新的 Elastic Beanstalk 环境。
  2. 将新的 Elastic Beanstalk 环境连接到旧 Elastic Beanstalk 环境的现有数据库实例。有关更多信息,请参阅启动并连接到默认虚拟私有云(VPC)中的外部 Amazon RDS 实例
  3. 验证新环境是否连接到现有数据库实例,以及应用程序是否正常运行。

执行蓝绿部署以避免停机

**注意:**如果之后要执行蓝绿部署或 CNAME 交换,两个 Elastic Beanstalk 环境必须属于同一个应用程序。

要执行蓝绿部署,请完成以下步骤:

  1. 打开新环境的 Elastic Beanstalk 控制台
  2. 交换新旧 Elastic Beanstalk 环境的环境 URL。有关更多信息,请参阅通过 Elastic Beanstalk 进行蓝绿部署
  3. 验证新环境的 URL 是否响应,以及应用程序是否正常运行。

**重要事项:**仅当 DNS 更改已传播且旧 DNS 记录过期后,才能终止旧的 Elastic Beanstalk 环境。DNS 记录可能需要长达 48 小时才会过期。DNS 服务器不会根据 DNS 记录上设置的生存时间(TTL)从缓存中清除旧记录。

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

要更新旧环境的数据库删除策略,请完成以下步骤:

  1. 打开旧环境的 Elastic Beanstalk 控制台
  2. 在导航窗格中,选择配置
  3. 网络和数据库下,选择编辑
  4. 数据库设置下,将数据库删除策略设置为保留
  5. 选择应用。保存配置更改可能需要几分钟。

重要事项:只有在将数据库删除策略更改应用于旧环境后,才能继续执行下一步。

将 RDS 实例与旧环境分离

要将 RDS 实例与旧环境分离,请完成以下步骤:

  1. 打开旧环境的 Elastic Beanstalk 控制台
  2. 在导航窗格中,选择配置
  3. 网络和数据库配置下,选择编辑
  4. 数据库设置下,验证数据库删除策略是否已设置为保留
  5. 数据库连接部分,选择解耦数据库
  6. 选择应用

**注意:**数据库解耦时仍可运行。解耦数据库通常不到 5 分钟。

终止旧环境

验证完新环境的功能后,请终止旧的 Elastic Beanstalk 环境。

终止环境时,除 Elastic Beanstalk 创建的数据库实例和 RDS 安全组外,所有 Elastic Beanstalk 资源都将被删除。当为负载均衡的 Elastic Beanstalk 环境创建 RDS 实例时,Elastic Beanstalk 会创建弹性负载均衡(ELB)安全组。Elastic Beanstalk 还会创建一个 Amazon Elastic Compute Cloud(Amazon EC2)安全组,用于连接环境中的 EC2 实例。此外,Elastic Beanstalk 会创建一个 RDS 安全组以连接到 RDS 实例。为了允许来自 EC2 安全组的端口 3306 的入站流量,Elastic Beanstalk 会向 RDS 安全组添加安全组入站规则。

解耦数据库时,Elastic Beanstalk 不会删除安全组入站规则。该安全组入站规则引用了 Elastic Beanstalk 创建的 RDS 安全组中的 EC2 安全组。终止环境时,Elastic Beanstalk 无法终止环境,因为解耦 RDS 安全组仍在引用 EC2 安全组。

要终止 Elastic Beanstalk 环境,请完成以下步骤:

  1. 打开旧环境的 Elastic Beanstalk 控制台
  2. 在导航窗格中,选择配置
  3. 实例流量和扩缩下,记下 EC2 安全组下的 EC2 安全组名称。
  4. 打开 Amazon EC2 控制台
  5. 在导航窗格中,选择安全组
  6. 安全组页面上,输入 EC2 安全组名称。
  7. 记下安全组 ID。其格式类似于 “sg-xxxxxxxx”。
  8. 打开 Amazon RDS 控制台
  9. 在导航窗格中,选择数据库,然后选择数据库实例的名称。
  10. 连接和安全下,记下子网、安全组和端点。然后,在安全下,选择安全组名称。
  11. 在 EC2 控制台中打开安全组页面后,选择安全组。
  12. 对于入站规则,选择编辑入站规则
  13. 确定安全组规则。
  14. 选择删除,然后选择保存规则
  15. 打开旧环境的 Elastic Beanstalk 控制台
  16. 选择操作,然后选择终止环境。解耦数据库时,Elastic Beanstalk 不会删除安全组入站规则。安全组入站规则引用了 Elastic Beanstalk 创建的 RDS 安全组中的 EC2 安全组。
AWS 官方
AWS 官方已更新 4 个月前