Ресурсы Null и триггеры
Изучите `null_resource` для выполнения произвольных команд, не соответствующих реальному облачному ресурсу, и используйте триггеры для управления моментом запуска провижионеров.
«Ресурсы Null и триггеры» — бесплатный урок Terraform Infrastructure as Code на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Terraform Infrastructure as Code, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Terraform Infrastructure as Code содержит 4 уроков всего.
Что такое null_resource?
null_resource в Terraform — это специальный тип ресурса, который напрямую не создаёт и не управляет объектами инфраструктуры у Вашего облачного провайдера.
Вместо этого он служит заполнителем для выполнения произвольных команд или сценариев и часто используется для задач, выходящих за рамки обычной подготовки ресурсов.
Зачем использовать null_resource?
Возможно, Вы задаётесь вопросом, зачем нужен ресурс «null». Он чрезвычайно полезен для следующих задач:
- Запуск локальных сценариев: выполнение команд на компьютере, где запущен Terraform (например, подготовка файлов конфигурации).
- Действия после развёртывания: выполнение задач настройки или очистки после подготовки настоящих ресурсов.
- Взаимодействие с внешними API: использование внешних API, когда для определённой службы не существует специального провайдера Terraform.
- Пользовательская логика: организация пользовательских шагов, не связанных с конкретным облачным ресурсом.
Базовая структура null_resource
Блок null_resource выглядит как любой другой ресурс Terraform. Сам по себе, без провижионеров или триггеров, он просто создаёт объект «null» в состоянии Terraform и больше ничего не делает.
Обычно его используют вместе с провижионерами для выполнения команд и с триггерами для управления моментом запуска этих команд.
Простой пример null_resource
Вот минимальный пример null_resource. Если выполнить для него terraform apply, он будет создан в состоянии, но никаких внешних действий не произойдёт.
Это всего лишь заполнитель, готовый к дополнению действиями.
resource "null_resource" "my_placeholder" {
# This resource exists in state but performs no action.
# It's ready to attach provisioners or triggers.
}Провижионеры с null_resource
Настоящая сила null_resource раскрывается при объединении его с провижионерами.
Провижионеры позволяют выполнять сценарии или команды на компьютере, где запущен Terraform (local-exec), либо непосредственно на удалённом ресурсе (remote-exec, хотя с null_resource это используется реже).
Благодаря этому null_resource может выступать исполнителем действий.
Знакомство с триггерами
triggers — это карта произвольных пар «ключ — значение», определённых внутри блока null_resource.
Их назначение — сообщить Terraform: «Если изменится любое значение в этой карте, этот null_resource и его провижионеры необходимо запустить повторно».
Это крайне важно, чтобы null_resource реагировал на изменения в инфраструктуре.
Как работают триггеры
Когда значение в карте triggers изменяется, Terraform обнаруживает изменение null_resource.
Во время выполнения terraform apply Terraform:
- Уничтожит существующий
null_resource(если он существует). - Создаст заново
null_resource. - Повторно запустит все связанные провижионеры.
Этот механизм гарантирует, что пользовательские действия выполняются только при изменении соответствующих зависимостей.
Пример: триггеры и local-exec
Здесь мы используем null_resource, чтобы имитировать обновление файла конфигурации на основе простой переменной. Провижионер local-exec выполняет команду, а triggers гарантирует её повторный запуск при изменении var.app_version.
variable "app_version" {
description = "The version of the application."
type = string
default = "1.0.0"
}
resource "null_resource" "update_config_file" {
triggers = {
version_change = var.app_version
}
provisioner "local-exec" {
command = "echo 'Config updated for version: ${self.triggers.version_change}' > app_config.txt"
}
}Рекомендации и альтернативы
Несмотря на широкие возможности, используйте null_resource обдуманно:
- Предпочитайте провайдеров: если для задачи существует специальный провайдер или ресурс Terraform, используйте его.
- Обеспечивайте идемпотентность: убедитесь, что сценарии, запускаемые провижионерами, можно безопасно выполнять многократно без побочных эффектов.
- Избегайте управления состоянием: не пытайтесь управлять внешним состоянием с помощью
null_resource; для этого предназначены серверные хранилища удалённого состояния. - Рассмотрите источник данных
external: для сложной внешней логики, возвращающей структурированные данные, источник данныхexternalможет быть более удобной альтернативой.
Быстрая проверка: ресурсы Null
Вы узнали о null_resource и triggers. Проверьте, насколько хорошо Вы поняли материал.
Итоги: Null и триггеры
В этом уроке Вы узнали о многофункциональности null_resource Terraform — мощного инструмента для выполнения пользовательских команд и сценариев, которые не соответствуют конкретным облачным ресурсам.
Вы также изучили triggers — механизм внутри null_resource, позволяющий определять зависимости и гарантировать повторное выполнение провижионеров при изменении этих зависимостей. Это позволяет создавать динамическую и реактивную пользовательскую автоматизацию в рамках инфраструктуры как кода.
Часто задаваемые вопросы
Урок «Ресурсы Null и триггеры» бесплатный?
Да — полный текст урока «Ресурсы Null и триггеры» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Terraform Infrastructure as Code, подпишись на CoddyKit PRO. Курс Terraform Infrastructure as Code содержит 4 уроков всего.
Чему я научусь в уроке «Ресурсы Null и триггеры»?
Изучите `null_resource` для выполнения произвольных команд, не соответствующих реальному облачному ресурсу, и используйте триггеры для управления моментом запуска провижионеров. Ты практикуешь Terraform Infrastructure as Code с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Terraform Infrastructure as Code?
Предыдущий опыт не требуется. Terraform Infrastructure as Code на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ресурсы Null и триггеры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Terraform Infrastructure as Code?
Да. Каждый урок Terraform Infrastructure as Code включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Запрос данных с помощью источников данных
- Провижионеры local и remote exec
- Ресурсы Null и триггеры
- Использование внешних данных и шаблонов