Ошибка Terraform_Remote_State: у этого объекта нет аргумента, вложенного блока или экспортированного атрибута с именем «vpc_id».

Работаю с Terraform (TF) в AWS и застрял с ошибкой при попытке вызвать vpc_id с помощью terraform_remote_state. Мы сегментировали различные части сети, чтобы смягчить проскальзывание состояния. Однако это также требует взаимодействия с файлами состояния каждого отдельного элемента инфраструктуры (например, файл состояния для vpc, sgs, ролей и т. д.). Когда я пытаюсь получить vpc_id из файла состояния, хранящегося в корзине S3, я получаю следующую ошибку:

      
  on main.tf line 78, in module "vpc_sg":
  78:   vpc_id = data.terraform_remote_state.vpc.vpc_id

This object has no argument, nested block, or exported attribute named
"vpc_id".

Это мой вызов terraform_remote_state в файле main.tf:

        backend = "s3"
  workspace = var.workspace
  config = {
    bucket = "terraform-east"
    key = "terraform-vpc.tfstate"
    region ="us-east-1" 
  }
}

Это вызов внутри того же main.tf

        // output "sg_id"
  source = "git::https://url_to_sg.git/reference?
  vpc_cidr = data.terraform_remote_state.vpc.vpc_cidr -- This line also doesn't work.. but same issue.
  *vpc_id = data.terraform_remote_state.vpc.vpc_id* -- Here's the troublesome line.
  deployment_name = "*redacted*"
  workspace = var.workspace
  tags = merge(
    local.common_tags,
    map(
      "Name", "vpc_sg-${var.workspace}",
      "module", "vpc_sg"
    )
  )
}

А вот файл outputs.tf в каталоге vpc:

      output "vpc_id" {
  value       = module.vpc.vpc_id
  description = "The VPC ID"
}

output "vpc_cidr" {
  value       = var.vpc_cidr
  description = "The VPC CIDR block"
}

Вот объявление tf_remote_state:

      data "terraform_remote_state" "vpc" {
    backend = "s3"
    workspace = var.workspace
    config = {
         bucket = "correct bucket (trust me)
         key = "correct key"
         region = us-east-1
    }
}

Наконец, вот информация о файле backend.tf из каталога vpc:

      terraform {
    backend "s3" {
        bucket = "terraform-east"
        key = "terraform-vpc.tfstate"
        region ="us-east-1" 
        }
}

Я пробовал с outputs.vpc_id (как указано выше), без outputs (outputs требуется после обновления tf 0.12), с outputs.vpc_id.value (поскольку файл состояния делает вид, что это структура) и с outputs[1] .value.. Выдает разные ошибки, но тем не менее все они терпят неудачу. Помощь приветствуется.

3 ответа

The terraform_remote_stateисточник данных экспортирует выходные данные из удаленного состояния под атрибутом, называемым outputs, которое само по себе является значением объекта, содержащим один атрибут для каждого выходного значения.

Итак, чтобы обратиться к выходному значению, в частности, вам нужно написать:

      data.terraform_remote_state.outputs.vpc

...и затем, чтобы получить vpc_idатрибут из этого вложенного vpcобъект:

      data.terraform_remote_state.outputs.vpc.vpc_id

Способ ссылки на значения состояния изменился в terraform v 0.12. Смотрите ссылку здесь:

https://www.terraform.io/upgrade-guides/0-12.html#remote-state-references

Из руководства:

В предыдущих выпусках ссылка на вывод vpc_id, экспортируемый источником данных удаленного состояния, могла выглядеть следующим образом:

data.terraform_remote_state.vpc.vpc_id

Теперь это значение должно быть доступно через новый атрибут outputs:

data.terraform_remote_state.vpc.outputs.vpc_id

Оказалось просто. Необходимо убедиться, что VPN-соединение установлено. -_- Спасибо за просмотр!

Другие вопросы по тегам