Модуль root не объявляет переменную с таким именем. Чтобы использовать это значение, добавьте «переменный» блок в конфигурацию - PullRequest
1 голос
/ 02 мая 2020

Моя структура каталогов

.
├── 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 = {}
}

, когда я пытаюсь передать subnet_id извне, я получаю ошибку.

terraform plan -var subnet_id=$subnet_name

Ошибка: значение для необъявленной переменной В командной строке была назначена переменная с именем "subnet_id", но Модуль root не объявляет переменную с таким именем. Чтобы использовать это значение, добавьте «переменный» блок в конфигурацию.

, если у кого-то из вас есть представление об этой проблеме, пожалуйста, помогите мне.

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Вам необходимо определить переменную и в модуле root, где вы используете модуль. В вашем случае вы используете модуль в 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 голосов
/ 04 мая 2020

Я добавил файл vars.tf в том же месте, что и main, tf, добавил пустые переменные и передал то же самое в модули. и это сработало. спасибо тебе @ Fauzan

...