how/workflow
Откуда Terraform узнаёт, в каком порядке создавать ресурсы. Граф из implicit-refs, параллельные «слои», и почему destroy идёт ровно в обратном направлении.
Когда ты пишешь:
resource "aws_s3_bucket" "demo" { bucket = "linuxlab-${random_id.suffix.hex}"}
aws_s3_bucket.demo зависит от
random_id.suffix. Не потому что ты так сказал, а потому что в
имени бакета лежит ссылка на атрибут другого ресурса. Это и есть
implicit reference.Terraform читает все такие ссылки, строит из них направленный ациклический граф (DAG) и сам решает, что создавать сначала, что потом, а что - параллельно. Жми ▶ - посмотрим, как это выглядит на пяти ресурсах.
Учебный пример: bucket, который зависит от random_id (для уникального
имени), IAM-роль, IAM-политика (привязана к роли), attachment
(требует и роль, и политику).
В HCL зависимости не записаны явно. Terraform увидит их сам в момент следующей команды.
итого
Что важно запомнить:
A.B.C в
значениях ресурса X автоматически создаёт ребро A → X.-parallelism=N). Поэтому
большие конфиги быстрее, чем кажется.destroy граф разворачивается: листья (никто от них не зависит)
удаляются первыми, корни (от которых зависят другие) - последними.Error: Cycle. Terraform отказывается работать,
пока ты её не разрулишь (обычно через рефакторинг или null_resource
с break-the-cycle логикой). См. tf-dag-internals.Дальше: tf-module-io-flow про то, как граф пересекает границы модулей.