Существует два основных способа передачи результатов в Terraform.
Первый и самый старый способ заключается в использовании функции удаленного состояния для извлечения выходных данных в другом файле состояния.
Второй, более новый, подход заключается в использовании источников данных вашего провайдера , которые предоставляют вашему провайдеру только для чтения запрос на получение информации о ресурсе.
При этом вы будете использовать источники данных aws_vpc
и aws_subnet_ids
для получения информации о соответствующих идентификаторах подсети.
Пример может выглядеть примерно так, как указано в aws_subnet_ids
документах:
variable "vpc" {}
variable "ami" {}
data "aws_vpc" "selected" {
tags {
Name = "${var.vpc}"
}
}
data "aws_subnet_ids" "private" {
vpc_id = "${data.aws_vpc.selected.id}"
tags {
Tier = "Private"
}
}
resource "aws_instance" "app" {
count = "3"
ami = "${var.ami}"
instance_type = "t2.micro"
subnet_id = "${element(data.aws_subnet_ids.private.ids, count.index)}"
}
Это поместит один экземпляр EC2 в каждую из ваших 3 подсетей, помеченных Tier
= Private
в VPC значением тега Name
, предоставленным переменной vpc
.
Очевидно, что вы можете продвинуть это дальше, используя aws_ami
источник данных , чтобы также получить AMI ID, который вы хотите использовать, основываясь на некоторых критериях фильтрации. В противном случае это также поможет удалить некоторые из более магических переменных, которые могут быть в вашем коде Terraform.