EC2 实例的输出子网
Posted
技术标签:
【中文标题】EC2 实例的输出子网【英文标题】:Output Subnets for EC2 instance 【发布时间】:2021-07-03 18:51:26 【问题描述】:我正在构建具有两个模块的 VPC 和 AWS EC2。一个用于 VPC,一个用于 EC2。我正在努力弄清楚如何在 ec2 模块中使用子网的输出。
我在 VPC 模块中创建了子网。
resource "aws_subnet" "tnt_public_subnets_cidr"
vpc_id = aws_vpc.tnt_vpc.id
count = length(var.availability_zones)
cidr_block = var.tnt_public_subnets_cidr [count.index]
availability_zone = element(var.availability_zones, count.index)
map_public_ip_on_launch = true
tags =
Name = "$var.environment_mgmt_subnet_$count.index + 1"
Environment = var.environment
然后我使用了一个输出。
output "tnt_public_subnets_cidr"
value = [aws_subnet.tnt_public_subnets_cidr.*.id]
然后在 ec2 模块中创建一个变量。
variable "tnt_public_subnets_cidr"
现在我该怎么办?我在 ec2 模块 main 的哪里使用它?子网ID?
resource "aws_instance" "Webserver"
count = var.instance_count
ami = var.ami
instance_type = var.instance_type
associate_public_ip_address = var.public_address
disable_api_termination = true
subnet_id = var.tnt_public_subnets_cidr
然后在根模块中。
module "webserver"
source = "./modules/ec2/webserver"
ami = var.ami_value
count = var.count
environment = var.environment
subnet_id = module.vpc.tnt_public_subnets_cidr.id
当我尝试运行 terraform 计划时出现此错误:
Error: Missing required argument
on main.tf line 15, in module "webserver":
15: module "webserver"
The argument "tnt_public_subnets_cidr" is required, but no definition was
found.
那么我哪里错了?当将它们用于其他模块时,我对输出的流动方式感到困惑。
【问题讨论】:
【参考方案1】:在您的模块中,您有一个没有默认值的变量:
variable "tnt_public_subnets_cidr"
这意味着您在实例化模块时必须提供它:
module "webserver"
source = "./modules/ec2/webserver"
ami = var.ami_value
count = var.count
environment = var.environment
tnt_public_subnets_cidr = module.vpc.tnt_public_subnets_cidr.id
您的输出也应该是一个列表,而不是列表的列表:
output "tnt_public_subnets_cidr"
value = aws_subnet.tnt_public_subnets_cidr.*.id
【讨论】:
以上是关于EC2 实例的输出子网的主要内容,如果未能解决你的问题,请参考以下文章