您如何 remove/undo/delete Amazon Aurora RDS 上的待定修改?

How do you remove/undo/delete a pending modification on Amazon Aurora RDS?

我正在计算我的 Aurora RDS 实例上允许的 90 个连接总数,现在我拥有比以前更多的重型站点。我决定升级实例并且我这样做了,但是将升级挂起直到下一次维护 window,而不考虑将只读副本添加到集群中。我已经添加了副本,一切都很好。我想取消从 db.t2.medium Aurora 到 db.r3.large Aurora 实例的挂起升级。我找不到清除待定修改队列的方法。

我安装并配置了 AWS CLI。我只是找不到有关清除待定修改队列的文档。在此先感谢大家。

没有记录的方法来取消挂起的修改。

不过请注意,在 Aurora 集群上,master 扮演的角色并不像您想象的那么重要。它与其他设置不同,因为您的数据实际上并不存在于主实例上——它存在于不属于任何实例的 Aurora 集群卷上——并且副本与物理数据存储的关系与传统的不同复制。

When you create an Amazon Aurora instance, you create a DB cluster. A DB cluster consists of one or more DB instances, and a cluster volume that manages the data for those instances. An Aurora cluster volume is a virtual database storage volume that spans multiple Availability Zones, with each Availability Zone having a copy of the DB cluster data.

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Aurora.Overview.html

因此,节点不保存数据 -- 它是独立的,这是 Aurora 内部的强大功能之一。事实上,Aurora 副本没有自己的数据副本,所以在某种 strict/literal/pedantic 意义上,它们在技术上什至不正确 "replicas"(尽管术语仍在使用)——它们只是集群中的只读节点。

因此,您可能只需要使用故障转移进行重启,这将切换另一个实例(您的新副本)成为主实例。然后创建一个新的副本并销毁原始实例。

请注意,如果您在极光集群中有副本,则需要使用 cluster endpoints 连接到写入器节点或 reader 节点之一,因为如果您的写入器 ("master") 失败,Aurora 通常会交换角色(或者可能 always 交换角色,尽管可能存在不交换角色的情况)。您可能已经在这样做了。

因为 February 2019, it is documented 您可以取消此类待定修改。 我已经用待处理的数据库实例 class 修改对此进行了测试。

If you don't want a pending change to be applied in the next maintenance window, you can modify the DB instance to revert the change using the AWS CLI and specify the --apply-immediately option.

正如@gileri 所描述的,现在有一种方法可以撤消挂起的修改。

我用 RDS/Aurora 个实例对其进行了多次测试,它按预期工作,即使没有 --apply-immediately 参数(至少对于实例 class 修改)。

完整示例

让我们将名为 database-2-instance-1 的 Aurora 实例的实例 class 从 db.t3.medium 更改为 db.r4.large,然后再次撤消。 None 这些命令会影响数据库的可用性。

注意:这里使用jq只输出重要部分

检查实例class

$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].DBInstanceClass'
"db.t3.medium"

验证没有挂起的修改

$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{}

修改实例class

本次修改会导致下一次维护class实例变更window。

$ aws rds modify-db-instance --db-instance-identifier database-2-instance-1 --db-instance-class db.r4.large | jq '.DBInstance.PendingModifiedValues'
{
  "DBInstanceClass": "db.r4.large"
}

再次验证

为了保险起见,请检查一切是否符合预期。

$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{
  "DBInstanceClass": "db.r4.large"
}

撤消对实例的修改class

这是将实例 class 修改回旧值的重要部分。文档描述了 --apply-immediately 是必需的,但事实并非如此。至少在这个例子中。

$ aws rds modify-db-instance --db-instance-identifier database-2-instance-1 --db-instance-class db.t3.medium | jq '.DBInstance.PendingModifiedValues'
{}

验证删除的挂起修改

$ aws rds describe-db-instances --db-instance-identifier database-2-instance-1 | jq '.DBInstances[].PendingModifiedValues'
{}

此时挂起的修改已经消失。

文档中提到,

If you don't want a pending change to be applied in the next maintenance window, you can modify the DB instance to revert the change using the AWS CLI and specify the --apply-immediately option.

但是,请注意 --apply-immediately 将导致实例重启,即使您正在还原更改并且 rds 可能会关闭大约一分钟。