You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用变量时Terraform VPC的CIDR Block无效问题排查

Terraform AWS VPC Creation Error: Invalid CIDR Address When Using Variable

Problem Description

I'm trying to create an AWS VPC with the following Terraform code:

resource "aws_vpc" "vpc" {
  cidr_block = "{$var.network_cidr}"
  tags {
    Name = "ECS_VPC"
  }
}

The network_cidr variable is defined in variables.tf:

variable "network_cidr" {
  description = "IP addressing for the network"
}

And I've set its value in terraform.tfvars:

network_cidr = "10.0.0.0/16"

When I run terraform apply -var-file="terraform.tfvars", I get this error:

Error: aws_vpc.vpc: "cidr_block" must contain a valid CIDR, got error parsing: invalid CIDR address: {$var.network_cidr}

But if I hardcode cidr_block to "10.0.0.0/16" directly, it works fine. What's causing this issue?


Answer

这个问题的根源很简单——你在引用Terraform变量时用错了语法!

看你的VPC资源定义里的cidr_block值:

cidr_block = "{$var.network_cidr}"

Terraform中引用变量的正确语法是${var.variable_name}:美元符号$在前,紧接着左花括号{,而你把花括号写在了美元符号前面,变成了{$var.network_cidr}。这种错误写法会让Terraform无法识别这是一个变量引用,而是直接把字符串{$var.network_cidr}当作CIDR块来解析,这显然不是合法的CIDR格式,所以才会抛出"invalid CIDR address"的错误。

当你硬编码成"10.0.0.0/16"时,Terraform拿到的是标准的CIDR字符串,自然能正常创建VPC。

Fixes

  1. 使用传统变量引用语法:把变量引用改成正确的格式:
resource "aws_vpc" "vpc" {
  cidr_block = "${var.network_cidr}"
  tags {
    Name = "ECS_VPC"
  }
}
  1. 简化语法(Terraform 0.12+):如果你使用的是Terraform 0.12及以上版本,还可以省略花括号,直接引用变量:
resource "aws_vpc" "vpc" {
  cidr_block = var.network_cidr
  tags {
    Name = "ECS_VPC"
  }
}

修改完成后,重新执行terraform apply -var-file="terraform.tfvars",Terraform就能正确读取network_cidr变量的值,顺利创建VPC了。


内容的提问来源于stack exchange,提问作者Marc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:27