从另一个terraform项目获取VPC id
我有一个terraform项目,为一个地区建立了一个VPC,用于该地区的所有EKS集群。 成功运行terraform apply后,我有以下输出:从另一个terraform项目获取VPC id,terraform,terraform-provider-aws,Terraform,Terraform Provider Aws,我有一个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 =
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_id和public_子网来配置集群
在配置中没有硬代码的情况下,如何动态获取上述变量的值
本文档是否用于此目的?通常,您可以与jq一起使用以获得输出值:
terraform output -json | jq -r '.vpc_id.value'
terraform output -json | jq -rc '.public_subnets.value'
或者更简单:
terraform output vpc_id
terraform output public_subnets
通常,您可以使用jq获得输出值:
terraform output -json | jq -r '.vpc_id.value'
terraform output -json | jq -rc '.public_subnets.value'
或者更简单:
terraform output vpc_id
terraform output public_subnets
我通常将资源在terraform中分开,并使用数据来获取已经创建的资源,或者与其他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-*"]
}
}
当需要获取一个公用或专用子网时,请使用排序:
resource "aws_instance" "gitlab" {
...
subnet_id = sort(data.aws_subnet_ids.public_subnets.ids)[0]
...
}
如果使用
或者,如果您想要一个工具同时管理所有资源,您可以使用我通常将资源在terraform中分开,并使用数据获取已经创建的资源,或者与其他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-*"]
}
}
当需要获取一个公用或专用子网时,请使用排序:
resource "aws_instance" "gitlab" {
...
subnet_id = sort(data.aws_subnet_ids.public_subnets.ids)[0]
...
}
如果使用
或者,如果您想要一个工具同时管理所有资源,您可以使用Tks。我可以获得这些输出,但如何将这些变量动态传递到terraform项目中?我设置了一个EKS群集。请使用此VPC。@t这取决于您的设置。使用参数传递它们。你的意思是我们在应用时通过命令行,对吗?所以代码仍然没有改变,我们可以重用。@ThoQuach是的,你可以这样做。因此,在您的自动脚本中,您可以从一个terraform模块/脚本中获取输出,并将其作为输入传递给下一个模块/脚本。Tks我可以获取这些输出,但如何将这些变量动态传递到terraform项目中?我设置了一个EKS群集,使用此VPC。@t这取决于您的设置。使用参数传递它们。你的意思是我们在应用时通过命令行,对吗?所以代码仍然没有改变,我们可以重用。@ThoQuach是的,你可以这样做。因此,在自动脚本中,您可以从一个terraform模块/脚本获取输出,并将其作为输入传递给下一个模块/脚本。