Можно ли обернуть удаленное состояние terraform в модуль и вывести переменные из состояния?

В моем коде terraform у меня часто есть несколько "terraform_remote_state" для получения удаленного состояния по разным путям (сеть, группы безопасности). Таким образом, чтобы избежать нескольких блоков, как это:

data "terraform_remote_state" "network" {
  backend = "artifactory"

  config {
    username = "${var.remote_state_config["user"]}"
    password = "${var.remote_state_config["password"]}"
    url      = "${var.remote_state_config["url"]}"
    repo     = "${var.remote_state_config["repo"]}"
    subpath  = "the_path"
  }
}

data "terraform_remote_state" "security_group" {
  ...
}

Я думал, что я определил бы модуль следующим образом:

variable remote_state_config {
  type = "map"
}

data "terraform_remote_state" "network" {
  backend = "artifactory"

  config {
    username = "${var.remote_state_config["user"]}"
    password = "${var.remote_state_config["password"]}"
    url      = "${var.remote_state_config["url"]}"
    repo     = "${var.remote_state_config["repo"]}"
    subpath  = "the_path"
  }
}

output "private_subnets" {
  value = "${data.terraform_remote_state.network.private_subnets}"
}

output "vpc_id" {
  value = "${data.terraform_remote_state.network.vpc_id}"

Чтобы позже использовать это так:

module "remote-network" {
  source              = "../../remote-state-network"
  remote_state_config = "${var.remote_state_conf}"
}
...
  vpc_id = "${module.remote-network.vpc_id}"
...

Но выполнение приводит к сообщениям об ошибках как это:

 module.remote-network.output.vpc_id: Resource 'data.terraform_remote_state.network' does not have attribute 'vpc_id' for variable 'data.terraform_remote_state.network.vpc_id'

Я использую терраформ 0.11.3

1 ответ

Это потому, что удаленное состояние (data "terraform_remote_state" "network"), о котором вы здесь говорите, не имеет output с vpc_idимя. Что, кстати, четко указано в сообщении об ошибке.

Соответствующий код Terraform для файла состояния, называемый network должен иметь следующее определение:

output "vpc_id" {
  value = "...."
}
Другие вопросы по тегам