根模块没有声明该名称的变量。要使用这个值,请在配置中添加一个 "变量 "块。

问题描述 投票:1回答:1

我的目录结构

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

主.tf

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

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

ec2ec2.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"
  }
}

ec2avrs.tf

variable "subnet_id" {
  default = {}
}

当我试图从外部传递subnet_id时,我得到了错误。

terraform plan -var subnet_id=$subnet_name

错误,未声明变量的值 在命令行中分配了一个名为 "subnet_id "的变量,但rootmodule并没有声明这个变量的名字。要使用这个值,需要在配置中添加一个 "变量 "块。

如果你们有谁知道这个问题,请帮助我。

amazon-ec2 terraform terraform-provider-aws
1个回答
1
投票

你也需要在你使用模块的根模块中定义变量。在你的例子中,你使用的模块是main.tf,所以在你的模块中添加这个变量,就像这样。

Terraform 12

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

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

Terraform 11

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

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

0
投票

我在main,tf的相同位置添加了一个vars.tf文件,并添加了空变量,并将其传递给模块。

© www.soinside.com 2019 - 2024. All rights reserved.