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

如何在Terraform根模块通过tfvars定义复杂对象列表调用子模块

实现方案

要把包含pubsub_target嵌套对象的job_name列表移到根模块的tfvars文件中,根模块的main.tf需要完成以下配置:

1. 声明匹配结构的变量

在根模块的main.tf(或单独的variables.tf文件,更符合规范)中添加变量声明,确保变量结构和子模块接收的job_name参数完全匹配:

variable "scheduler_jobs" {
  type = list(object({
    job_name       = string
    pubsub_target = object({
      topic_name = string
      # 按需补充子模块pubsub_target要求的其他字段,比如message_body、attributes等
    })
    # 如果子模块还需要其他字段(如schedule、time_zone),也同步添加到这里
  }))
  description = "Scheduler jobs with associated Pub/Sub target configurations"
  default     = []
}

2. 子模块调用时传入变量

修改根模块中调用schedular子模块的代码,把原来硬编码的job_name列表替换为上面声明的变量:

module "schedular" {
  source = "./path/to/schedular" # 替换为你的子模块实际路径

  job_name = var.scheduler_jobs
}

补充:tfvars文件示例

在根模块的terraform.tfvars(或自定义的*.tfvars文件)中定义具体的任务列表内容:

scheduler_jobs = [
  {
    job_name = "daily-data-sync"
    pubsub_target = {
      topic_name = "projects/my-project-id/topics/data-sync-topic"
    }
  },
  {
    job_name = "hourly-resource-cleanup"
    pubsub_target = {
      topic_name = "projects/my-project-id/topics/cleanup-topic"
    }
  }
]

注意:变量结构必须和子模块中job_name变量的定义严格一致,否则会出现类型不匹配的错误。

内容的提问来源于stack exchange,提问作者jy45v

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:15:42