Ресурсы Null и триггеры
Изучите `null_resource` для выполнения произвольных команд, не соответствующих реальному облачному ресурсу, и используйте триггеры для управления моментом запуска провижионеров.
«Ресурсы Null и триггеры» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 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) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Ресурсы Null и триггеры»?
Изучите `null_resource` для выполнения произвольных команд, не соответствующих реальному облачному ресурсу, и используйте триггеры для управления моментом запуска провижионеров. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Ресурсы Null и триггеры»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Запрос данных с помощью источников данных
- Провижионеры local и remote exec
- Ресурсы Null и триггеры
- Использование внешних данных и шаблонов