Terraform Azure:多版本azurerm provider使用及版本冲突解决求助
AzureRM Provider版本约束冲突报错
报错信息
Could not retrieve the list of available versions for provider hashicorp/azurerm: no available releases match the given constraints ~> 3.0.2, ~> 3.30.0
问题背景
原本使用AzureRM Provider旧版本~> 3.0.2,因部署azurerm_private_dns_resolver需升级至新版本~> 3.30.0,编写Terraform代码后触发上述版本冲突报错,尝试将Provider拆分到模块中后问题依旧。
涉事代码
# Azure Provider source and version being used terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.30.0" } } required_version = ">= 1.1.0" } # Configure the Microsoft Azure provider provider "azurerm" { version = "~> 3.0.2" features {} } provider "azurerm" { alias = "latest" version = "~> 3.30.0" features {} } module "az-resource-group" { source = "./modules/resource_group/" providers = { azurerm = azurerm.latest } az_rg_name = "example-resources" az_rg_location = "Central US" }
原因解析
Terraform会合并同一Provider的所有版本约束,这里required_providers指定了~>3.30.0(仅兼容3.30.x系列),同时默认Provider块指定~>3.0.2(仅兼容3.0.x系列),两个约束无交集,导致Terraform找不到符合条件的Provider版本,进而报错。
解决方法
方案1:统一升级至新版本(推荐)
若原有资源均可兼容3.30.x版本,直接移除旧版本Provider配置,统一使用新版本:
# Azure Provider source and version being used terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 3.30.0" } } required_version = ">= 1.1.0" } # 仅保留新版本Provider provider "azurerm" { version = "~> 3.30.0" features {} } module "az-resource-group" { source = "./modules/resource_group/" az_rg_name = "example-resources" az_rg_location = "Central US" }
方案2:保留双版本Provider(需调整约束范围)
若必须同时使用两个版本,需在required_providers中设置覆盖两个系列的版本范围,确保约束不冲突:
terraform { required_providers { azurerm = { source = "hashicorp/azurerm" # 允许3.0.2到3.30.2之间的所有版本 version = ">= 3.0.2, <= 3.30.2" } } required_version = ">= 1.1.0" } provider "azurerm" { version = "~> 3.0.2" features {} } provider "azurerm" { alias = "latest" version = "~> 3.30.0" features {} } module "az-resource-group" { source = "./modules/resource_group/" providers = { azurerm = azurerm.latest } az_rg_name = "example-resources" az_rg_location = "Central US" }
注意:双版本共存可能引发资源兼容性问题,建议优先采用方案1。
内容的提问来源于stack exchange,提问作者One Developer
相关产品推荐
相关产品推荐

