HTML Diff
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>