

# 将 RDS 代理与蓝绿部署结合使用
<a name="rds-proxy-blue-green"></a>

Amazon RDS 代理可与蓝绿部署结合使用，以减少切换停机时间。RDS 代理通过保持对切换过程的感知，并在绿色环境变为活跃生产环境后自动将连接重定向到绿色环境，消除了在数据库转换期间通常发生的 DNS 传播延迟。RDS Proxy 对于 RDS for PostgreSQL、RDS for MySQL 和 RDS for MariaDB 支持蓝绿部署。无需更改应用程序代码，也不需要自定义客户端驱动程序。

## 使用 RDS 代理时进行切换
<a name="rds-proxy-blue-green-switchover"></a>

当蓝色实例连接到 RDS 代理时，在切换期间会发生以下过程：
+ 切换护栏
  + Amazon RDS 运行额外的护栏检查，以验证代理是否可以成功到达蓝色和绿色环境并已准备好进行切换。
+ 切换期间的应用程序流量路由

  有关切换操作的列表，请参阅[切换操作](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/blue-green-deployments-switching.html#blue-green-deployments-switching-actions)。通过 RDS 代理发生切换时，请注意以下事项：
  + 在切换期间，蓝色数据库在绿色环境得到提升之前进入只读模式。在此过渡期间，RDS 代理继续将连接路由到蓝色数据库。
  + 在此期间，对 RDS for MySQL 执行的写入操作可能返回只读错误。例如 `1290 (HY000): The MySQL server is running with the —read-only option`，因此它无法执行此语句。在 RDS for PostgreSQL 上，读取和写入查询将返回“AdminShutdown terminating connection due to administrator command”。
  + 检测到切换后，代理会自动将流量路由到新提升的绿色环境。
  + 当绿色环境提升为新的写入器时，与代理的现有连接将断开。完成提升后，应用程序必须重新建立连接。
  + 您可以审核 RDS 代理的 CloudWatch 日志，以了解这种过渡行为是何时发生的。
+ RDS 代理 API 行为
  + 诸如 `describe-db-proxy-targets` 的代理 API 仅在切换完全完成后才会反映更新后的目标，即使流量路由发生得更早也是如此。

## 限制
<a name="rds-proxy-blue-green-limitations"></a>
+ 在创建蓝绿部署之前，您的蓝色实例必须已经是代理的目标。在为蓝色实例创建蓝绿部署后，您无法将该实例添加到 RDS 代理。