#amazon-web-services #terraform #terraform-provider-aws
Вопрос:
Пытаюсь создать простой набор модулей vpc/группы безопасности. Ресурс VPC находится здесь:
resource "aws_vpc" "main" {
cidr_block = var.cidr
}
Ресурсы группы безопасности находятся здесь:
resource "aws_security_group" "default" {
name = var.sg-name
vpc_id = aws_vpc.main.id
description = var.sg-description
}
resource "aws_security_group_rule" "ingress" {
count = length(var.allowed_ip)
type = "ingress"
from_port = element(var.allowed_ports, count.index)
to_port = element(var.allowed_ports, count.index)
protocol = var.protocol
cidr_blocks = var.allowed_ip
security_group_id = aws_security_group.default.id
}
resource "aws_security_group_rule" "egress" {
type = "egress"
from_port = 0
to_port = 65535
protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
security_group_id = aws_security_group.default.id
}
Модули находятся здесь:
module "vpc" {
source = "../"
cidr = "10.0.0.0/16"
}
module "security_group" {
source = "../"
sg-name = "Test"
sg-description = "Test Description"
protocol = "tcp"
allowed_ip = ["10.10.0.0/20", "10.20.0.0/20"]
allowed_ports = [22, 443]
}
Когда я запускаю план Терраформирования, я получаю эту ошибку:
Ошибка: ожидалось, что cidr_block будет содержать допустимое значение, получено: с ошибкой: недопустимый адрес CIDR:
на ..vpc.tf строка 2, в ресурсе «aws_vpc» «главная»: 2:
cidr_block = var.cidr
Я провел много исследований, но не могу до конца разобраться в этой проблеме. У кого-нибудь есть какие-нибудь идеи?
Комментарии:
1. Я думаю, что в вашей структуре каталогов есть что-то странное. Верны ли эти пути в ваших источниках?
Ответ №1:
Вы пытаетесь использовать переменную, но у вас нет variables.tf, вы указываете блок cidr на ресурсе, поэтому он должен выглядеть примерно так:
resource "aws_vpc" "main" {
cidr_block = module.vpc.cidr
}
В противном случае вы можете создать variables.tf где у вас есть что-то подобное (что обычно и делается, но мы также склонны передавать эти значения через файл с расширением «.tfvars»):
variable "cidr" {
cidr = "10.0.0.0/16"
}
Как только вы определили переменные, вы можете использовать формат «var.variable».