微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在单个terraform资源中具有受控的循环

如何解决在单个terraform资源中具有受控的循环

我正在尝试根据用户输入创建子网,比如说4(var.number_of_private_subnets)。我希望它们位于不同的可用区(Az)中。我观察到terraform有时会利用所有可用的Az,有时却没有。因此,出于这个原因,我不想将其留给地形来选择AZ

data aws_availability_zones "azs"{
  state = "available"

}
resource "aws_subnet" "private_subnet" {
  count                = var.number_of_private_subnets
  cidr_block           = cidrsubnet(aws_vpc.main_vpc.cidr_block,8,count.index )
  vpc_id               = aws_vpc.main_vpc.id
  availability_zone    = data.aws_availability_zones.azs.names[count.index]


    tags   = {
      Name = "${var.env_name}-Privatesubnet-${count.index+1}"
    }
}

如果特定aws_region的可用az为3,则此代码失败,因为用户输入为4,它将尝试访问列表中的第4个元素。

无论如何,我是否可以创建4个子网来控制availability_zone,从而使子网跨越所有可用区域?

解决方法

您可以使用modulo operator%):

  availability_zone    = data.aws_availability_zones.azs.names[count.index % 3]

或更妙的是,

  availability_zone    = data.aws_availability_zones.azs.names[count.index % len(data.aws_availability_zones.azs.names)]

对于任何直接跳到答案的人,请务必阅读Martin Atkins关于该问题的评论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。