Можно ли обернуть удаленное состояние 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 = "...."
}