Обычно нам не нужно использовать depends_on
, потому что в большинстве случаев зависимости между объектами подразумеваются потоком данных между ними. В этом случае это станет реальностью, когда вы напишите блок route
, описывающий маршрут к шлюзу NAT:
resource "aws_route_table" "route_table_ics_ec1_dev_private" {
vpc_id = module.vpc_dev.vpc_id
count = 3
route {
cidr_block = "0.0.0.0/0"
nat_gateway_id = aws_nat_gateway.nat_gateway_ec1_dev[count.index].id
}
}
Поскольку конфигурация для этого маршрута зависит от идентификатора шлюза NAT, Terraform может убедитесь, что он должен подождать, пока не будет создан шлюз NAT, прежде чем он начнет создавать таблицу маршрутов.
depends_on
- для более сложных ситуаций, когда поток данных между объектами недостаточен, поскольку конечный результат зависит о некоторых побочных эффектах, которые подразумеваются удаленным API, а не явными в Terraform. Одним из примеров такой ситуации является то, что объект не может быть использован до тех пор, пока к нему не будет применена политика доступа на отдельном шаге, например, с корзиной S3 и связанной политикой корзины:
resource "aws_s3_bucket" "example" {
# ...
}
resource "aws_s3_bucket_policy" "example" {
bucket = aws_s3_bucket.example.bucket
policy = # ...
}
In выше, Terraform может понять, что он должен создать корзину перед созданием политики, но если что-то еще в конфигурации также использует эту корзину S3, тогда может потребоваться объявить явную зависимость от политики, чтобы убедиться, что перед выполнением этой операции будут действовать необходимые правила доступа:
# Service cannot access the data from the S3 bucket
# until the policy has been activated.
depends_on = [aws_s3_bucket_policy.example]
Ни count
, ни for_each
не имеют никакого значения для depends_on
: зависимости между ресурсами в Terraform всегда для всего resource
и data
блоков, а не для отдельных экземпляров, созданных из них. Следовательно, в вашем случае, если бы требовалась явная зависимость от шлюза NAT (а это не так), вы бы записали ее одинаково, независимо от того, что count
установлено для этого ресурса:
# Not actually needed, but included for the sake of example.
depends_on = [aws_nat_gateway.nat_gateway_ec1_dev]