如何使用Ansible 2.9对Azure SQL数据库运行SQL脚本?
针对Azure SQL数据库运行SQL脚本的Ansible 2.9 Playbook方案
前提条件
- 执行Playbook的节点已安装
sqlcmd工具:- Linux系统:通过微软官方源安装
mssql-tools包 - Windows系统:安装SQL Server命令行工具或通过Chocolatey安装
mssql-cli
- Linux系统:通过微软官方源安装
- Azure SQL服务器已配置防火墙规则,允许执行节点的IP访问
- 已获取Azure SQL连接信息:服务器全名(格式:
xxx.database.windows.net)、数据库名、登录用户名、密码
Linux节点适用Playbook
- name: 执行Azure SQL数据库脚本 hosts: localhost # 替换为实际执行节点组 gather_facts: false vars: azure_sql_server: "your-sql-server.database.windows.net" azure_sql_db: "target-db-name" sql_username: "sql-admin-user" sql_password: "sql-admin-password" # 建议用Ansible Vault加密存储 sql_script_path: "/local/path/to/your/script.sql" tasks: - name: 验证sqlcmd工具是否存在 command: sqlcmd -? register: sqlcmd_check failed_when: sqlcmd_check.rc != 0 - name: 运行SQL脚本 command: > sqlcmd -S {{ azure_sql_server }} -d {{ azure_sql_db }} -U {{ sql_username }} -P {{ sql_password }} -i {{ sql_script_path }} register: exec_result - name: 输出脚本执行结果 debug: var: exec_result.stdout_lines
Windows节点适用Playbook
- name: 在Windows节点执行Azure SQL脚本 hosts: windows_nodes # 替换为Windows节点组 gather_facts: false vars: azure_sql_server: "your-sql-server.database.windows.net" azure_sql_db: "target-db-name" sql_username: "sql-admin-user" sql_password: "sql-admin-password" # 建议用Ansible Vault加密存储 sql_script_path: "C:\\local\\path\\to\\your\\script.sql" tasks: - name: 验证sqlcmd工具是否存在 win_command: sqlcmd -? register: sqlcmd_check failed_when: sqlcmd_check.rc != 0 - name: 运行SQL脚本 win_command: > sqlcmd -S {{ azure_sql_server }} -d {{ azure_sql_db }} -U {{ sql_username }} -P {{ sql_password }} -i {{ sql_script_path }} register: exec_result - name: 输出脚本执行结果 debug: var: exec_result.stdout_lines
关键注意事项
- 密码硬编码存在安全风险,推荐使用
ansible-vault加密密码变量,执行Playbook时加上--ask-vault-pass参数解密 - 如果SQL脚本包含敏感操作,建议先在测试环境验证脚本逻辑
- 若遇到连接超时,检查Azure SQL服务器的防火墙规则是否允许执行节点IP访问
- Ansible 2.9的
ms_sql模块对Azure SQL支持有限,官方推荐使用sqlcmd命令行工具完成跨环境的SQL脚本执行
内容的提问来源于stack exchange,提问作者ankita rani patro
相关产品推荐
相关产品推荐

