Поведение ресурсов
Блок 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.9/language/resources/behavior/