【问题标题】:Inappropriate value for the attribute cidr_block string is required属性 cidr_block 字符串的值不合适是必需的
【发布时间】:2021-02-17 16:23:21
【问题描述】:

嗨,我的 terraform 代码在这里

ma​​in.tf

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 3.0"
    }
  }
}
# Configure the AWS Provider
provider "aws" {
  region = var.region
}

# DATA

data "aws_availability_zones" "available" {}

data "template_file" "public_cidrsubnet" {
  count    = var.subnet_count
  template = "$${cidrsubnet(vpc_cidr,8,current_count)}"
  vars = {
    vpc_cidr      = var.network_address_space
    current_count = count.index
  }
}

resource "aws_vpc" "tf-aws-vn" {
  cidr_block = var.network_address_space
  tags       = local.common_tags
  #name       = var.name
}
resource "aws_subnet" "tf-aws-sn" {
  count             = length(data.aws_availability_zones.available.names)
  vpc_id            = aws_vpc.tf-aws-vn.id
  cidr_block        = [data.template_file.public_cidrsubnet[*].rendered]
  availability_zone = slice(data.aws_availability_zones.available.names, 0, var.subnet_count)
  tags              = local.common_tags
}

variables.tf

variable "region" {
  default = "us-east-1"
}
variable network_address_space {}

variable name {
  type = string
}
variable "subnet_count" {
  type = number
}

最后! terraform.tfvars

network_address_space = "10.0.0.0/16"
subnet_count          = 2

我收到如下错误:

Error: Incorrect attribute value type

  on main.tf line 36, in resource "aws_subnet" "tf-aws-sn":
  36:   cidr_block        = [data.template_file.public_cidrsubnet[*].rendered]

Inappropriate value for attribute "cidr_block": string required.

有什么问题?

我想为我提供的任何地址范围创建 n 个子网

我的 terraform 版本是 0.13.5

【问题讨论】:

    标签: terraform-provider-aws terraform0.12+


    【解决方案1】:

    您正在将一个数组传递给 cidr_block,这会导致给定的错误。您需要将字符串传递给 cidr 块。

    cidr_block = data.template_file.public_cidrsubnet[count.index].rendered
    

    您还需要将 * 更改为实际计数。否则你会得到一个错误,抱怨它是一个有 2 个元素的元组。 使用您的代码, data.template_file.public_cidrsubnet[*].rendered 的结果是

    cidr_output = [
      "10.0.0.0/24",
      "10.0.1.0/24",
    ]
    

    那么您将面临的下一个问题是计数本身。您正在使用可用区的总数作为计数,但您希望计数为子网计数。您在 public_cidrsubnet 模板中只创建了 2 个子网,因此您无法在每个可用区中创建子网。 然后,您还需要将 count.index 传递给可用区参数的切片。

    应该工作的正确 aws_subnet 资源

    resource "aws_subnet" "tf-aws-sn" {
      count             = var.subnet_count
      vpc_id            = aws_vpc.tf-aws-vn.id
      cidr_block        = data.template_file.public_cidrsubnet[count.index].rendered
      availability_zone = slice(data.aws_availability_zones.available.names, 0, var.subnet_count)[count.index]
    

    }

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2021-06-18
      • 2021-06-23
      • 1970-01-01
      • 2021-11-27
      • 2019-12-28
      • 1970-01-01
      • 2021-03-26
      • 2020-04-09
      相关资源
      最近更新 更多