正如@gileri 所描述的,现在有一种方法可以撤消挂起的修改。
我用 RDS/Aurora 实例对其进行了多次测试,即使没有 --apply-immediately 参数(至少对于实例类修改),它也能按预期工作。
完整示例
让我们将名为database-2-instance-1 的Aurora 实例的实例类从db.t3.medium 更改为db.r4.large,然后再次撤消它。这些命令都不会影响数据库的可用性。
注意:这里使用jq只输出重要部分。
检查实例类
$ 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'
{}
修改实例类
此修改将导致在下一个维护窗口中更改实例类。
$ 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"
}
撤销修改实例类
这是将实例类修改回旧值的重要部分。该文档描述了--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'
{}
此时挂起的修改已经消失。