• Глава 4 «Повторное использование инфраструктуры с помощью модулей Terraform». Что такое модули; как создать простой модуль; как сделать модуль конфигурируемым с помощью входных и выходных значений; локальные переменные; версионные модули; потенциальные проблемы с модулями; использование модулей для описания настраиваемых элементов инфраструктуры с возможностью повторного применения.
• Глава 5 «Работа с Terraform: циклы, условные выражения, развертывание и подводные камни». Циклы с параметром count, выражения for_each и for, строковая директива for; условный оператор с параметром count, выражениями for_each и for, строковой директивой if; встроенные функции; развертывание с нулевым временем простоя; часто встречающиеся подводные камни, связанные с ограничениями count и for_each, развертываниями без простоя; как хорошие планы могут провалиться, проблемы с рефакторингом и отложенная согласованность.
• Глава 6 «Код Terraform промышленного уровня». Почему проекты DevOps всегда развертываются дольше, чем ожидается; что характеризует инфраструктуру, готовую к промышленному использованию; как создавать модули Terraform для промышленных условий; готовые к выпуску модули; реестр модулей Terraform; «аварийные люки» в Terraform.
• Глава 7 «Как тестировать код Terraform». Ручное тестирование кода Terraform; тестовые среды и очистка; автоматизированное тестирование кода Terraform; Terrarest; модульные тесты; интеграционные тесты; сквозные тесты; внедрение зависимостей; параллельное выполнение тестов; этапы тестирования; пирамида тестирования; статический анализ; проверка свойств.
•Глава 8 «Как использовать Terraform в команде». Как внедрить Terraform в командную работу; как убедить начальство; рабочий процесс развертывания кода приложения; рабочий процесс развертывания инфраструктурного кода; управление версиями; золотое правило Terraform; разбор кода; рекомендации по оформлению кода; принятый в Terraform стиль; CI/CD для Terraform; процесс развертывания.
Эту книгу можно читать последовательно или сразу переходить к тем главам, которые вас больше всего интересуют. Имейте в виду, что все примеры последующих глав основаны на коде из предыдущих. Если вы листаете туда-сюда, используйте в качестве ориентира архив исходного кода (как описано в разделе «Примеры с открытым исходным кодом» далее). В приложении вы найдете список книг и статей о Terraform, системном администрировании, IaC и DevOps.
Что нового во втором издании
Первое издание вышло в 2017 году. В мае 2019-го я готовил второе издание и был очень удивлен тому, как все изменилось за пару лет! Эта книга по своему объему почти в два раза превосходит предыдущую и включает две полностью новые главы. Кроме того, существенно обновлены все оригинальные главы и примеры кода.
Если вы уже прочитали первое издание и хотите узнать, что изменилось, или вам просто интересно посмотреть, как эволюционировал проект Terraform, вот несколько основных моментов.
•Четыре крупных обновления Terraform. Когда вышла первая книга, стабильной версией Terraform была 0.8. Спустя четыре крупных обновления Terraform имеет версию 0.12. За это время появились некоторые поразительные новшества, о которых пойдет речь далее. Чтобы обновиться, пользователям придется попотеть!1
• Улучшения в автоматическом тестировании. Существенно эволюционировали методики и инструментарий написания автоматических тестов для кода Terraform. Тестированию посвящена новая глава, седьмая, которая затрагивает такие темы, как модульные, интеграционные и сквозные тесты, внедрение зависимостей, распараллеливание тестов, статический анализ и др.
• Улучшения в модулях. Инструментарий и методики создания модулей Terraform тоже заметно эволюционировали. В новой, шестой, главе вы найдете руководство по написанию испытанных модулей промышленного уровня с возможностью повторного использования — таких, которым можно доверить благополучие своей компании.
• Улучшения в рабочем процессе. Глава 8 была полностью переписана согласно тем изменениям, которые произошли в процедуре интеграции Terraform в рабочий процесс команд. Там, помимо прочего, можно найти подробное руководство о том, как провести прикладной и инфраструктурный код через все основные этапы: разработку, тестирование и развертывание в промышленной среде.
• HCL2. В Terraform 0.12 внутренний язык HCL обновился до HCL2. Это включает в себя поддержку полноценных выражений (чтобы вам не приходилось заворачивать все в ${…}!), развитые ограничители типов, условные выражения с отложенным вычислением, поддержку выражений null, for_each и for, вложенные блоки и др. Все примеры кода в этой книге были адаптированы для HCL2, а новые возможности языка подробно рассматриваются в главах 5 и 6.