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_vpc
和create_igw
都是true
并且public_subnets
已经已定义,则 count
将是 1
(TRUEVAL
) 并且将创建一个 aws_internet_gateway.this
。
相反,如果CONDITION
不满足,count
将是0
(FALSEVAL
)并且不会创建aws_internet_gateway.this
。
一般来说,它是通用模式到conditionally create terraform 中的资源:
resource "type" "name" {
count = CONDITION : 1 ? 0
}
今天早些时候,我正在查看 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_vpc
和create_igw
都是true
并且public_subnets
已经已定义,则 count
将是 1
(TRUEVAL
) 并且将创建一个 aws_internet_gateway.this
。
相反,如果CONDITION
不满足,count
将是0
(FALSEVAL
)并且不会创建aws_internet_gateway.this
。
一般来说,它是通用模式到conditionally create terraform 中的资源:
resource "type" "name" {
count = CONDITION : 1 ? 0
}