
Практическое руководство по использованию Terraform для автоматизации облачной инфраструктуры. Книга построена по принципу сборника рецептов, где каждая задача рассматривается с объяснением «как» и «почему». Она подходит как для начинающих, помогая им освоить основы Terraform и концепции «инфраструктура как код», так и для опытных инженеров, предлагая продвинутые техники для работы с многооблачными средами, контейнерами и обеспечения защиты данных. Основные темы: модули и провайдеры Terraform, управление контейнерами, централизованное управление через HCP Terraform и Terraform Enterprise, интеграция с CI/CD и реальные примеры развертывания на AWS, Kubernetes и других платформах.
Для начинающих и опытных DevOps-инженеров и архитекторов
Чтобы укротить хаос современной инфраструктуры, нужен современный и кардинальный подход. Terraform даёт его. Эта книга — лучшее практическое руководство, которое превращает мощь инструмента в рабочие решения для реальных инженерных задач.
Крис Девер, технический специалист компании EditShare
Эта книга — отличный настольный помощник, который поможет вам справиться с некоторыми сложными задачами.
Адам Макпартлан, ведущий консультант компании Hippo Digital
Инфраструктура как код
Облачные сервисы и SaaS-решения пронизывают ИТ-инфраструктуру каждой компании, требуя перехода от ручного управления услугами к более структурированному подходу, основанному на их описании в виде кода. Terraform предоставляет инструменты для управления жизненным циклом ИТ-инфраструктуры для тысяч различных облачных провайдеров и SaaS-платформ.
Определяя инфраструктуру как код с помощью Terraform, вы получаете возможность безопасно и предсказуемо вносить изменения, организовывать модули и создавать готовые компоненты для повторного использования. Каждый рецепт из книги решает конкретную практическую задачу, подробно объясняя не только последовательность действий, но и их обоснование.
Если вы только начинаете работать с Terraform и концепцией «инфраструктура как код», эта книга поможет вам заложить прочную основу для дальнейшего развития. Опытный пользователь сможет структурировать знания и перейти к управлению более сложной, мультиоблачной инфраструктурой, распределенной между несколькими провайдерами.
Рассматриваются следующие вопросы:
- Стратегии использования Terraform с системами контроля версий (например, Git)
- Шаблоны валидации и тестирования инфраструктуры для проверки изменений
- Методы импорта уже существующих ресурсов из облачных консолей
- Преобразование сервисов в повторно используемые компоненты (готовые модули)
- Интеграция Terraform с другими инструментами HashiCorp (Vault, Consul)
- Развертывание контейнеризированных рабочих нагрузок в Kubernetes

Долезал Тейлор (Taylor Dolezal) руководит отделом экосистемы в Cloud Native Computing Foundation (CNCF), курируя направления развития и партнерских отношений в сфере облачных вычислений.
В своей карьере Тейлор всегда выступал связующим звеном между сложными системами и человеческим восприятием, будь то обеспечение надежности технических объектов, разработка программного обеспечения или совместная работа над инновационными технологическими решениями. Когда Тейлор не занят работой с облачными технологиями, он исследует тропы в окрестностях Лос-Анджелеса, погружается в хорошую книгу и оптимизирует свой процесс подачи каламбуров для максимальной окупаемости инвестиций.

