Я знаю эту фразу, от которой у инженеров стынет кровь:

“Завтра собеседование по Terraform. Готов?”

Сделай вдох.

Сегодня я делюсь 10 реальными вопросами по Terraform, которые действительно задают на собеседованиях — и рассказываю, как на них отвечать профессионально.

Но что важнее — я объясню их понятно, на практике и с примерами из жизни, чтобы ты не просто зазубрил ответы — а действительно их понял.

Поехали.


Вопрос 1: Что такое Terraform и почему это важно?

Terraform — это способ “разговаривать” с инфраструктурой с помощью кода, а не кликов.

Ты больше не кликаешь в AWS в 3 часа ночи, как в 2009.

Ты пишешь код:

“Мне нужна VPC, три подсети и база данных.”

Terraform отвечает:

“Принято. Создаю. Проверяю. И слежу, чтобы так и оставалось.”

Это не просто удобно — это контроль. Повторяемость. Это инфраструктура как код.

На 2025 год актуальная версия Terraform — 1.11, он активно развивается и широко используется. Это по-прежнему индустриальный стандарт для описания инфраструктуры.


Вопрос 2: Как Terraform общается с облаком?

Terraform работает с облаками через провайдеры.

Провайдеры — это как адаптеры, которые умеют общаться с API таких сервисов, как:

В коде ты указываешь required_providers, и при запуске terraform init нужные версии подтягиваются и проверяются по SHA-256 хешам.

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.97.0"
    }
  }
}

provider "aws" {
  region = "us-west-2"
}

Файл .terraform.lock.hcl фиксирует эти версии.

provider "registry.terraform.io/hashicorp/aws" {
  version     = "5.97.0"
  constraints = "~> 5.97.0"
  hashes = [
    "h1:aaa111...",
    "h1:bbb222...",
    "h1:ccc333..."
  ]
}

Думай об этом как о зависимостях пакетов — не закрепишь версии, будут сюрпризы. А сюрпризы в проде?

Ну… ты понял.


Вопрос 3: Что такое terraform.tfstate и почему это критично?

Это память Terraform.

Файл state хранит:

  • какие ресурсы существуют,
  • их ID,
  • их атрибуты,
  • и связи между ними.

Потеряешь — и Terraform забудет всё, что ты построил. И может попробовать пересоздать весь прод с нуля.

Где безопасно хранить state?

🎯 Совет: Никогда, ни при каких условиях не коммить state в git. Даже в приватный репозиторий. Даже “только один раз”.

Просто… не делай этого.


Вопрос 4: Что делают plan, apply, destroy и refresh?

Запомни: предпросмотр, выполнение, удаление, синхронизация.

  • terraform plan — покажет, что изменится
  • terraform apply — применит изменения
  • terraform destroy — удалит всё по конфигурации
  • terraform refresh — обновит состояние по факту

В будущей версии 1.12, plan включает refresh автоматически.

🎯 Совет: Всегда запускай terraform plan перед terraform apply.

Особенно в пятницу. Особенно вечером.

Особенно если это прод.


Вопрос 5: Что такое drift и как его отследить?

Drift — это когда реальная инфраструктура не совпадает с кодом.

Например, в коде написано t3.micro, а кто-то в AWS изменил вручную на t3.large.

Terraform не узнает об этом сам. Он увидит drift только после terraform plan.

Как находить drift:

  • В HCP Terraform есть встроенный детектор с уведомлениями в Slack или Teams через notifications.
  • Без HCP Terraform запускай terraform plan в CI хотя бы раз в день.

Drift — это не баг, а предупреждение. Кто-то вносил изменения вручную, вне Terraform.

И помни — Infrastructure as Code не любит человеческие руки.


Вопрос 6: Что такое модули и как не устроить из них бардак?

Модуль — это как функция: пишешь один раз — используешь много раз.

Например, модуль VPC: используешь его в dev, stage и prod, меняя только IP и имена — логика остается.

⚠️ Простота — ключ: один модуль — одна задача. Не пихай в него и VPC, и базу, и Slack-уведомления.

Когда модуль готов, его можно:


Вопрос 7: Переменные и секреты — где грань?

Просто: переменные и секреты — не одно и то же.

Переменные — для значений, отличающихся между окружениями.

Секретыникогда не хардкодь.

Так делать не надо:

password = "supersecret123"

Где хранить секреты?

Если всё же передаешь секрет как переменную:

variable "db_password" {
  description = "Database password"
  type        = string
  sensitive   = true
}

С версии 1.10 можно использовать временные значения, чтобы исключить секреты из state-файлов.


Вопрос 8: Что делать, если terraform apply завершился с ошибкой?

Это случается — у джунов, у сеньоров… и у меня.

Порядок действий:

  1. Запусти terraform state list, чтобы увидеть, что уже создано.
  2. Ресурс есть в облаке, но не в состоянии? Используй terraform import.
  3. Не должно быть? Удали из состояния: terraform state rm.
  4. Запусти terraform plan и проверь, что всё чисто.

Теперь Terraform поддерживает блоки moved и removed, так что можно рефакторить без ручного редактирования state. Красота.


Вопрос 9: Как разделять dev, stage и prod?

Есть 3 проверенных способа:

  1. Workspaces — просто, но сложно масштабировать
  2. Структура папок: environments/dev, stage, prod — золотой стандарт
  3. Terragrunt — для мульти-аккаунтов или команд

🧠 Но главное правило, независимо от подхода:

🎯 Один backend → один state → одно окружение.

Никогда не храни dev и prod в одном state. Это как бензин и огонь в одном ящике.


Вопрос 10: Как внедрять безопасность на ранней стадии?

Безопасность начинается с terraform plan, а не в конце проекта.

Используй Policy as Code. Инструменты:

🔒 Пример:

Пишешь правило — “Все S3-бакеты должны использовать KMS.” Проверка срабатывает при планировании. Нарушение — запуск блокируется.

Часть инструментов работает в CI, часть — напрямую с HCP Terraform.

Хочешь глубже? terraform test позволяет писать юнит-тесты для модулей прямо в CI.

Безопасность — часть процесса разработки, а не заплатка после.


Заключение

Вот и всё. 10 вопросов, 10 честных ответов — не просто для собеседования, а чтобы ты пришёл уверенным, подготовленным и опасно компетентным.

Спасибо за чтение! Не забудь глянуть видеоверсию — там ещё больше деталей.


Подпишись

Telegram | Блог
🎬 YouTube
🐦 Twitter
🎨 Instagram
🐘 Mastodon
🧵 Threads
🎸 Facebook
🧊 Bluesky
🎥 TikTok
💻 LinkedIn
📣 daily.dev Squad
🧩 LeetCode
🐈 GitHub


Комьюнити IT-экспертов

🚀 Telegram | Чат
👾 Discord


Этот контент создан искусственным интеллектом?

Нет! Каждая статья — результат моей работы, наполненной страстью к Docker и десятилетиями опыта в IT. Я применяю ИИ для улучшения грамматики, чтобы обеспечить четкость технических деталей, однако все идеи, стратегии и рекомендации исключительно мои. Этот метод иногда может вызывать срабатывание детекторов ИИ, но можете быть уверены, что вся представленная информация и опыт — подлинно мои.

Владимир Михалев
Я — Владимир Михалев, Капитан Docker, но друзья называют меня Вальдемарыч.

DevOps комьюнити

Привет! 👋 Если у тебя есть вопросы по установке или настройке, то задайте их мне и другим IT-экспертам нашего сообщества: