Поведение ресурсов
Блок resource объявляет, что вы хотите, чтобы определённый объект инфраструктуры существовал с заданными параметрами. Если вы впервые создаёте конфигурацию, определённые в ней ресурсы будут существовать только в конфигурации и пока не будут представлять реальные объекты инфраструктуры на целевой платформе.
Применение конфигурации OpenTofu — это процесс создания, обновления и уничтожения реальных объектов инфраструктуры, чтобы их параметры соответствовали конфигурации.
Как OpenTofu применяет конфигурацию
Когда OpenTofu создаёт новый объект инфраструктуры, представленный блоком resource, идентификатор этого реального объекта сохраняется в состоянии OpenTofu, что позволяет обновлять и уничтожать его в ответ на будущие изменения. Для блоков ресурсов, которым уже соответствует объект инфраструктуры в состоянии, OpenTofu сравнивает фактическую конфигурацию объекта с аргументами, заданными в конфигурации, и при необходимости обновляет объект, чтобы он соответствовал конфигурации.
В итоге применение конфигурации OpenTofu позволяет:
- Создавать ресурсы, существующие в конфигурации, но не связанные с реальным объектом инфраструктуры в состоянии.
- Уничтожать ресурсы, существующие в состоянии, но отсутствующие в конфигурации.
-
Забывать ресурсы, существующие в состоянии, но отсутствующие в конфигурации и упомянутые в блоке
removedв конфигурации. - Обновлять на месте ресурсы, аргументы которых изменились.
- Уничтожать и создавать заново ресурсы, аргументы которых изменились, но которые нельзя обновить на месте из-за ограничений удалённого API.
Это общее поведение применяется ко всем ресурсам независимо от их типа. Значение операций создания, обновления или уничтожения ресурса различается для разных типов ресурсов, но этот стандартный набор глаголов используется для всех них.
Метааргументы в блоках resource, описанные в разделах ниже, позволяют настраивать некоторые аспекты стандартного поведения ресурсов для каждого ресурса отдельно.
Доступ к атрибутам ресурсов
Выражения в модуле OpenTofu могут получать сведения о ресурсах в том же модуле; эти сведения можно использовать для настройки других ресурсов. Используйте синтаксис <RESOURCE TYPE>.<NAME>.<ATTRIBUTE>, чтобы ссылаться на атрибут ресурса в выражении.
Помимо аргументов, указанных в конфигурации, ресурсы часто предоставляют атрибуты только для чтения со сведениями, полученными из удалённого API. К ним часто относятся данные, которые невозможно узнать до создания ресурса, например уникальный случайный идентификатор ресурса.
Многие провайдеры также включают источники данных — особый тип ресурсов, используемый только для поиска сведений.
Список атрибутов, предоставляемых типом ресурса или источника данных, см. в его документации; обычно он приводится вторым списком после списка настраиваемых аргументов.
Дополнительные сведения о ссылках на атрибуты ресурсов в выражениях см. в разделе Выражения: ссылки на атрибуты ресурсов.
Зависимости ресурсов
Большинство ресурсов в конфигурации не связаны друг с другом, поэтому OpenTofu может параллельно вносить изменения в несколько независимых ресурсов.
Однако некоторые ресурсы необходимо обрабатывать после других определённых ресурсов; иногда это обусловлено принципом работы ресурса, а иногда конфигурации ресурса просто нужны сведения, созданные другим ресурсом.
Большинство зависимостей ресурсов обрабатываются автоматически. OpenTofu анализирует все выражения в блоке resource, чтобы найти ссылки на другие объекты, и рассматривает эти ссылки как неявные требования к порядку при создании, обновлении или уничтожении ресурсов. Поскольку большинство ресурсов, поведение которых зависит от других ресурсов, также ссылаются на данные этих ресурсов, обычно нет необходимости вручную указывать зависимости между ресурсами.
Однако некоторые зависимости невозможно распознать в конфигурации автоматически. Например, если OpenTofu должен управлять политиками контроля доступа и выполнять действия, для которых необходимо наличие этих политик, возникает скрытая зависимость между политикой доступа и ресурсом, создание которого от неё зависит. В таких редких случаях метааргумент depends_on позволяет явно указать зависимость.
Также можно использовать метааргумент replace_triggered_by, чтобы добавить зависимости между ресурсами, которые в остальном независимы. Он заставляет OpenTofu заменить родительский ресурс при изменении связанного ресурса или его атрибута.
Локальные ресурсы
Большинство типов ресурсов соответствуют типам объектов инфраструктуры, которыми управляют через удалённый сетевой API. Однако существуют специализированные типы ресурсов, работающие только в самой OpenTofu: они вычисляют результаты и сохраняют их в состоянии для дальнейшего использования.
Например, существуют локальные типы ресурсов для генерации закрытых ключей, выпуска самоподписанных сертификатов TLS и даже генерации случайных идентификаторов. Хотя такие типы ресурсов часто выполняют менее значимую функцию, чем типы, управляющие «реальными» объектами инфраструктуры, они могут служить связующим звеном для объединения других ресурсов.
Локальные ресурсы ведут себя так же, как и все остальные, но данные об их результатах существуют только в состоянии OpenTofu. «Уничтожение» такого ресурса означает лишь его удаление из состояния с отбрасыванием данных.
Copyright (c) The OpenTofu Authors
Copyright (c) 2014 HashiCorp, Inc.
Mozilla Public License, version 2.0
https://opentofu.org/docs/v1.10/language/resources/behavior/