Получение ошибки Terraform: «Ошибка: ожидалось, что cidr_block будет содержать допустимое значение, получено: с ошибкой: недопустимый адрес CIDR:»

#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».