如何为单个Terraform资源块使用不同版本的hashicorp/google provider
实现单个Terraform资源使用不同版本的Google Provider
可以实现这个需求,核心是利用Terraform 0.13及以上版本支持的多Provider实例别名功能,具体操作步骤如下:
1. 更新Provider配置文件(provider.tf)
在原有的默认Google Provider基础上,新增一个带别名的Provider实例,指定使用4.31.0版本:
terraform { required_version = ">= 0.13.0" required_providers { google = { source = "hashicorp/google" version = ">= 3.45, <= 3.90.0" } google_v4 = { source = "hashicorp/google" version = "4.31.0" alias = "v4" } } } # 默认Provider(3.90.0版本)的配置,保持原有设置即可 provider "google" { # 示例配置,根据你的实际环境调整 credentials = file(var.credentials_path) project = var.project_id region = var.region } # 带别名的v4版本Provider配置,需与默认Provider保持一致的认证/项目信息 provider "google" { alias = "v4" credentials = file(var.credentials_path) project = var.project_id region = var.region }
2. 修改目标资源块指定使用v4版本Provider
在google_storage_bucket "cdn-bucket"资源块中添加provider字段,指定使用别名v4的Provider实例:
resource "google_storage_bucket" "cdn-bucket" { provider = google.v4 # 明确指定使用4.31.0版本的Provider project = var.project_id name = "cdn-${var.project_id}" location = "US" storage_class = "MULTI_REGIONAL" }
注意事项
- 未指定
provider字段的其他资源会默认使用原有的3.90.0版本Provider,无需额外修改 - 确保两个Provider实例的认证信息、项目、区域等配置一致,避免资源被创建到错误环境
- 配置完成后执行
terraform init,Terraform会自动下载3.90.0和4.31.0两个版本的Provider,确认初始化成功后即可正常使用
内容的提问来源于stack exchange,提问作者Ajay k
相关产品推荐
相关产品推荐

