症状
terraform init 以 provider 版本冲突失败,或报无法查询 provider 包。两个模块可能要求不兼容的范围,某固定版本可能已被移除,或锁文件相对配置已过期。由于 Terraform 每个 provider 只能选一个版本,任何相互矛盾的约束都会中断初始化。
诊断
读取 Terraform 打印的约束;对齐使存在共同版本;用 init -upgrade 解析并刷新锁文件。
terraform init 2>&1 | head -30
根因
没有任何单一 provider 版本同时满足合并后的约束或锁文件,Terraform 无法选择并安装 provider。
修复
放宽或对齐版本约束使存在共同版本;把锁文件升级到兼容版本;确保 registry 或镜像提供所需版本。
验证
再次运行 init 确认成功并安装 provider,再运行 validate 确认配置一致。init 成功且配置有效即证明版本已一致。
常见陷阱
用 ~> 与精确版本混用容易产生不可满足的约束;应在模块间统一版本策略。