Spec-Zone.ru › OpenTofu 1.12

Метааргумент depends_on

Используйте метааргумент depends_on для обработки скрытых зависимостей ресурсов или модулей, которые OpenTofu не может определить автоматически. Явно указывать зависимость нужно только в том случае, если ресурс или модуль зависит от поведения другого ресурса, но не обращается к его данным в своих аргументах.

Последствия для обработки и планирования​

Метааргумент depends_on указывает OpenTofu выполнить все действия над объектом-зависимостью (включая действия чтения) до выполнения действий над объектом, объявляющим зависимость. Если объектом-зависимостью является целый модуль, depends_on влияет на порядок обработки OpenTofu всех ресурсов и источников данных, связанных с этим модулем. Подробнее см. в разделах Зависимости ресурсов и Зависимости источников данных.

Используйте depends_on только в крайнем случае, поскольку это может привести к созданию OpenTofu более консервативных планов, в которых заменяется больше ресурсов, чем необходимо. Например, OpenTofu может считать больше значений неизвестными («будет известно после применения»), поскольку не уверен, какие изменения произойдут в вышестоящем объекте. Это особенно вероятно при использовании depends_on для модулей.

Вместо depends_on мы рекомендуем по возможности использовать ссылки на выражения для неявного указания зависимостей. Ссылки на выражения позволяют OpenTofu определить, от какого значения зависит ссылка, и избежать планирования изменений, если это конкретное значение не изменилось, даже если для других частей вышестоящего объекта запланированы изменения.

Использование​

Метааргумент depends_on можно использовать в блоках module и во всех блоках resource независимо от типа ресурса. Для него требуется список ссылок на другие ресурсы или дочерние модули в том же вызывающем модуле. Этот список не может содержать произвольные выражения, поскольку значение depends_on должно быть известно до того, как OpenTofu определит связи между ресурсами, а значит, и до безопасного вычисления выражений.

Мы рекомендуем всегда добавлять комментарий с объяснением необходимости использования depends_on. В следующем примере depends_on используется для обработки «скрытой» зависимости от aws_iam_instance_profile.example.

Блок кода
resource "aws_iam_role" "example" {
  name = "example"

  # assume_role_policy is omitted for brevity in this example. Refer to the
  # documentation for aws_iam_role for a complete example.
  assume_role_policy = "..."
}

resource "aws_iam_instance_profile" "example" {
  # Because this expression refers to the role, OpenTofu can infer
  # automatically that the role must be created first.
  role = aws_iam_role.example.name
}

resource "aws_iam_role_policy" "example" {
  name   = "example"
  role   = aws_iam_role.example.name
  policy = jsonencode({
    "Statement" = [{
      # This policy allows software running on the EC2 instance to
      # access the S3 API.
      "Action" = "s3:*",
      "Effect" = "Allow",
    }],
  })
}

resource "aws_instance" "example" {
  ami           = "ami-a1b2c3d4"
  instance_type = "t2.micro"

  # OpenTofu can infer from this that the instance profile must
  # be created before the EC2 instance.
  iam_instance_profile = aws_iam_instance_profile.example

  # However, if software running in this EC2 instance needs access
  # to the S3 API in order to boot properly, there is also a "hidden"
  # dependency on the aws_iam_role_policy that OpenTofu cannot
  # automatically infer, so it must be declared explicitly:
  depends_on = [
    aws_iam_role_policy.example
  ]
}

Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.12/language/meta-arguments/depends_on/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API