10 реальных вопросов на собеседовании по Terraform (и экспертные ответы!) — DevOps-гид 2025
Я знаю эту фразу, от которой у инженеров стынет кровь:
“Завтра собеседование по Terraform. Готов?”
Сделай вдох.
Сегодня я делюсь 10 реальными вопросами по Terraform, которые действительно задают на собеседованиях — и рассказываю, как на них отвечать профессионально.
Но что важнее — я объясню их понятно, на практике и с примерами из жизни, чтобы ты не просто зазубрил ответы — а действительно их понял.
Поехали.
Вопрос 1: Что такое Terraform и почему это важно?
Terraform — это способ “разговаривать” с инфраструктурой с помощью кода, а не кликов.
Ты больше не кликаешь в AWS в 3 часа ночи, как в 2009.
Ты пишешь код:
“Мне нужна VPC, три подсети и база данных.”
Terraform отвечает:
“Принято. Создаю. Проверяю. И слежу, чтобы так и оставалось.”
Это не просто удобно — это контроль. Повторяемость. Это инфраструктура как код.
На 2025 год актуальная версия Terraform — 1.11, он активно развивается и широко используется. Это по-прежнему индустриальный стандарт для описания инфраструктуры.
Вопрос 2: Как Terraform общается с облаком?
Terraform работает с облаками через провайдеры.
Провайдеры — это как адаптеры, которые умеют общаться с API таких сервисов, как:
- AWS,
- Azure,
- Kubernetes,
- GitHub,
- и многие другие.
В коде ты указываешь 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?
- S3 с блокировкой (доступно с версии 1.11)
- HCP Terraform (ранее Terraform Cloud)
🎯 Совет: Никогда, ни при каких условиях не коммить 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-уведомления.
Когда модуль готов, его можно:
- Опубликовать в Terraform Registry
- Или хранить как OCI-артефакт (фича экспериментальная с 1.12)
Вопрос 7: Переменные и секреты — где грань?
Просто: переменные и секреты — не одно и то же.
Переменные — для значений, отличающихся между окружениями.
Секреты — никогда не хардкодь.
Так делать не надо:
password = "supersecret123"
Где хранить секреты?
- AWS Secrets Manager
- HashiCorp Vault
- Или пометь переменную как
sensitive
в HCP Terraform
Если всё же передаешь секрет как переменную:
variable "db_password" {
description = "Database password"
type = string
sensitive = true
}
С версии 1.10 можно использовать временные значения, чтобы исключить секреты из state-файлов.
Вопрос 8: Что делать, если terraform apply завершился с ошибкой?
Это случается — у джунов, у сеньоров… и у меня.
Порядок действий:
- Запусти
terraform state list
, чтобы увидеть, что уже создано. - Ресурс есть в облаке, но не в состоянии? Используй
terraform import
. - Не должно быть? Удали из состояния:
terraform state rm
. - Запусти
terraform plan
и проверь, что всё чисто.
Теперь Terraform поддерживает блоки moved
и removed
, так что можно рефакторить без ручного редактирования state. Красота.
Вопрос 9: Как разделять dev, stage и prod?
Есть 3 проверенных способа:
- Workspaces — просто, но сложно масштабировать
- Структура папок:
environments/dev
,stage
,prod
— золотой стандарт - Terragrunt — для мульти-аккаунтов или команд
🧠 Но главное правило, независимо от подхода:
🎯 Один backend → один state → одно окружение.
Никогда не храни dev и prod в одном state. Это как бензин и огонь в одном ящике.
Вопрос 10: Как внедрять безопасность на ранней стадии?
Безопасность начинается с terraform plan
, а не в конце проекта.
Используй Policy as Code. Инструменты:
- OPA (Open Policy Agent)
- Sentinel (от HashiCorp)
- Checkov (от Bridgecrew)
- Snyk IaC
🔒 Пример:
Пишешь правило — “Все 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-экспертов
Этот контент создан искусственным интеллектом?
Нет! Каждая статья — результат моей работы, наполненной страстью к Docker и десятилетиями опыта в IT. Я применяю ИИ для улучшения грамматики, чтобы обеспечить четкость технических деталей, однако все идеи, стратегии и рекомендации исключительно мои. Этот метод иногда может вызывать срабатывание детекторов ИИ, но можете быть уверены, что вся представленная информация и опыт — подлинно мои.