0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Terraform позволяет описывать и поднимать удаленно инфраструктуру в облаках (дальнейшие примеры в Google Cloud Platform). Простейшая конфигурация состоит из четырех файлов:</p>
1
<p>Terraform позволяет описывать и поднимать удаленно инфраструктуру в облаках (дальнейшие примеры в Google Cloud Platform). Простейшая конфигурация состоит из четырех файлов:</p>
2
<ul><li>main.tf - основной конфиг, описывающий какие инстансы нам нужны</li>
2
<ul><li>main.tf - основной конфиг, описывающий какие инстансы нам нужны</li>
3
<li>variables.tf - конфиг с описанием переменных и значениями по дефолту, если дефолтных значений нет, то они являются обязательными</li>
3
<li>variables.tf - конфиг с описанием переменных и значениями по дефолту, если дефолтных значений нет, то они являются обязательными</li>
4
<li>terraform.tfvars - конфиг с значением переменных, часто является секретным, нужно с осторожностью пушить в публичные репозитарии</li>
4
<li>terraform.tfvars - конфиг с значением переменных, часто является секретным, нужно с осторожностью пушить в публичные репозитарии</li>
5
<li>outputs.tf - описание выходных переменных, необязательный файл, но очень удобно вычленять нужные параметры из созданного инстанса, например IP созданного в облаке инстанса</li>
5
<li>outputs.tf - описание выходных переменных, необязательный файл, но очень удобно вычленять нужные параметры из созданного инстанса, например IP созданного в облаке инстанса</li>
6
</ul><h2>Содержание</h2>
6
</ul><h2>Содержание</h2>
7
<ul><li><a>Пример main.tf</a></li>
7
<ul><li><a>Пример main.tf</a></li>
8
<li><a>Providers</a></li>
8
<li><a>Providers</a></li>
9
<li><a>Resources</a></li>
9
<li><a>Resources</a></li>
10
<li><a>Input-переменные variables.tf</a></li>
10
<li><a>Input-переменные variables.tf</a></li>
11
<li><a>State файлы</a></li>
11
<li><a>State файлы</a></li>
12
<li><a>Поиск по state-файлу</a></li>
12
<li><a>Поиск по state-файлу</a></li>
13
<li><a>Пример создания простой инфраструктуры в GPC</a></li>
13
<li><a>Пример создания простой инфраструктуры в GPC</a></li>
14
</ul><h2>Пример main.tf</h2>
14
</ul><h2>Пример main.tf</h2>
15
<h2>Providers</h2>
15
<h2>Providers</h2>
16
<ul><li>Содержат настройки аутентификации и подключения к платформе или сервису</li>
16
<ul><li>Содержат настройки аутентификации и подключения к платформе или сервису</li>
17
<li>Предоставляют набор ресурсов для управления</li>
17
<li>Предоставляют набор ресурсов для управления</li>
18
<li>Могут использоваться в модулях (начиная с версии 0.10.0) - Поддержка большого количества сервисов с API: AWS, Google Cloud, GitHub, PowerDNS, VCloud etc.</li>
18
<li>Могут использоваться в модулях (начиная с версии 0.10.0) - Поддержка большого количества сервисов с API: AWS, Google Cloud, GitHub, PowerDNS, VCloud etc.</li>
19
</ul><p>Установка провайдера производится командой terraform init</p>
19
</ul><p>Установка провайдера производится командой terraform init</p>
20
<p><a>list preferences all providers</a></p>
20
<p><a>list preferences all providers</a></p>
21
<h2>Resources</h2>
21
<h2>Resources</h2>
22
<ul><li>Определяются типом провайдера</li>
22
<ul><li>Определяются типом провайдера</li>
23
<li>Позволяют управлять компонентами платформы или сервиса</li>
23
<li>Позволяют управлять компонентами платформы или сервиса</li>
24
<li>Могут иметь обязательные и необязательные аргументы Могут ссылаться на другие ресурсы</li>
24
<li>Могут иметь обязательные и необязательные аргументы Могут ссылаться на другие ресурсы</li>
25
<li>Комбинация тип ресурса + имя уникально идентифицирует ресурс в рамках данной конфигурации</li>
25
<li>Комбинация тип ресурса + имя уникально идентифицирует ресурс в рамках данной конфигурации</li>
26
</ul><h2>Input-переменные variables.tf</h2>
26
</ul><h2>Input-переменные variables.tf</h2>
27
<ul><li>Позволяют параметризировать конфигурационные файлы Три типа:<ul><li>string</li>
27
<ul><li>Позволяют параметризировать конфигурационные файлы Три типа:<ul><li>string</li>
28
<li>map</li>
28
<li>map</li>
29
<li>list</li>
29
<li>list</li>
30
<li>boolean</li>
30
<li>boolean</li>
31
</ul></li>
31
</ul></li>
32
<li>Можно передать из файла, из окружения, из командной строки или интерактивно.</li>
32
<li>Можно передать из файла, из окружения, из командной строки или интерактивно.</li>
33
</ul><p>Входные переменные описываются в файле variables.tf:</p>
33
</ul><p>Входные переменные описываются в файле variables.tf:</p>
34
<p>Пример использования переменных в main.tf:</p>
34
<p>Пример использования переменных в main.tf:</p>
35
<p>Задание переменных через файл:</p>
35
<p>Задание переменных через файл:</p>
36
<ul><li><p>Укажем переменные в файле my-vars.tfvars:</p>
36
<ul><li><p>Укажем переменные в файле my-vars.tfvars:</p>
37
</li>
37
</li>
38
<li><p>Указываем путь до файла при запуске команд terraform:</p>
38
<li><p>Указываем путь до файла при запуске команд terraform:</p>
39
</li>
39
</li>
40
<li><p>Если файл называется terraform.tfvars, то переменные загружаются автоматически.</p>
40
<li><p>Если файл называется terraform.tfvars, то переменные загружаются автоматически.</p>
41
</li>
41
</li>
42
</ul><h3>Output-переменные outputs.tf</h3>
42
</ul><h3>Output-переменные outputs.tf</h3>
43
<ul><li>Позволяют сохранить выходные значения после создания ресурсов.</li>
43
<ul><li>Позволяют сохранить выходные значения после создания ресурсов.</li>
44
<li>Облегчают процедуру поиска нужных данных</li>
44
<li>Облегчают процедуру поиска нужных данных</li>
45
<li>Используются в модулях как входные переменные для других модулей</li>
45
<li>Используются в модулях как входные переменные для других модулей</li>
46
</ul><p>outputs.tf</p>
46
</ul><p>outputs.tf</p>
47
<p>После описания конфигурации всё готово к "поднятию" инфраструктуры в облаке</p>
47
<p>После описания конфигурации всё готово к "поднятию" инфраструктуры в облаке</p>
48
<h3>Основные команды</h3>
48
<h3>Основные команды</h3>
49
<ul><li>Для приведения системы в целевое состояние используется команда terraform -auto-approve=true apply - идемпотентна!</li>
49
<ul><li>Для приведения системы в целевое состояние используется команда terraform -auto-approve=true apply - идемпотентна!</li>
50
<li>Для просмотра, какие изменения будут применены terraform plan</li>
50
<li>Для просмотра, какие изменения будут применены terraform plan</li>
51
<li>Для обновления конфигурации terraform refresh</li>
51
<li>Для обновления конфигурации terraform refresh</li>
52
<li>Для просмотра выходных переменных terraform output</li>
52
<li>Для просмотра выходных переменных terraform output</li>
53
<li>Для пересоздания ресурса terraform taint google_compute_instance.app</li>
53
<li>Для пересоздания ресурса terraform taint google_compute_instance.app</li>
54
</ul><p>После создания инфраструктуры в папке появляется state-файл со всей созданной инфраструктурой и удаляется после terraform-destroy</p>
54
</ul><p>После создания инфраструктуры в папке появляется state-файл со всей созданной инфраструктурой и удаляется после terraform-destroy</p>
55
<h2>State файлы</h2>
55
<h2>State файлы</h2>
56
<ul><li>Terraform хранит информацию об управляемых ресурсах в файле terraform.tfstate</li>
56
<ul><li>Terraform хранит информацию об управляемых ресурсах в файле terraform.tfstate</li>
57
<li>Файл terraform.tfstate обновляется при каждом запуске apply или refresh</li>
57
<li>Файл terraform.tfstate обновляется при каждом запуске apply или refresh</li>
58
<li>Файл terraform.tfstate.backup используется для бекапа предыдущего terraform.state</li>
58
<li>Файл terraform.tfstate.backup используется для бекапа предыдущего terraform.state</li>
59
<li>По умолчанию сохраняются локально в папке с конфигурацией</li>
59
<li>По умолчанию сохраняются локально в папке с конфигурацией</li>
60
</ul><h2>Поиск по state-файлу</h2>
60
</ul><h2>Поиск по state-файлу</h2>
61
<h2>Пример создания простой инфраструктуры в GPC</h2>
61
<h2>Пример создания простой инфраструктуры в GPC</h2>
62
<ul><li><a>Gist main.tf</a></li>
62
<ul><li><a>Gist main.tf</a></li>
63
<li><a>Gist variables.tf</a></li>
63
<li><a>Gist variables.tf</a></li>
64
<li><a>Gist outputs.tf</a></li>
64
<li><a>Gist outputs.tf</a></li>
65
<li><a>Gist terraform.tfvars</a></li>
65
<li><a>Gist terraform.tfvars</a></li>
66
</ul>
66
</ul>