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

Terraform引入Azure DevOps与MySQL第三方Provider模块后init执行报错

问题根因

每个Terraform子模块不会自动继承根模块的provider源配置,必须独立声明依赖的provider源地址。你直接在根目录编写.tf配置时,根模块的required_providers声明了正确的非官方provider源,因此运行正常;而封装为模块后,子模块没有显式声明provider源,Terraform会默认去拉取hashicorp命名空间下的对应provider,这两个provider不在hashicorp官方维护列表内,因此触发报错。

修复步骤

  • 第一步:执行命令查看当前所有模块的provider依赖,确认引用错误源的模块
    terraform providers
    
  • 第二步:在所有使用mysql、azuredevops provider的自定义模块中,添加provider源声明,你可以在模块目录下的versions.tf文件中添加如下配置:
    terraform {
      required_providers {
        azuredevops = {
          source  = "microsoft/azuredevops"
          # 可根据需求指定版本约束,例如 version = ">=0.11.0"
        }
        mysql = {
          source  = "terraform-providers/mysql"
          # 可根据需求指定版本约束
        }
      }
    }
    
  • 第三步:清理本地Terraform缓存,重新初始化
    # 清理旧缓存和锁文件,Windows系统可手动删除对应目录和文件
    rm -rf .terraform .terraform.lock.hcl
    # 重新初始化
    terraform init
    

额外注意事项

  • 如果你的模块使用了自定义provider别名,在调用模块时需要显式传递provider实例,避免子模块自动拉取错误源的provider
  • 根模块和子模块声明的同一个provider的版本约束需要兼容,避免出现版本冲突

内容的提问来源于stack exchange,提问作者Devops-Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:06:01