【Azure Developer】Terraform Plan 长时间等待问题排查:Azure China 环境下 AzureRM Provider 自动注册 Resource Provider 导致卡顿

背景

在使用 Terraform 部署 Azure Container Apps Job 时,执行以下命令:

terraform plan -out tfplan

发现命令执行耗时很长,并且终端长时间没有任何输出。Terraform 配置中主要包含以下资源:

  • Resource Group
  • Azure Container App Environment
  • Azure Container App Job
  • AzureRM Provider
  • AzAPI Provider

问题现象

执行 terraform plan -out tfplan 后,终端没有明显进度输出,看起来像是 Terraform 卡住了。

Terraform 的 plan 命令本身没有进度条。如果 Provider 初始化、Azure API 调用、Azure CLI token 获取、Resource Provider 检查等步骤耗时较长,终端可能会长时间没有新输出。

开启 Terraform 日志查看卡住位置

为了确认 Terraform 到底卡在哪一步,可以开启 Terraform 日志。

PowerShell 中开启日志

$env:TF_LOG="INFO"

terraform plan -out tfplan

实时查看日志

日志中看到如下内容:

2026-08-11T16:27:13.464+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.DevTestLab" wasn't returned from the Azure API
2026-08-11T16:27:13.464+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.DataLakeAnalytics" wasn't returned from the Azure API
2026-08-11T16:27:13.464+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.DataLakeStore" wasn't returned from the Azure API
2026-08-11T16:27:13.464+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.AVS" wasn't returned from the Azure API
2026-08-11T16:27:13.464+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.CustomProviders" wasn't returned from the Azure API
2026-08-11T16:27:13.465+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.Maps" wasn't returned from the Azure API
2026-08-11T16:27:13.465+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.MixedReality" wasn't returned from the Azure API
2026-08-11T16:27:13.465+0800 [WARN]  provider.terraform-provider-azurerm_v4.81.0_x5.exe: [WARN] The required Resource Provider "Microsoft.HealthcareApis" wasn't returned from the Azure API

错误截图:
image

根因分析

AzureRM Provider 在初始化时,默认会检查或尝试注册一批 Azure Resource Provider。

在 Azure Public Cloud 中,这些 Provider 可能存在;但在 Azure China 中,某些 Resource Provider 并不存在或不可用,例如:

  • Microsoft.DevTestLab
  • Microsoft.DataLakeAnalytics
  • Microsoft.DataLakeStore
  • Microsoft.AVS
  • Microsoft.CustomProviders
  • Microsoft.Maps
  • Microsoft.MixedReality
  • Microsoft.HealthcareApis

因此,在 Azure China 环境中,AzureRM Provider 自动检查或注册这些 Provider 时可能出现大量 warning,并导致 terraform plan 阶段耗时很长。

本项目只需要部署 Container Apps Job,实际需要的 Resource Provider 主要是:

  • Microsoft.App
  • Microsoft.OperationalInsights
  • 可能还包括 Microsoft.ContainerRegistry,如果同时管理 ACR

并不需要 AzureRM Provider 自动扫描和注册一大批无关 Provider。

解决方案:关闭 AzureRM Provider 自动 Resource Provider 注册

azurerm provider 中显式添加:

resource_provider_registrations = "none"

完整配置如下:

provider "azurerm" {
  environment                     = "china"
  resource_provider_registrations = "none"

  features {}
}

这表示 Terraform 不再自动检查和注册大量 Azure Resource Provider,而是只按当前 Terraform 配置实际使用的 Azure API 进行操作。

修复后的 Terraform Provider 配置

当前项目中的 Provider 配置如下:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "~> 4.0"
    }
    azapi = {
      source  = "Azure/azapi"
      version = "~> 2.0"
    }
  }
}

provider "azurerm" {
  environment                     = "china"
  resource_provider_registrations = "none"

  features {}
}

provider "azapi" {
  environment = "china"
}

其中:

  • environment = "china":告诉 Provider 使用 Azure China endpoint。
  • resource_provider_registrations = "none":禁用 AzureRM Provider 的自动 Resource Provider 注册。
  • features {}:AzureRM Provider 必需配置块。

验证修复

修改 Terraform 配置后,先执行:

terraform validate

如果输出:

Success! The configuration is valid.

说明语法和 Provider 配置有效。

然后重新执行:

terraform plan -out tfplan

如果之前的卡顿是由 AzureRM Provider 自动 Resource Provider 注册引起的,修改后 plan 阶段通常会明显变快。

总结

在 Azure China 环境中,如果 terraform plan 长时间没有输出,需要先打开日志确认是否卡在 AzureRM Provider 的 Resource Provider 检查阶段。
如果确认是无关 Provider 自动注册带来的等待,可以通过 resource_provider_registrations = "none" 关闭自动注册,再手动维护当前项目真正需要的 Resource Provider。

posted @ 2026-08-11 22:02  编码者卢布  阅读(3)  评论(0)    收藏  举报