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

Terraform中如何遍历函数对象的dependencies列表适配数据源

解决Terraform遍历函数依赖列表的问题

问题背景

需要遍历var.admin_functions中每个对象的dependencies列表,但flexibleengine_fgs_dependencies数据源的name字段仅支持传入单个字符串,无法直接处理列表,此前写法只能获取第一个依赖项,无法覆盖所有依赖。

配置文件

fgs.tfvars

admin_functions = [
    {
      name         = "function1"
      description  = "Function1 Description"
      memory       = 128
      timeout      = 90

      dependencies = [ 
        "esdk_obs_python",
        "provider",
        "common_finops"
      ]
    },
    {
      name         = "function2"
      memory       = 128
      timeout      = 90
      dependencies = [ 
        "esdk_obs_python"
      ]
    }
]

variables.tf

variable "admin_functions" {
  type = list(object({
    name = string
    description = optional(string)
    memory = number
    timeout = number
    user_data = optional(object({}))
    dependencies = optional(list(string))
  }))
}

此前尝试的写法(main.tf)

locals {
  admin_functions_map = {
    for func in var.admin_functions : func.name => {
      dependencies = func.dependencies
    }
  }
}

data "flexibleengine_fgs_dependencies" "admin_functions" {
  for_each = local.admin_functions_map

  name = each.value.dependencies
}

解决方案

核心思路是扁平化所有依赖项,将每个函数的每个依赖转换为独立的条目,再通过for_each遍历这些条目:

locals {
  # 扁平化处理:将每个函数的每个依赖生成唯一键值对
  admin_function_dependencies = merge([
    for func in var.admin_functions : {
      for dep in func.dependencies :
      # 用"函数名:依赖名"作为唯一键,避免不同函数的同名依赖冲突
      "${func.name}:${dep}" => {
        func_name = func.name
        dep_name  = dep
      }
    }
  ]...)
}

data "flexibleengine_fgs_dependencies" "admin_functions" {
  for_each = local.admin_function_dependencies

  # 每个数据源实例对应一个依赖项
  name = each.value.dep_name
}

说明

  • 嵌套的for循环会遍历每个函数,再遍历该函数的所有依赖,生成以函数名:依赖名为唯一标识的映射条目,确保不会出现重复键。
  • 每个flexibleengine_fgs_dependencies数据源实例对应一个独立的依赖项,满足name字段仅接受字符串的要求。
  • 后续若需要关联依赖与所属函数,可通过each.value.func_name字段进行关联。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:02:49