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

Terraform中从多状态文件提取VPC ID并生成字符串列表

从混合状态文件提取VPC ID并配置Route53 Zone

1. 提取VPC ID到本地列表

修改locals.tf,新增all_vpc_ids定义,针对不同状态文件的输出结构分别处理:

locals {
  aws_regions = toset(["eu-west-1", "eu-central-1", "us-east-2", "us-west-2", "ap-south-1", "ap-southeast-1"])
  terraform_state_file = "eu-west-1/terraform.tfstate"

  # 提取所有区域的VPC ID列表
  all_vpc_ids = flatten([
    for region in local.aws_regions :
    # 处理eu-west-1的Terraform状态文件(单个VPC ID)
    region == "eu-west-1" ? [data.terraform_remote_state.plt-network-state[region].outputs.dev_vpc_id] :
    # 处理其他区域的Terragrunt状态文件(从vpcs_all数组提取所有id)
    [for vpc in data.terraform_remote_state.plt-network-state[region].outputs.vpcs_all : vpc.id]
  ])

  # 若仅需特定环境(如dev)的VPC ID,替换上面的all_vpc_ids为:
  # all_vpc_ids = compact(flatten([
  #   for region in local.aws_regions :
  #   region == "eu-west-1" ? [data.terraform_remote_state.plt-network-state[region].outputs.dev_vpc_id] :
  #   [for vpc in data.terraform_remote_state.plt-network-state[region].outputs.vpcs_all :
  #    vpc.environment == "dev" ? vpc.id : null]
  # ]))
}

2. 在Route53 Zone中使用dynamic VPC块

配置aws_route53_zone资源,通过dynamic "vpc"块遍历生成的VPC信息,自动关联多区域VPC:

场景1:每个区域仅关联一个VPC

resource "aws_route53_zone" "example" {
  name = "example.com."

  dynamic "vpc" {
    for_each = {
      for region in local.aws_regions :
      region => {
        id = region == "eu-west-1" ? data.terraform_remote_state.plt-network-state[region].outputs.dev_vpc_id :
             data.terraform_remote_state.plt-network-state[region].outputs.vpcs_all[0].id
      }
    }

    content {
      vpc_id     = vpc.value.id
      vpc_region = vpc.key
    }
  }
}

场景2:每个区域需关联多个VPC

resource "aws_route53_zone" "example" {
  name = "example.com."

  dynamic "vpc" {
    for_each = flatten([
      for region in local.aws_regions :
      region == "eu-west-1" ? [
        {
          id     = data.terraform_remote_state.plt-network-state[region].outputs.dev_vpc_id
          region = region
        }
      ] : [
        for vpc in data.terraform_remote_state.plt-network-state[region].outputs.vpcs_all :
        {
          id     = vpc.id
          region = region
        }
      ]
    ])

    content {
      vpc_id     = vpc.value.id
      vpc_region = vpc.value.region
    }
  }
}

验证与调试

可以通过terraform console查看生成的VPC ID列表是否符合预期:

terraform console
> local.all_vpc_ids

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:25:34