Amazon ec2 根模块不声明该名称的变量。若要使用此值,请添加一个";变量";块到配置

Amazon ec2 根模块不声明该名称的变量。若要使用此值,请添加一个";变量";块到配置,amazon-ec2,terraform,terraform-provider-aws,Amazon Ec2,Terraform,Terraform Provider Aws,我的目录结构 . ├── README.md ├── ec2 │   ├── ec2.tf │   ├── outputs.tf │   └── vars.tf ├── main.tf main.tf provider "aws" { region = "us-east-1" } module "ec2" { source = "./ec2" } ec2/ec2.tf data "aws_ami" "example" { most_recent = true owners

我的目录结构

.
├── README.md
├── ec2
│   ├── ec2.tf
│   ├── outputs.tf
│   └── vars.tf
├── main.tf
main.tf

provider "aws" {
  region = "us-east-1"
}

module "ec2" {
  source = "./ec2"
}
ec2/ec2.tf

data "aws_ami" "example" {
  most_recent = true
  owners = [
    "amazon"]

  filter {
    name = "image-id"
    values = [
      "ami-0323c3dd2da7fb37d"]
  }

  filter {
    name = "root-device-type"
    values = [
      "ebs"]
  }

  filter {
    name = "virtualization-type"
    values = [
      "hvm"]
  }
}

resource "aws_instance" "web" {
  ami = data.aws_ami.example.id
  instance_type = "t2.micro"
  subnet_id = var.subnet_id
  tags = {
    Name = "HelloWorld"
  }
}
ec2/avrs.tf

variable "subnet_id" {
  default = {}
}
当我试图从外部传递子网\u id时,出现了错误

terraform plan -var subnet_id=$subnet_name
错误:未声明变量的值 在命令行上分配了名为“subnet_id”的变量,但根 模块不声明该名称的变量。若要使用此值,请添加 将“变量”块添加到配置中


如果你们对这个问题有任何想法,请帮助我

您还需要在根模块中定义变量,在根模块中使用模块。在本例中,您使用main.tf中的模块,因此在模块中添加变量,如下所示:

地形12

provider "aws" {
  region = "us-east-1"
}

module "ec2" {
  source = "./ec2"
  subnet_id = var.subnet_id
}
地形11

provider "aws" {
  region = "us-east-1"
}

module "ec2" {
  source = "./ec2"
  subnet_id = "${var.subnet_id}"
}