AWS 模块中的 Terraform 条件语句

Terraform Conditionals in AWS Module

今天早些时候,我正在查看 https://github.com/terraform-aws-modules/terraform-aws-vpc/blob/v2.77.0/main.tf 以深入了解 AWS 的 VPC 模块如何在幕后工作。

我苦苦挣扎的一件事是计数条件,例如 aws_internet_gateway 资源中的那个。

有人可以解释和翻译此资源中定义的计数实际上在做什么吗?我现在很困惑。

resource "aws_internet_gateway" "this" {
  count = var.create_vpc && var.create_igw && length(var.public_subnets) > 0 ? 1 : 0

  vpc_id = local.vpc_id

  tags = merge(
    {
      "Name" = format("%s", var.name)
    },
    var.tags,
    var.igw_tags,
  )
}

它使用 ternary operation 的一般形式为:

CONDITION ? TRUEVAL : FALSEVAL

在模块中,

CONDITION is var.create_vpc && var.create_igw && length(var.public_subnets) > 0

TRUEVAL is 1

FALSEVAL is 0

翻译如下:如果create_vpccreate_igw都是true并且public_subnets已经已定义,则 count 将是 1 (TRUEVAL) 并且将创建一个 aws_internet_gateway.this

相反,如果CONDITION不满足,count将是0FALSEVAL)并且不会创建aws_internet_gateway.this

一般来说,它是通用模式conditionally create terraform 中的资源:

resource "type" "name" {

  count = CONDITION : 1 ? 0

}