DevOps и инфраструктура

Учебник Terraform для начинающих

23 урока · 6 разделов · бесплатно, без регистрации

Полный курс по Terraform — самому популярному инструменту инфраструктуры как код (IaC). От идеи «серверы как текст в git» до управления реальным облаком: язык HCL, ресурсы и граф зависимостей, переменные и выводы, центральная тема state, модули и переиспользование, провайдеры и боевой workflow с CI/CD.

Каждый урок — 700+ слов с ASCII-диаграммами и запускаемыми Python-врезками, которые показывают логику Terraform изнутри: как строится план, граф зависимостей и diff состояний. Курс одинаково применим к Terraform и открытому форку OpenTofu.

Курс «Terraform: инфраструктура как код» состоит из 6 разделов и 23 уроков: Что такое IaC и Terraform, HCL-синтаксис и ресурсы, Переменные, выводы и data-источники, State и его управление, Модули и переиспользование и Практика: провайдеры и workflow. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Что такое IaC и Terraform

    1. Что такое инфраструктура как код

      IaC: зачем описывать серверы и сети кодом вместо кликов в консоли. Декларативный и императивный подход, идемпотентность.

    2. Знакомство с Terraform и OpenTofu

      Что такое Terraform, кто его создал, лицензия BSL и форк OpenTofu (MPL 2.0). Провайдер-агностичность и место среди IaC-инструментов.

    3. Первый цикл: write, plan, apply, destroy

      Базовый рабочий цикл Terraform: init, plan, apply, destroy. Что делает каждая команда и почему plan нужно читать перед apply.

  2. 2 HCL-синтаксис и ресурсы

    1. Язык HCL: блоки, аргументы, выражения

      Синтаксис HCL: блоки и аргументы, типы данных, выражения и интерполяция ${}. Комментарии и базовая структура .tf-файла.

    2. Ресурсы: главный строительный блок

      Блок resource: тип, имя, аргументы. Жизненный цикл CRUD, атрибуты ресурса и ссылки между ресурсами через адреса.

    3. Граф зависимостей и порядок выполнения

      Как Terraform строит DAG ресурсов, неявные и явные зависимости (depends_on), параллелизм и почему граф ацикличен.

    4. count и for_each: множественные ресурсы

      Создание множества ресурсов: meta-аргументы count и for_each, их отличия, индексы и ключи, почему for_each стабильнее.

    5. Функции, выражения и условная логика

      Встроенные функции HCL, тернарный оператор, splat-выражения, циклы for, dynamic-блоки. Выразительные конструкции языка.

  3. 3 Переменные, выводы и data-источники

    1. Входные переменные: variable и валидация

      Блок variable: типы, default, описание, sensitive. Способы передачи значений и валидация через validation-блок.

    2. Передача значений: tfvars и приоритеты

      Способы задать значения переменных: -var, файлы tfvars и auto.tfvars, переменные окружения TF_VAR_. Порядок приоритетов.

    3. Выходные значения: output

      Блок output: возврат вычисленных атрибутов, sensitive-выводы, использование выводов между конфигурациями и в модулях.

    4. Data-источники: чтение существующего

      Блок data: read-only доступ к существующим ресурсам и внешним данным. Отличие от resource, фильтры, типичные сценарии.

  4. 4 State и его управление

    1. Что такое state и зачем он нужен

      Terraform state: карта между кодом и реальностью. Зачем хранить состояние, что внутри tfstate, desired vs current state.

    2. Удалённый бэкенд и блокировки

      Remote backend (S3, Terraform Cloud): где хранить state в команде. State locking против конфликтов, нативный S3 lock.

    3. Дрифт, refresh и обнаружение расхождений

      Configuration drift: когда реальность разошлась со state. Команды plan -refresh-only и apply -refresh-only, deprecated refresh.

    4. Операции над state: import, move, rm

      Команды terraform state и import: импорт существующих ресурсов, перемещение в state (moved-блок), удаление из state без destroy.

  5. 5 Модули и переиспользование

    1. Модули: переиспользование конфигурации

      Что такое модуль Terraform: контейнер ресурсов с входами и выходами. Root-модуль и child-модули, блок module, инкапсуляция.

    2. Источники и версионирование модулей

      Source модуля: локальный путь, Git, Terraform Registry. Версионирование через version и теги, public и private registry.

    3. Композиция: вложенные модули и среды

      Композиция модулей: слоистая архитектура, передача выходов между модулями, паттерн на окружения, запрет циклов.

  6. 6 Практика: провайдеры и workflow

    1. Провайдеры: настройка и версии

      Блок provider и required_providers: настройка аутентификации, регионов, алиасы провайдеров, фиксация версий и lock-файл.

    2. Организация проекта и окружения

      Структура Terraform-проекта: разделение на окружения, отдельные state, workspaces против папок, файлы main/variables/outputs.

    3. CI/CD и автоматизация Terraform

      Terraform в CI/CD: plan на pull request, apply при merge, защита прода, хранение плана, secrets и блокировки в пайплайне.

    4. Безопасность, зрелость и куда расти

      Безопасность Terraform: секреты, защита state, политики и сканеры (tfsec, OPA), модель зрелости и дальнейшие шаги.