3.2 Terraform
Знакомство с Terraform
- Инструмент для декларативного описания инфраструктуры
- Описание инфраструктуры хранится в конфигурационных .tf-файлах
- State
- Ваши ресурсы не знают о том что они созданы через терраформ
- Терраформ без state'a не знает ничего о вашей инфраструктуре
Note
Провайдер это уже кем то написанная программа которая позволяет вам на языке Терраформа общаться с какой то системой где вы будете делать свою инфраструктуру
Troubleshooting
- terraform validate
- terraform console
- TF_LOG="DEBUG"
- TF_LOG_FILE
Мета аргументы
У каждого провайдера свои ресурсы и у каждого ресурса свой набор аргументов
Но есть общие мета аргументы
- provisioner (запуск чего то сразу после выполнения например ansible (лучше использовать cloud init))
- depends_on (неявные зависимости порядок создания ресурсов)
- count (счетчик создание нескольких одинаковых ресурсов)
- for_each (циклы с разными переменными)
- provider
- lifecycle (Внутри блока lifecycle имеются следующие аргументы create_before_destroy, prevent_destroy, ignore_changes, и replace_triggered_by.)
Пример создания ВМ на Яндекс Облаке
Дополнительные ресурсы
- local
- random
- null
| main.tf | |
|---|---|
Строковые шаблоны
Например можно сгенерировать инвентори для ансибла
Управление стейтом
- Хранение state в s3
- Использовать блокировки для предотвращения перезатирания
- Можно указывать remote state как data source
Data-sources
- Получает информацию о других ресурсах в облаке созданных не нами
Модули
depends_on
- Список ресурсов и модулей от которых зависит текущий ресурс или модуль
- Указывается если нельзя указать агрумент зависящий от другого ресурса
lifecycle
- create_before_destroy
- prevent_destroy (запретить удаление)
- ignore_changes
provisioner
- Выполнение действий выходящих за рамки апи ресурсов
- Также для многих облаков существует специальный аргумент userdata, metadata