Rundeck Community版4.13.0如何在多台AWS RDS实例执行SQL脚本
实现Rundeck批量在AWS RDS实例上运行SQL脚本的方案
不需要专门的RDS插件,用Rundeck自带功能+AWS CLI/数据库客户端就能搞定,以下是具体可落地的方案:
方法一:静态配置RDS节点,结合数据库客户端执行SQL
1. 配置Rundeck节点信息
- 将所有目标RDS实例添加为Rundeck节点,在节点属性中存储RDS的核心连接信息(建议用Rundeck加密功能存储密码)。示例
resources.xml节点配置:
<node name="rds-mysql-prod-01" hostname="rds-mysql-prod-01.xxxxxx.us-east-1.rds.amazonaws.com" port="3306" db_name="business_db" db_user="admin" db_pass="${encrypt:xxxxxx}" osFamily="unix"/>
2. 创建命令执行作业
- 新建Rundeck作业,添加命令步骤,根据数据库类型选择对应客户端工具(需确保Rundeck所在EC2已安装对应客户端):
- MySQL场景命令示例:
mysql -h ${node.hostname} -P ${node.port} -u ${node.db_user} -p${node.db_pass} ${node.db_name} < /opt/rundeck/scripts/your_sql_script.sql- PostgreSQL场景命令示例:
psql "host=${node.hostname} port=${node.port} dbname=${node.db_name} user=${node.db_user} password=${node.db_pass}" -f /opt/rundeck/scripts/your_sql_script.sql
3. 批量执行
- 在作业执行界面勾选所有目标RDS节点,触发作业即可完成批量SQL执行。
方法二:动态获取RDS实例列表(按标签/属性筛选)
如果需要按标签等条件动态获取同账号下的RDS实例,可通过以下步骤实现:
- 给Rundeck所在EC2实例绑定IAM角色,赋予
rds:DescribeDBInstances权限。 - 在作业中添加脚本步骤,用AWS CLI筛选目标RDS实例:
# 筛选标签为Environment=Production的RDS实例,输出端点列表 aws rds describe-db-instances --filters "Name=tag:Environment,Values=Production" --query "DBInstances[*].Endpoint.Address" --output text
- 基于输出的端点列表,循环调用数据库客户端执行SQL脚本(可编写Shell脚本实现循环逻辑)。
方法三:使用Rundeck JDBC步骤(适合单条/短SQL)
- 新建作业时选择JDBC步骤,配置对应数据库的JDBC连接信息:
- 驱动类:MySQL用
com.mysql.cj.jdbc.Driver,PostgreSQL用org.postgresql.Driver - JDBC URL:
jdbc:mysql://${node.hostname}:${node.port}/${node.db_name} - 用户名/密码:直接引用节点属性中的加密值
- 驱动类:MySQL用
- 在步骤中直接输入SQL语句,或指定Rundeck服务器可访问的SQL文件路径即可执行。
关键注意事项
- 数据库密码必须用
rundeck encrypt password命令加密后存储,禁止明文配置。 - 测试阶段先在单台RDS实例验证SQL脚本正确性,再批量执行。
- 确保Rundeck所在EC2的安全组允许访问RDS实例的数据库端口(如3306、5432)。
内容的提问来源于stack exchange,提问作者Roy
相关产品推荐
相关产品推荐

