如何编写Bash脚本按指定标签查找并停止运行中的RDS实例?
Bash脚本:查找并停止带指定标签的运行中RDS实例
以下是满足需求的Bash脚本,它会先列出符合条件的RDS实例,确认后再执行停止操作:
#!/bin/bash # 配置目标标签 TAG_KEY="application_name" TAG_VALUE="abc" # 可选:指定AWS区域,留空则使用默认配置的区域 AWS_REGION="" # 检查AWS CLI是否已安装 if ! command -v aws &> /dev/null; then echo "错误:AWS CLI未安装,请先安装并配置好AWS凭证。" exit 1 fi # 构建AWS CLI区域参数 REGION_PARAM="" if [ -n "$AWS_REGION" ]; then REGION_PARAM="--region $AWS_REGION" fi # 获取符合条件的运行中RDS实例ID echo "正在查找标签为$TAG_KEY=$TAG_VALUE的运行中RDS实例..." INSTANCE_IDS=$(aws rds describe-db-instances $REGION_PARAM \ --filters "Name=tag-key,Values=$TAG_KEY" "Name=tag-value,Values=$TAG_VALUE" "Name=db-instance-status,Values=available" \ --query "DBInstances[*].DBInstanceIdentifier" \ --output text) if [ -z "$INSTANCE_IDS" ]; then echo "未找到符合条件的RDS实例。" exit 0 fi # 列出找到的实例 echo "找到以下符合条件的运行中RDS实例:" for INSTANCE in $INSTANCE_IDS; do echo "- $INSTANCE" done # 确认是否执行停止操作 read -p "是否要停止以上实例?(y/N): " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then echo "操作已取消。" exit 0 fi # 执行停止操作 echo "开始停止RDS实例..." for INSTANCE in $INSTANCE_IDS; do echo "正在停止实例:$INSTANCE" aws rds stop-db-instance $REGION_PARAM --db-instance-identifier "$INSTANCE" if [ $? -eq 0 ]; then echo "实例$INSTANCE停止请求已提交成功。" else echo "实例$INSTANCE停止请求失败,请检查日志。" fi done echo "所有实例停止操作已处理完成。"
关键部分说明
- 标签与区域配置:修改
TAG_KEY和TAG_VALUE为你的目标标签,AWS_REGION可指定特定区域(如us-east-1),留空则使用AWS CLI默认配置的区域。 - 实例筛选逻辑:通过
--filters同时筛选标签和运行状态(available代表运行中),用--query提取实例ID,避免多余输出。 - 安全确认:在执行停止操作前加入交互式确认,防止误操作。
- 错误处理:检查AWS CLI是否存在,以及每个停止命令的执行结果。
注意事项
- 权限要求:执行脚本的AWS凭证需要拥有
rds:DescribeDBInstances(查看实例)和rds:StopDBInstances(停止实例)的权限。 - 实例限制:并非所有RDS实例都能停止,比如只读副本、部分多AZ部署的实例、或使用特定存储类型的实例,停止前请确认实例支持停止操作。
- 多区域场景:如果需要跨多个区域查找实例,可以在脚本中添加区域循环,遍历目标区域列表。
内容的提问来源于stack exchange,提问作者KJ1791
相关产品推荐
相关产品推荐

