如何覆盖AWS RDS Wait命令的请求次数限制?
解决AWS RDS Wait命令次数超限及脚本判断逻辑问题
一、先修正你的脚本判断逻辑
原脚本里DB_CLUSTER_STATUS != "available"的判断存在两个潜在问题:
- 集群创建初期,
describe-db-clusters可能返回空结果,此时DB_CLUSTER_STATUS是空字符串,判断会一直为真,循环无法正确退出 - 没处理AWS CLI命令执行失败的情况(比如权限问题、网络波动)
可以修改成更稳健的逻辑,同时增加错误处理:
DB_CLUSTER_IDENTIFIER=${1} while true; do # 捕获状态,同时把错误输出丢弃 DB_CLUSTER_STATUS=$(aws rds describe-db-clusters --db-cluster-identifier "$DB_CLUSTER_IDENTIFIER" --query 'DBClusters[*].Status' --output text 2>/dev/null) # 处理命令执行失败的情况 if [ $? -ne 0 ]; then echo "获取集群状态失败,重试中..." sleep 5 continue fi # 确认状态为available就退出循环 if [ "$DB_CLUSTER_STATUS" = "available" ]; then echo "DB集群已可用!" break fi echo "当前DB集群状态:$DB_CLUSTER_STATUS,等待中..." sleep 5 done
二、覆盖AWS RDS Wait命令的请求次数限制
AWS CLI的wait命令本身支持两个参数直接调整重试规则,不用自己写循环:
--max-retries: 设置最大重试次数(默认一般40次左右,可按需调高)--delay: 设置每次重试的间隔秒数(默认15秒,可按需调整)
比如直接修改wait命令,放宽限制:
aws rds wait db-cluster-available \ --db-cluster-identifier "$DB_CLUSTER_IDENTIFIER" \ --max-retries 100 \ --delay 10
这样就把最大重试次数改成100次,每次间隔10秒,避免触发次数超限。
三、更稳妥的组合方案
如果担心wait命令在集群未被创建出来时直接报错,可以先通过自定义循环等集群能被查询到,再调用调整后的wait命令确认:
DB_CLUSTER_IDENTIFIER=${1} # 先等集群可被查询到 while true; do aws rds describe-db-clusters --db-cluster-identifier "$DB_CLUSTER_IDENTIFIER" >/dev/null 2>&1 if [ $? -eq 0 ]; then break fi echo "DB集群尚未创建完成,等待中..." sleep 5 done # 用调整参数后的wait命令等可用 aws rds wait db-cluster-available \ --db-cluster-identifier "$DB_CLUSTER_IDENTIFIER" \ --max-retries 80 \ --delay 5
内容的提问来源于stack exchange,提问作者deagleshot
相关产品推荐
相关产品推荐

