如何在Azure中使用Terraform创建UIPathRobot虚拟机
Terraform在现有Azure网络环境部署带UiPath Robot扩展虚拟机方案
你已经完成VNet、子网、NSG部署的前提下,不需要改动现有网络资源配置,直接通过Terraform引用现有网络资源,依次创建网卡、绑定NSG、创建虚拟机、部署自定义扩展完成UiPath Robot的安装注册即可,具体配置如下:
前置准备
- 确保本地Terraform已完成AzureRM Provider的认证配置,建议使用3.x及以上版本的AzureRM Provider,避免旧版本API兼容问题
- 提前准备好UiPath Robot部署所需参数:对应版本的Robot安装包访问地址、Orchestrator连接地址、机器注册密钥、所属机器组信息、Robot运行账号的凭证
- 确认现有网络资源的名称、所属资源组信息:如果网络资源和当前虚拟机部署不在同一个Terraform state中,通过Terraform数据源拉取资源属性即可;如果在同一个state中,直接引用原有资源的属性即可
- 确认现有NSG已经放通虚拟机到Orchestrator、安装包存储位置的出站访问权限,避免后续扩展安装失败
核心配置代码
以下示例以网络资源在独立资源组、不在当前Terraform state的场景编写,同state场景直接替换资源引用即可。
1. 引用现有网络资源
# 拉取现有资源组信息 data "azurerm_resource_group" "existing" { name = "你的网络资源所属资源组名称" } # 拉取现有虚拟网络 data "azurerm_virtual_network" "existing_vnet" { name = "你已创建的虚拟网络名称" resource_group_name = data.azurerm_resource_group.existing.name } # 拉取现有目标子网 data "azurerm_subnet" "existing_subnet" { name = "你计划部署虚拟机的子网名称" resource_group_name = data.azurerm_resource_group.existing.name virtual_network_name = data.azurerm_virtual_network.existing_vnet.name } # 拉取现有NSG data "azurerm_network_security_group" "existing_nsg" { name = "你已创建的网络安全组名称" resource_group_name = data.azurerm_resource_group.existing.name }
2. 创建虚拟机网卡并绑定NSG
# 创建虚拟机网卡 resource "azurerm_network_interface" "uipath_nic" { name = "uipath-robot-nic-01" location = data.azurerm_resource_group.existing.location resource_group_name = data.azurerm_resource_group.existing.name ip_configuration { name = "internal-ip" subnet_id = data.azurerm_subnet.existing_subnet.id private_ip_address_allocation = "Dynamic" # 不需要公网IP就不要配置公网关联,Robot只要能出网连Orchestrator即可正常工作 } } # 将现有NSG关联到虚拟机网卡 resource "azurerm_network_interface_security_group_association" "nic_nsg_bind" { network_interface_id = azurerm_network_interface.uipath_nic.id network_security_group_id = data.azurerm_network_security_group.existing_nsg.id }
3. 创建UiPath Robot所属Windows虚拟机
resource "azurerm_windows_virtual_machine" "uipath_vm" { name = "uipath-robot-01" computer_name = "UiPathRobot01" location = data.azurerm_resource_group.existing.location resource_group_name = data.azurerm_resource_group.existing.name # 虚拟机规格根据Robot负载调整,无人值守Robot建议至少2核4G配置 size = "Standard_D2s_v3" admin_username = "本地管理员账号名" # 敏感参数不要硬编码,用Terraform敏感变量或Key Vault引用传入 admin_password = var.vm_admin_password network_interface_ids = [azurerm_network_interface.uipath_nic.id] # 使用Azure官方认证的Windows Server镜像,推荐2019/2022数据中心版,和UiPath兼容性最好 source_image_reference { publisher = "MicrosoftWindowsServer" offer = "WindowsServer" sku = "2022-datacenter-azure-edition" version = "latest" } os_disk { caching = "ReadWrite" storage_account_type = "Premium_LRS" disk_size_gb = 128 } enable_automatic_updates = true # 不需要启动诊断可以删除boot_diagnostics块,节省存储成本 boot_diagnostics {} }
4. 部署自定义扩展安装配置UiPath Robot
使用Azure原生自定义脚本扩展完成Robot的静默安装、Orchestrator注册动作,不需要额外跳板机操作:
resource "azurerm_virtual_machine_extension" "uipath_robot_deploy" { name = "uipath-robot-installer" virtual_machine_id = azurerm_windows_virtual_machine.uipath_vm.id publisher = "Microsoft.Compute" type = "CustomScriptExtension" type_handler_version = "1.10" settings = <<SETTINGS { "commandToExecute": "powershell -ExecutionPolicy Unrestricted -Command \\"# 下载Robot安装包; Invoke-WebRequest -Uri '[你的UiPath Robot对应版本MSI安装包可访问直链]' -OutFile 'C:\\Windows\\Temp\\UiPathRobot.msi'; # 静默安装Robot,参数根据你的实际需求调整; msiexec /i 'C:\\Windows\\Temp\\UiPathRobot.msi' /quiet /qn ADDLOCAL=Robot,RobotService; Start-Sleep -Seconds 60; # 注册到Orchestrator,替换为你实际的连接参数; & 'C:\\Program Files\\UiPath\\Studio\\UiPath.Robot.exe' connect --url '[你的Orchestrator访问地址]' --key '[你的Orchestrator机器注册密钥]' --machinegroup '[所属机器组名称]'; Remove-Item 'C:\\Windows\\Temp\\UiPathRobot.msi' -Force\\"" } SETTINGS depends_on = [azurerm_windows_virtual_machine.uipath_vm] }
如果安装逻辑复杂,建议把完整PowerShell脚本上传到私有Azure存储Blob,通过
fileUris参数指定脚本地址,commandToExecute直接执行本地脚本即可,避免长命令转义出错。
排错与注意事项
- 所有敏感凭证包括虚拟机管理员密码、Orchestrator注册密钥必须用敏感变量或Azure Key Vault引用传入,禁止硬编码在Terraform配置文件中
- 下载的UiPath Robot安装包版本必须和你使用的Orchestrator版本完全匹配,否则会出现注册失败、流程执行兼容问题
- 如果扩展执行失败,登录虚拟机到
C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\路径下查看执行日志,根据报错定位是网络不通、安装参数错误还是权限问题 - 如果需要运行带UI交互的无人值守流程,需要给Robot运行账号配置本地管理员权限,同时调整组策略关闭会话0隔离限制,避免流程执行时找不到UI元素
- 批量部署Robot时可以把上述配置封装成Terraform模块,传入不同的机器名、注册密钥即可快速批量创建,不需要重复编写配置
内容的提问来源于stack exchange,提问作者Pradeep
相关产品推荐
相关产品推荐

