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

Terraform执行azurerm_virtual_machine_extension报Future#WaitForCompletion超时错误

故障根因定位

该报错本质是azurerm_virtual_machine_extension资源执行超时,Terraform等待操作完成的上下文被强制终止,之前运行正常后续报错,优先排查以下几个明确问题:

  • 脚本存在交互阻塞点:demo.ps1中New-LocalUser行的ConvertTo-SecureString命令未传入明文密码参数,执行时会触发PowerShell交互式密码输入提示,脚本直接挂起直到超时,这是最高概率的根因。
  • 默认超时阈值不足:Azure CustomScriptExtension 默认超时时间为900秒(15分钟),若网络延迟高、Windows功能安装耗时久,很容易触发超时。
  • 公网连通性变化:若虚机所在网络近期新增了NSG规则、防火墙限制、代理配置,会导致虚机无法访问GitHub Raw地址下载脚本,执行流程卡住。
  • 缺少非交互执行参数:调用PowerShell时未指定非交互模式,存在触发交互等待的潜在风险。
修复方案

1. 修复demo.ps1脚本

补全密码参数,添加错误处理和非交互配置,参考修改后代码:

# 补全自定义密码,替换为实际使用的密码字符串
$securePassword = ConvertTo-SecureString "YourActualPassword123!" -AsPlainText -Force
New-LocalUser "ansible" -Password $securePassword -AccountNeverExpires:$true -PasswordNeverExpires:$true -FullName "ansible" | Add-LocalGroupMember -Group administrators

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$url = "https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1"
$file = "$env:temp\ConfigureRemotingForAnsible.ps1"

# 加错误处理,下载失败直接抛出错误终止执行
try {
    (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
} catch {
    Write-Error "下载Ansible配置脚本失败: $_"
    exit 1
}

powershell.exe -ExecutionPolicy ByPass -NonInteractive -NoProfile -File $file

Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools

2. 优化Terraform资源配置

添加超时配置,优化执行命令参数,参考修改后代码:

resource "azurerm_virtual_machine_extension" "iis-windows-vm" {
  depends_on           = [azurerm_windows_virtual_machine.web-windows-vm]
  name                 = "win-${random_string.random-win-vm.result}-vm-extn"
  virtual_machine_id   = azurerm_windows_virtual_machine.web-windows-vm.id
  publisher            = "Microsoft.Compute"
  type                 = "CustomScriptExtension"
  type_handler_version = "1.9"

  settings = <<SETTINGS
  {
      "commandToExecute": "powershell -ExecutionPolicy Unrestricted -NonInteractive -NoProfile -File demo.ps1",
      "fileUris": ["https://raw.githubusercontent.com/Configure/app/master/demo.ps1"]
  }
SETTINGS

  # 新增超时配置,最长等待30分钟,可根据实际情况调整
  timeouts {
    create = "30m"
    update = "30m"
  }
}

3. 辅助排查手段

如果修改后仍报错,可通过以下路径定位具体问题:

  • 登录目标Windows虚机,查看扩展执行日志:C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.9\
  • 查看脚本执行输出与状态:C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.9\Status
  • 手动在虚机中执行demo.ps1脚本,观察哪一步执行卡住。

内容的提问来源于stack exchange,提问作者Ram Bhushan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:45:04