You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 09:42:05