gpt4 book ai didi

terraform - 从另一个 terraform 项目获取 VPC id

转载 作者:行者123 更新时间:2023-12-05 02:00:51 25 4
gpt4 key购买 nike

我有一个 Terraform 项目,它为一个区域设置了一个 VPC,以供该区域中的所有 EKS 集群使用。运行 terraform apply 成功后,我有这些输出:

Outputs:

all_worker_mgmt_id = "sg-09992bfxxxx13b782"
azs = tolist([
"us-east-2a",
"us-east-2b",
"us-east-2c",
])
public_subnets = [
"subnet-03ac0xxxxe533b510",
"subnet-0f91a04168xxxx9c7",
"subnet-0xxxxcd5cfcaa938c",
]
vpc_cidr_block = "192.168.0.0/16"
vpc_id = "vpc-07e4xxxxxxxx6f616"

在另一个设置 EKS 集群的 Terraform 项目中,我需要提取 vpc_idpublic_subnets 以用于配置集群。

如何在配置中不进行硬编码的情况下动态获取上述变量的值?

此文档 ( https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/vpc) 是否用于此目的?

最佳答案

我通常在 terraform 中保持资源分离,并使用 data 获取已创建的资源,手动或与其他 terraform 项目一起创建。

locals {
environment = "test"
}

data "aws_vpc" "vpc" {
filter {
name = "tag:Name"
values = [local.environment]
}
}

data "aws_subnet_ids" "private_subnets" {
vpc_id = data.aws_vpc.vpc.id

filter {
name = "tag:Name"
values = ["${local.environment}-private-*"]
}
}

data "aws_subnet_ids" "public_subnets" {
vpc_id = data.aws_vpc.vpc.id

filter {
name = "tag:Name"
values = ["${local.environment}-public-*"]
}
}

当您需要获得一个publicprivate 子网时,使用排序:

resource "aws_instance" "gitlab" {
...
subnet_id = sort(data.aws_subnet_ids.public_subnets.ids)[0]
...
}

如果您使用 terraform vpc module,以上代码将完美运行

或者,如果你想拥有一个同时管理所有资源的工具,你可以使用Terragrunt

关于terraform - 从另一个 terraform 项目获取 VPC id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66950129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com