Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Terraform EC2实例的输出子网_Terraform - Fatal编程技术网

Terraform EC2实例的输出子网

Terraform EC2实例的输出子网,terraform,Terraform,我正在用两个模块构建一个VPC和AWS EC2。一个用于VPC,一个用于EC2。我正在努力弄清楚如何为ec2模块中使用的子网使用输出 我在VPC模块中创建了子网 resource "aws_subnet" "tnt_public_subnets_cidr" { vpc_id = aws_vpc.tnt_vpc.id count = length(var.availabilit

我正在用两个模块构建一个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主模块中的何处使用此功能?子网地址

   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
   }
当我尝试运行地形平面图时,出现以下错误:

    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.

那么我错在哪里呢?在将输出用于其他模块时,我很难理解它们是如何流动的。

在您的模块中,您有一个没有默认值的变量:

   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
}