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

如何通过Terraform将数组转为map(any)动态生成API Gateway集成?

动态生成API Gateway v2的integrations配置(map类型)

我正在使用社区提供的AWS API Gateway v2模块部署API网关,采用微服务架构,需要将请求路由到多个Lambda函数。已经通过数组定义了所有微服务,并用for_each批量部署了ECR、Lambda等资源,现在希望基于这个数组动态生成API网关的integrations块(变量类型为map(any))。

我的微服务数组定义:

locals {
   services = ["identity", "organisation"]
}

目前手动编写的integrations块如下:

module "api_gateway" {
  source = "../modules/apigateway"

  name          = "${var.name}-${var.env}-api-gateway"
  # 其他省略配置...
 
  integrations = {
    "ANY /identity/{proxy+}" = {
      lambda_arn             = module.api_lambdas["identity"].lambda_function_arn
      payload_format_version = "1.0"
      timeout_milliseconds   = 12000
    }
    "ANY /organisation/{proxy+}" = {
      lambda_arn             = module.api_lambdas["organisation"].lambda_function_arn
      payload_format_version = "1.0"
      timeout_milliseconds   = 12000
    }
  } 
}

解决方案:用Terraform for表达式直接生成map结构

不需要使用dynamic块(模块不支持)或生成数组,直接通过for表达式遍历微服务数组,构建符合map(any)类型要求的integrations配置:

module "api_gateway" {
  source = "../modules/apigateway"

  name          = "${var.name}-${var.env}-api-gateway"
  # 其他省略配置...
 
  integrations = {
    for service in local.services :
    "ANY /${service}/{proxy+}" => {
      lambda_arn             = module.api_lambdas[service].lambda_function_arn
      payload_format_version = "1.0"
      timeout_milliseconds   = 12000
    }
  } 
}

扩展:支持差异化配置

如果需要给不同微服务设置不同的超时时间或其他参数,可以把local.services改成对象数组:

locals {
  services = [
    {
      name    = "identity"
      timeout = 12000
    },
    {
      name    = "organisation"
      timeout = 15000
    }
  ]
}

对应的integrations生成逻辑调整为:

integrations = {
  for service in local.services :
  "ANY /${service.name}/{proxy+}" => {
    lambda_arn             = module.api_lambdas[service.name].lambda_function_arn
    payload_format_version = "1.0"
    timeout_milliseconds   = service.timeout
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:51:17