Terraform为Cloud Run动态批量设置环境变量报错如何解决
解决方案
错误原因
你出现报错的核心原因是迭代器引用错误:Terraform 的 dynamic 块内部默认迭代器名称和你定义的 dynamic 块的名称一致,而非顶层资源 for_each 所用的 each 对象,因此你在 env 类型的动态块中引用 each.key/each.value 无法被识别。
具体实现步骤
1. 先定义环境变量变量
在你的 variables.tf 中添加如下声明,规范入参格式:
variable "envs" { type = map(string) description = "Cloud Run 服务的环境变量键值对集合" default = {} }
2. 替换静态env块为dynamic块
把资源中静态写死的多个env块替换为动态生成逻辑,如果需要保留固定的内置环境变量,也可以直接和传入的变量合并:
resource "google_cloud_run_service" "default" { name = "cloudrun-srv" location = "us-central1" template { spec { containers { image = "us-docker.pkg.dev/cloudrun/container/hello" // 动态生成所有环境变量,合并固定环境变量和传入的变量 dynamic "env" { for_each = merge( { SOURCE = "remote" TARGET = "home" }, var.envs ) content { name = env.key value = env.value } } } } } traffic { percent = 100 latest_revision = true } autogenerate_revision_name = true }
说明
- 上述代码中
for_each用merge函数合并了固定环境变量和var.envs传入的自定义变量,你可以根据需求去掉固定配置部分,直接写for_each = var.envs - 动态块内部用
env.key、env.value取值,这里的env是你dynamic块声明的块名,如果你需要自定义迭代器名称,可以添加iterator = "自定义名"参数,取值时对应改为自定义名.key即可
内容的提问来源于stack exchange,提问作者Ari
相关产品推荐
相关产品推荐

