Terraform配置cyrilgdn/postgresql provider仍拉取hashicorp版本问题求助
问题解决步骤
- 第一步:确认
required_providers块必须嵌套在顶层terraform块内,错误的放置位置会导致Terraform无法识别自定义源配置,正确结构如下:
terraform { required_providers { postgresql = { source = "cyrilgdn/postgresql" version = ">=1.13.0" } } }
- 第二步:清理本地缓存文件,删除项目根目录下的
.terraform文件夹、.terraform.lock.hcl文件,旧的缓存和锁文件会残留历史的hashicorp/provider源记录,未清理的情况下不会读取新的required_providers配置。 - 第三步:排查所有调用的子模块,如果子模块中也使用了postgresql相关资源,必须在子模块的
terraform块中同样声明上述required_providers配置,或者在根模块调用子模块时显式传递provider实例,传递示例如下:
# 根模块provider配置 provider "postgresql" { host = "数据库地址" port = 5432 username = "用户名" password = "密码" } # 调用子模块时传递provider module "your_module" { source = "./modules/your-module-path" // 其他模块参数 providers = { postgresql = postgresql } }
- 第四步:执行
terraform init命令时可加-upgrade参数强制刷新provider版本:
terraform init -upgrade
完整可用配置示例
# 根目录main.tf terraform { required_version = "=1.0.6" required_providers { postgresql = { source = "cyrilgdn/postgresql" version = "1.19.0" # 建议固定大版本避免兼容性问题 } } } provider "postgresql" { host = "127.0.0.1" port = 5432 database = "postgres" username = "postgres" password = "your_password" sslmode = "require" connect_timeout = 15 } # 示例资源:创建数据库 resource "postgresql_database" "test_db" { name = "test_db" owner = "postgres" }
内容的提问来源于stack exchange,提问作者Marius
相关产品推荐
相关产品推荐

