Terraform 0.11 получает CIDR VPC из источника данных и передает в ресурс security_group_ingress_rule
Мое требование: мне нужно получить адрес CIDR для vpc-foo и vpc-bar и перейти к ресурсу "aws_security_group_rule" "ingress"
Я пробовал использовать следующий код:
- data "aws_vpcs" -> Получить идентификатор для данного VPC
- data "aws_vpc" -> составить список с идентификаторами VPC
- ресурс "aws_security_group_rule" "ingress" -> передавать VPC CIRD как вход
variable "list_of_vps"{
type = "list"
default = ["vpc-foo", "vpc-bar"]
}
variable "sg_name" {
default = "sg-test"
}
data "aws_vpcs" "get_vpc"{
count = "$length(var.list_of_vps)"
filter {
name = "tag:Name"
values = ["vpc-${element(var.list_of_vps, count.index)}"]
}
}
data "aws_vpc" "get_vpc_ids" {
count = "${length(data.aws_vpcs.get_vpc.ids)}"
id = "${tolist(data.aws_vpcs.prod.ids)[count.index]}"
}
resource "aws_security_group_rule" "ingress" {
count = "${length(var.list_of_vps)}"
type = "ingress"
from_port = 22
to_port = 22
protocol = "TCP"
cidr_blocks = ["${element(data.aws_vpc.get_vpc_ids.*.cidr_block, count.index)}"]
security_group_id = "${var.sg_name}
}
Кто-нибудь может помочь с этим, пожалуйста?
1 ответ
variable "list_of_vpcs" {
type = list(string)
default = ["vpc-foo", "vpc-bar"]
}
variable "sg_name" {
default = "sg-test"
}
data "aws_vpcs" "get_vpc" {
count = length(var.list_of_vpcs)
filter {
name = "tag:Name"
values = ["${element(var.list_of_vpcs, count.index)}"]
}
}
resource "aws_security_group_rule" "ingress" {
count = length(var.list_of_vpcs)
type = "ingress"
from_port = 22
to_port = 22
protocol = "TCP"
cidr_blocks = [element(data.aws_vpcs.get_vpc.*.cidr_block, count.index)]
security_group_id = var.sg_name
}
Переменную list_of_vps переименовали в list_of_vpcs, чтобы она была более наглядной. Удален ненужный блок данных «aws_vpc», поскольку вы можете получить блок CIDR непосредственно из источника данных aws_vpcs. Изменен аргумент cidr_blocks для ресурса aws_security_group_rule, чтобы использовать функцию элемента для доступа к блоку CIDR из источника данных data.aws_vpcs.get_vpc.