Terraform查询hashicorp/aws可用Provider包失败的原因咨询
报错信息
正在查找匹配">= 2.49.0, >= 3.0.0, ~> 3.37, >= 3.40.0, >= 3.63.0, >= 4.0.0, >= 4.7.0"的hashicorp/aws版本...
错误:Failed to query available provider packages(查询可用提供商包失败)
无法获取hashicorp/aws提供商的可用版本列表:没有可用发布版本匹配给定约束 >= 2.49.0, >= 3.0.0, ~> 3.37, >= 3.40.0, >= 3.63.0, >= 4.0.0, >= 4.7.0
相关配置(main.tf)
terraform { required_version = ">= 0.14" required_providers { aws = { source = "hashicorp/aws" version = "~> 3.37" } } }
问题说明
当前配置中仅声明aws provider版本约束为~> 3.37,执行时却触发多重版本约束不匹配报错,问题原因如下:
产生原因
Terraform 对同一Provider的版本校验逻辑,是取整个项目所有模块(包括根模块、引用的第三方公共模块、本地子模块)中声明的同Provider版本约束的交集,不会仅读取根目录下的配置。
根模块中声明的~> 3.37约束实际生效范围是>=3.37.0, <4.0.0,报错里出现的其他版本约束,全部来自项目依赖的其他模块:
- 其中
>= 2.49.0、>= 3.0.0、>= 3.40.0、>= 3.63.0这几个约束和~> 3.37存在重叠的版本区间,不会直接导致冲突 - 依赖中存在模块要求aws provider版本
>=4.0.0甚至>=4.7.0,这个要求和~> 3.37的<4.0.0上限完全没有重叠,所有约束取交集后不存在符合要求的可用版本,就会触发当前报错。
可以直接执行terraform providers命令,输出结果会明确列出每个模块对aws provider的版本要求,定位到声明4.x版本约束的依赖后,要么将根模块的aws provider升级到4.x版本做适配,要么将对应依赖降级到兼容3.x aws provider的版本即可解决问题。
内容的提问来源于stack exchange,提问作者Roman Newaza
相关产品推荐
相关产品推荐

