根模块没有声明该名称的变量。要使用此值,请在配置中添加“变量”块

Nar*_*aka 9 amazon-ec2 terraform terraform-provider-aws

我的目录结构

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ec2\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ec2.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 outputs.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vars.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 main.tf\n
Run Code Online (Sandbox Code Playgroud)\n\n

主.tf

\n\n
provider "aws" {\n  region = "us-east-1"\n}\n\nmodule "ec2" {\n  source = "./ec2"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

ec2/ec2.tf

\n\n
data "aws_ami" "example" {\n  most_recent = true\n  owners = [\n    "amazon"]\n\n  filter {\n    name = "image-id"\n    values = [\n      "ami-0323c3dd2da7fb37d"]\n  }\n\n  filter {\n    name = "root-device-type"\n    values = [\n      "ebs"]\n  }\n\n  filter {\n    name = "virtualization-type"\n    values = [\n      "hvm"]\n  }\n}\n\nresource "aws_instance" "web" {\n  ami = data.aws_ami.example.id\n  instance_type = "t2.micro"\n  subnet_id = var.subnet_id\n  tags = {\n    Name = "HelloWorld"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

ec2/avrs.tf

\n\n
variable "subnet_id" {\n  default = {}\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我尝试从外部传递subnet_id 时,出现错误。

\n\n
terraform plan -var subnet_id=$subnet_name\n
Run Code Online (Sandbox Code Playgroud)\n\n

错误: 未声明变量的值\n在命令行上分配了名为“subnet_id”的变量,但根\n模块未声明该名称的变量。要使用此值,请向配置添加\n“变量”块。

\n\n

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

\n

Fau*_*zan 12

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

地形 12

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

module "ec2" {
  source = "./ec2"
  subnet_id = var.subnet_id
}
Run Code Online (Sandbox Code Playgroud)

地形 11

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

module "ec2" {
  source = "./ec2"
  subnet_id = "${var.subnet_id}"
}
Run Code Online (Sandbox Code Playgroud)