很多人刚学 Terraform,会问:
“我没写先创建 VPC 再创建子网,Terraform 怎么知道顺序?”
答案是:
它通过依赖图推导。
例如:
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "app" {
vpc_id = aws_vpc.main.id
cidr_block = "10.0.1.0/24"
}因为 aws_subnet.app 用了 aws_vpc.main.id,所以 Terraform 知道:
先建 VPC
再建子网这和脚本的最大差异就在这里。
脚本
= 你手写顺序
Terraform
= 你描述关系,系统推导顺序当然,极少数情况下也可以用:
depends_on = [...]但一般不应该滥用。 因为 Terraform 最推荐的是:
优先通过真实引用表达依赖。