Terraform
Базовые понятия
Основные компоненты Terraform:
1 2 3 4 5 | |
Рабочий процесс
1️⃣ Write или Init 2️⃣ Plan 3️⃣ Apply
Инициализация директории Код для развёртывания Managed Service for YDB:
Выполнение кода
Удалить ресурсы
Добавляем провайдеры
Переменные в Terraform
Простые типы данных ⭐️ String — последовательность символов Unicode, представляющая текст (например, hello). ⭐️ Number — числовое значение, которое может представлять целые числа (например, 15) и дробные значения (например, 6,283185). ⭐️ Bool — логическое значение (true либо false), которое может использоваться в условной логике
Сложные типы данных 🌟 Коллекции — для группировки схожих значений. 🌟 Структурные типы — для группировки потенциально несхожих значений.
Коллекции делятся на три группы: 1️⃣ Коллекция list(…) 2️⃣ Коллекция map(…) 3️⃣ Коллекция set(…)
Структурные типы данных делятся на два вида: 1️⃣ Тип данных object(…) 2️⃣ Тип данных tuple(...)
Warning
1 | |
Info
1 | |
Аргумент nullable Контролирует, может ли переменной быть присвоено значение null.
Способы задания переменных
Terraform загружает переменные в следующем порядке: 1️⃣ Переменные окружения. 2️⃣ Файл terraform.tfvars, если он есть. 3️⃣ Файл terraform.tfvars.json, если он есть. 4️⃣ Любые файлы .auto.tfvars или.auto.tfvars.json, обрабатываемые в алфавитном порядке их имён. 5️⃣ Любые опции -var и -var-file в командной строке в порядке их предоставления.
В командной строке
В файле
Переменные окружения Terraform ищет переменные окружения (начинающиеся с TF_VAR_), за которым следует имя объявленной переменной.
Локальные переменные
Выходные переменные/значения
Sensitive значения
Функции
Встроенные функции Terraform
Работа с числами - min, max, pow, floor, ceil Работа со строками - format, join, split, substr Работа с коллекциями - length, lookup, flatten, element, map, merge Кодирование - base64decode, base64encode, jsonencode Операции с файловой системой - file, fileexists, abspath, templatefile Работа с датой и временем - formatdate, timestamp Шифрование и хеш-функции - base64sha512, bcrypt Работы с сетевой CIDR - cidrsubnet, cidrhost Конвертирование типов - tobool, tomap, tolist
Управляющие структуры
Условные выражения
Операторы
Циклы
Тип данных результата Скобки вокруг выражения for определяют, каким будет тип результирующего объекта:
1 2 | |
Фильтрация значений
Создание нескольких ресурсов
Count
Info
1 | |
Warning
1 | |
For_each
Если ваши экземпляры практически идентичны, использование count уместно. Если некоторые из аргументов нельзя задать с помощью целых чисел count.index, то безопаснее использовать for_each. Он лишён недостатка count, поскольку экземпляры в нём идентифицируются строкой. Аргумент for_each принимает типы данных map или set(string) и создаёт экземпляр для каждого элемента этих типов данных.
Динамические блоки
Некоторые типы ресурсов содержат повторяемые вложенные блоки в своих аргументах, обычно они представляют собой отдельные объекты. Вы можете динамически конструировать вложенные блоки с помощью dynamic-блоков. Они поддерживаются внутри блоков resource, data, provider и provisioner.
Указание зависимости
В большинстве случаев Terraform сам управляет зависимостями. Вам нужно явно указать зависимость только в том случае, когда ресурс или модуль зависит от поведения другого ресурса, но не обращается к данным этого ресурса в своих аргументах.
State-файл в Terraform
Изменения в файле backend.tf требуют повторной инициализации
Решение: используйте команду terraform init -reconfigure.
В момент применения конфигурации пропала связь с бэкендом
Решение: исправьте командой terraform force-unlock LOCK_ID.
Пример LOCK_ID: yandex_storage_bucket.dev.
Блоке import
Блок import — это новый декларативный способ описывать импорт ресурсов прямо в Terraform-коде, без ручного запуска terraform import ... в консоли.
🔹 Проще говоря: ты описываешь в коде, какие ресурсы нужно импортировать в state, и Terraform сам делает импорт при terraform apply.
Блокировку состояния инфраструктуры
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | |
Модули Terraform
💡 Модуль Terraform — это контейнер для нескольких ресурсов, которые используются совместно и позволяют структурировать код Terraform. Модуль состоит из набора файлов .tf или .tf.json в одной директории и позволяет компоновать и переиспользовать код Terraform, скрывая его внутреннюю реализацию.