0Pricing
DevOps Bootcamp · Урок

Ресурсы 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 — локальная установка не требуется.

Все уроки этого курса

  1. Запрос данных с помощью источников данных
  2. Провижионеры local и remote exec
  3. Ресурсы Null и триггеры
  4. Использование внешних данных и шаблонов
← Назад к DevOps Bootcamp