资源定义中的 Terraform 内部变量

时间:2021-07-15 08:55:38

标签: amazon-web-services terraform terraform-provider-aws

我有这个问题,我不知道如何表述。所以让我们举一个例子。我有以下资源定义,用于基于输入参数变量的子网:

resource "aws_subnet" "monitoring_subnetwork" {
  count = length(var.monitoring_subnets)

  vpc_id     = module.vpc.vpc_id
  cidr_block = var.monitoring_subnets[count.index]

  availability_zone= "${data.aws_availability_zones.available.names[count.index % length(data.aws_availability_zones.available.names)]}"

  tags = {
    Name = "Monitoring private-1${replace(
      data.aws_availability_zones.available.names[count.index % length(data.aws_availability_zones.available.names)], 
      data.aws_availability_zones.available.id, "")}"
  }
}

我想简化这段代码,使其更具可读性和可维护性。

我使用 count.index 根据索引 % len_of_array 使用循环获取可用区,并且此 mod 的结果计算两次(在其他情况下甚至三次)。

我想知道是否可以在资源中定义一个内部变量,如下所示:

zone_index = count.index % length(data.aws_availability_zones.available.names)

并在重复此操作的代码部分重复使用此索引。

有什么想法吗?此外,任何其他简化此配置的建议将不胜感激:)

1 个答案:

答案 0 :(得分:1)

遗憾的是您不能这样做。 terraform 中没有自定义函数。但是已经有一个 github 问题,所以也许将来会添加:

所以你必须不断重复那个计算。

相关问题