Сатирли Керим (Kerim Satirli) занимает позицию ведущего адвоката разработчиков в HashiCorp, где специализируется на обучении операторов и разработчиков по созданию надежной инфраструктуры и эффективным методам оркестрации.
Прежде чем присоединиться к HashiCorp, Керим занимался промышленным IoT (Industrial Internet of Things — промышленный Интернет вещей) для аэропорта Амстердама, а также помогал музеям в оцифровке и размещении в Интернете своих коллекций. В свободное время Керим наслаждается общением с дочерью, увлекается аэрофотосъемкой и печет торты.
Книгу “Terraform. Сборник рецептов” можно купить в нашем интенет-магазине.
Предисловие…………………………………………………………………………………………….. 9
Для кого предназначена эта книга?…………………………………………………………………………………………… 9
Почему была написана эта книга?…………………………………………………………………………………………… 10
Краткий обзор глав……………………………………………………………………………………………………………………. 10
О чем эта книга…………………………………………………………………………………………………………………………… 11
Условные обозначения и соглашения……………………………………………………………………………………… 11
Примеры применения кода……………………………………………………………………………………………………….. 11
Платформа онлайн-обучения O’Reilly……………………………………………………………………………………… 12
Контактная информация…………………………………………………………………………………………………………… 13
Благодарности…………………………………………………………………………………………………………………………… 13
Глава 1. Подготовка к работе с Terraform……………………………………………… 15
1.1. В каких случаях используется Terraform……………………………………………………………………….. 16
1.2. В каких случаях не используется Terraform…………………………………………………………………… 17
1.3. Установка и настройка Terraform…………………………………………………………………………………… 18
Установка Terraform в Linux……………………………………………………………………………………………. 18
Установка Terraform в macOS…………………………………………………………………………………………. 18
Установка Terraform в Windows………………………………………………………………………………………. 19
Установка OpenTofu…………………………………………………………………………………………………………. 19
1.4. Провайдеры Terraform……………………………………………………………………………………………………… 21
1.5. Модули Terraform…………………………………………………………………………………………………………….. 23
1.6. Изменение состояния Terraform с помощью консоли terraform……………………………………. 24
1.7. Применение облачной платформы HashiCorp Terraform……………………………………………… 25
1.8. Совместное использование Terraform и Visual Studio Code………………………………………….. 27
1.9. Управление ограничениями версий провайдеров Terraform………………………………………… 29
1.10. Алгоритм развертывания репозиториев кода с контролем версий Terraform…………….. 31
1.11. Развертывание контейнера Docker с помощью Terraform…………………………………………….. 32
1.12. Обновление Terraform: от 0.x до 1.x и выше…………………………………………………………………… 33
1.13. Использование переменных Terraform……………………………………………………………………………. 35
1.14. Консистентность кода для согласованного пользовательского опыта……………………….. 36
Глава 2. Основы Terraform……………………………………………………………………. 39
2.1. Форматирование и проверка кода Terraform…………………………………………………………………. 39
2.2. Быстрое тестирование с помощью консоли Terraform………………………………………………….. 40
2.3. Повышение качества кода с помощью TFLint………………………………………………………………… 41
2.4. Улучшение качества кода с помощью TFSec…………………………………………………………………. 42
2.5. Проверка кода с помощью предусловий и постусловий……………………………………………….. 43
2.6. Проверка кода с помощью Open Policy Agent…………………………………………………………………. 45
2.7. Документирование кода с помощью terraform-docs………………………………………………………. 47
2.8. Автоматизация проверки кода с помощью GitHub Actions…………………………………………… 49
2.9. Обновление версии провайдера с помощью Dependabot……………………………………………… 50
2.10. Использование GitHub Codespaces и DevContainers……………………………………………………… 52
2.11. Ограничение Blast Radius с помощью Terraform……………………………………………………………. 56
Глава 3. Шаблоны синтаксиса Terraform………………………………………………. 60
3.1. Очистка пользовательских данных с помощью trimspace…………………………………………….. 60
3.2. Удаление префиксов и суффиксов…………………………………………………………………………………… 61
3.3. Работа с регулярными выражениями……………………………………………………………………………… 62
3.4. Расширенные операции со строками………………………………………………………………………………. 64
3.5. Обработка строк с учетом регистра с помощью методов title, upper и lower………………. 65
3.6. Сортировка списка по алфавиту……………………………………………………………………………………… 67
3.7. Создание подсетей на основе CIDR-блока…………………………………………………………………….. 69
3.8. Взаимодействие с локальной файловой системой…………………………………………………………. 71
3.9. Рендеринг шаблонов…………………………………………………………………………………………………………. 73
3.10. Валидация входных строк……………………………………………………………………………………………….. 74
3.11. Эффективное извлечение данных с помощью can и try…………………………………………………. 76
3.12. Последовательная обработка входных данных……………………………………………………………. 79
3.13. Создание информативных сообщений об ошибках при некорректном вводе…………….. 82
3.14. Использование данных в различных состояниях Terraform…………………………………………. 85
Глава 4. Модули и провайдеры Terraform……………………………………………… 88
4.1. Использование публичных модулей для создания эластичного кластера EKS…………. 88
4.2. Линтинг Terraform с помощью GitHub Actions……………………………………………………………….. 92
4.3. Аутентификация у провайдеров Terraform…………………………………………………………………….. 95
4.4. Аутентификация приватных модулей…………………………………………………………………………….. 97
4.5. Создание модуля Terraform……………………………………………………………………………………………… 99
4.6. Управление секретами GitHub с помощью Terraform…………………………………………………. 102
4.7. Управление репозиториями GitHub с помощью Terraform…………………………………………. 104
4.8. Динамическая конфигурация с Consul KV……………………………………………………………………. 106
4.9. Настройка провайдера с оповещением о работоспособности служб……………………….. 109
4.10. Использование состояния Terraform с помощью провайдеров………………………………….. 112
4.11. Использование нескольких одинаковых провайдеров………………………………………………… 114
Глава 5. Управление контейнерами с помощью Terraform………………….. 118
5.1. Работа с локальными и удаленными образами Docker………………………………………………. 118
5.2. Различие между развертыванием и конфигурацией кластера……………………………………. 120
5.3. Авторизация Terraform для кластерных операций……………………………………………………… 122
5.4. Планирование контейнеров на Kubernetes с помощью YAML…………………………………… 123
5.5. Планирование контейнеров в Kubernetes с помощью HCL…………………………………………. 125
5.6. Преобразование YAML Kubernetes в HCL с помощью k2tf………………………………………… 127
5.7. Настройка аннотаций для развертывания Kubernetes………………………………………………… 128
5.8. Настройка конфигурации развертывания Kubernetes…………………………………………………. 129
5.9. Применение сетевых политик Kubernetes в Terraform…………………………………………………. 132
5.10. Развертывание контейнеров с помощью Helm…………………………………………………………….. 134
5.11. Мониторинг развертываний Kubernetes с помощью Helm………………………………………….. 137
5.12. Планирование контейнеров на HashiCorp Nomad………………………………………………………. 140
Глава 6. HCP Terraform и Terraform Enterprise……………………………………. 143
6.1. Настройки HCP Terraform……………………………………………………………………………………………… 143
6.2. Интеграция HCP Terraform с системой управления версиями (VCS)…………………………. 148
6.3. Применение состояний Terraform в HCP Terraform…………………………………………………….. 150
6.4. Интеграция HCP Terraform с GitHub Actions………………………………………………………………… 152
6.5. Совместные рабочие процессы с использованием HCP Terraform……………………………. 154
6.6. Устранение неполадок в HCP Terraform и Terraform Enterprise…………………………………. 156
6.7. Реализация политики как кода………………………………………………………………………………………. 158
6.8. Управление затратами с помощью HCP Terraform……………………………………………………… 160
6.9. Использование удаленных операций для крупномасштабных развертываний……….. 163
6.10. Расширенные функции управления состоянием и восстановления……………………………. 166
Глава 7. Управление секретами при помощи Terraform………………………. 169
7.1. Работа с конфиденциальными данными в Terraform…………………………………………………… 169
7.2. Извлечение пар «ключ–значение» из хранилища HashiCorp Vault……………………………. 171
7.3. Управление секретами Kubernetes с помощью нативных функций Kubernetes…………. 173
7.4. Управление секретами Kubernetes с помощью Vault и Terraform………………………………. 176
7.5. Хранение секретов в переменных среды………………………………………………………………………. 179
7.6. Аудит и ротация секретов………………………………………………………………………………………………. 181
7.7. Управление секретами в Terraform с помощью менеджеров паролей……………………….. 183
7.8. Комплаенс и управление секретами в Terraform…………………………………………………………. 184
7.9. Динамические секреты с помощью HashiCorp Vault…………………………………………………… 187
7.10. Обеспечение безопасности инжектирования секретов в конвейеры CI/CD………………. 189
Глава 8. Управление конфигурацией при помощи Terraform………………. 192
8.1. Создание сценариев командной оболочки в Terraform………………………………………………. 192
8.2. Создание конфигурации Ansible в Terraform………………………………………………………………… 194
8.3. Динамическая конфигурация с помощью Consul KV…………………………………………………… 196
8.4. Использование данных из HTTP-интерфейсов…………………………………………………………….. 198
8.5. Применение условной логики в Terraform……………………………………………………………………. 199
8.6. Импорт существующей инфраструктуры в Terraform…………………………………………………. 201
8.7. Использование рабочих областей Terraform……………………………………………………………….. 203
8.8. Использование шаблонов Terraform…………………………………………………………………………….. 205
8.9. Управление зависимостями между ресурсами Terraform…………………………………………… 207
8.10. Реализация «сине-зеленых» развертываний с помощью Terraform……………………………. 209
Глава 9. Расширенные функции Terraform………………………………………….. 211
9.1. Написание файлов конфигурации в Terraform…………………………………………………………….. 211
9.2. Создание конфигурации Cloud-Init……………………………………………………………………………….. 213
9.3. Внедрение модулей Terraform в конвейеры CI/CD……………………………………………………… 216
9.4. Расширенное управление состоянием в Terraform………………………………………………………. 218
9.5. Terraform в контексте мультиоблачных стратегий……………………………………………………… 221
9.6. Работа в Terraform с масштабируемыми архитектурами…………………………………………… 223
9.7. Создание пользовательских провайдеров Terraform………………………………………………….. 226
9.8. Интеграция Terraform с инструментами мониторинга………………………………………………… 229
9.9. Управление безопасностью и соблюдение нормативных требований в Terraform….. 234
9.10. Расширенные методы отладки в Terraform………………………………………………………………….. 238
Глава 10. Практические примеры использования………………………………… 242
10.1. Управление несколькими средами с помощью рабочих областей Terraform…………… 242
10.2. Развертывание высокодоступного веб-приложения в нескольких регионах…………….. 245
10.3. Создание масштабируемого кластера Kubernetes в AWS EKS…………………………………… 249
10.4. Реализация «сине-зеленых» развертываний с помощью Terraform……………………………. 252
10.5. Автоматизация миграции баз данных с помощью Terraform и AWS RDS………………. 257
10.6. Развертывание бессерверного приложения на AWS Lambda и API Gateway…………. 260
10.7. Реализация инфраструктуры как кода для рабочих процессов GitOps…………………… 264
10.8. Оптимизация затрат с помощью Terraform и Spot Instances…………………………………….. 267
10.9. Развертывание системы многооблачного мониторинга с помощью Terraform………. 270
10.10. Автоматизация аварийного восстановления с помощью Terraform и AWS……………. 274
Предметный указатель…………………………………………………………………………. 279
Об авторах……………………………………………………………………………………………. 284
Об изображении на обложке………………………………………………………………… 285
