如何使用AWS CLI命令批量停止多个RDS实例
问题原因说明
aws rds stop-db-instance 命令的 --db-instance-identifier 参数单次仅支持传入1个实例ID,所以直接传入多个ID的写法本身不被AWS官方支持,无法生效。
可行实现方案
方案1:单行Shell命令实现批量停止(适合临时手动操作场景)
直接通过循环遍历待停止的实例ID即可,无需额外开发,单条命令即可完成:
# 停止指定的多个实例 for id in test-instance1 test-instance2 testinstance3; do aws rds stop-db-instance --db-instance-identifier $id --region ap-southeast-1 --profile dev; done
如果需要按规则批量过滤实例(比如停止所有test前缀的实例),可以结合实例查询命令实现:
# 自动过滤所有test前缀的实例并触发停止 aws rds describe-db-instances --region ap-southeast-1 --profile dev --query 'DBInstances[?starts_with(DBInstanceIdentifier, `test`)].DBInstanceIdentifier' --output text | xargs -I {} aws rds stop-db-instance --db-instance-identifier {} --region ap-southeast-1 --profile dev
方案2:Lambda + EventBridge 定时触发(适合定期自动启停需求)
你提到的CRON定时任务方案完全可行,实现步骤如下:
- 给Lambda函数配置IAM权限,需要开放
rds:StopDBInstance、rds:DescribeDBInstances权限,建议限制资源范围避免权限溢出 - Lambda参考代码(Python):
import boto3 rds = boto3.client('rds', region_name='ap-southeast-1') # 可固定写死待停止实例ID,也可以调用describe_db_instances接口动态过滤 TARGET_INSTANCES = ['test-instance1', 'test-instance2', 'testinstance3'] def lambda_handler(event, context): for instance_id in TARGET_INSTANCES: try: rds.stop_db_instance(DBInstanceIdentifier=instance_id) print(f"已触发停止实例: {instance_id}") except Exception as e: print(f"停止实例{instance_id}失败: {str(e)}")
- 进入AWS EventBridge控制台创建规则,选择定时触发模式,按需求填写CRON表达式,目标绑定刚才创建的Lambda函数即可
- 注意:如果RDS实例开启了停止保护,需要先关闭保护才能正常停止;另外AWS RDS单次最长停止时间为7天,到期会自动启动。
内容的提问来源于stack exchange,提问作者wilean0120
相关产品推荐
相关产品推荐

