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

Terraform创建VMSS自动缩放规则失败,如何等待依赖VM生成指标?

解决Terraform部署VMSS自动缩放规则时的指标依赖等待问题

问题背景

使用Terraform 0.14.8创建虚拟机规模集(VMSS)的自动缩放规则时,间歇性出现报错:目标VMSS的telegraf/mem命名空间下找不到used_percent指标定义,重新运行部署可解决,但需要让代码自动等待指标就绪后再创建缩放规则。

报错信息(翻译后)

Error: 创建自动缩放设置 "Nuance Speech autoscale Setting - Percentage CPU"(资源组 "rg-dev-eastus2-nuance")失败: insights.AutoscaleSettingsClient#CreateOrUpdate: 请求响应失败: StatusCode=400 -- 原始错误: autorest/azure: 服务返回错误。Status=400 Code="BadRequest" Message="{"code":"BadRequest","message":"在 '/subscriptions/XXX/resourceGroups/rg-dev-eastus2-nuance/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-speech-XX' 的 'telegraf/mem' 命名空间中未找到请求的指标定义 'used_percent'。"}"

位于 .terraform/modules/nuance_speech_linux_vmss_autoscale_rule/main.tf 第1行,resource "azurerm_monitor_autoscale_setting" "this_autoscale_setting" 块内:
2022-10-10T17:06:55.240Z [WARN] plugin.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = transport is closing"
1: resource "azurerm_monitor_autoscale_setting" "this_autoscale_setting" {

解决方案

1. 固定时长等待

在自动缩放规则资源前添加强制等待资源,给VMSS和指标采集工具(如Telegraf)足够时间完成指标注册:

resource "time_sleep" "wait_for_metrics" {
  depends_on = [azurerm_virtual_machine_scale_set.your_vmss_resource]

  create_duration = "10m" # 可根据实际情况调整,比如5-15分钟
}

resource "azurerm_monitor_autoscale_setting" "this_autoscale_setting" {
  depends_on = [time_sleep.wait_for_metrics]
  # 原有资源配置代码...
}

2. 动态检查指标可用性

通过本地执行脚本循环检查目标指标是否存在,直到就绪再继续部署,比固定等待更高效:

resource "null_resource" "check_metrics_ready" {
  depends_on = [azurerm_virtual_machine_scale_set.your_vmss_resource]

  provisioner "local-exec" {
    command = <<EOT
      # 最多尝试30次,每次间隔1分钟
      for i in {1..30}; do
        az monitor metrics list-definitions --resource "/subscriptions/XXX/resourceGroups/rg-dev-eastus2-nuance/providers/Microsoft.Compute/virtualMachineScaleSets/vmss-speech-XX" --namespace "telegraf/mem" | grep -q "used_percent"
        if [ $? -eq 0 ]; then
          echo "指标已就绪"
          exit 0
        fi
        echo "等待指标就绪,第$i次尝试..."
        sleep 60
      done
      echo "超时:指标仍未就绪"
      exit 1
    EOT
  }
}

resource "azurerm_monitor_autoscale_setting" "this_autoscale_setting" {
  depends_on = [null_resource.check_metrics_ready]
  # 原有资源配置代码...
}

注意:需确保Terraform运行环境已安装Azure CLI并完成身份验证,且有权限查询指标定义。

3. 升级依赖版本

考虑升级Terraform到0.15+版本,同时匹配升级AzureRM Provider,新版本可能优化了资源依赖逻辑,减少此类间歇性问题。

关键说明

  • 等待时长或重试次数需根据实际环境调整,参考指标采集工具部署到指标注册完成的耗时。
  • 动态检查方式能精准匹配指标就绪状态,避免不必要的长时间等待。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:50:42