Стенд, который любой в команде поднимает с нуля одной командой и удаляет, не оставив ни одного тома
fmt и validateСервису цен нужны два стенда — dev и prod. Каждый поднимается из пустого Docker одной командой terraform apply в каталоге окружения:
127.0.0.1:PORT ─▶ price-ENV-proxy nginx: балансировщик, единственный опубликованный порт
├─▶ price-ENV-app-1 ┐ экземпляры приложения: страница
└─▶ price-ENV-app-N ┘ «Сервис цен ВЕРСИЯ, экземпляр …, база …»
price-ENV-db PostgreSQL 17, данные на томе
сеть price-ENV-net — все контейнеры
Различия окружений: в dev один экземпляр и порт 8080, в prod — два экземпляра и 8090. Новая версия сервиса — правка одной переменной; балансировщик при этом не пересоздаётся и сам находит новые экземпляры.
| Требование | Модуль |
|---|---|
Версии Terraform и провайдеров в required_version и required_providers каждого модуля; .terraform.lock.hcl в репозитории; .gitignore | 01, 02, 06, 08 |
Модули app, postgres, proxy: переменные с типами, описаниями и validation, выходы, README | 04, 06 |
Пароль базы не в коде и не в tfvars: генерируется или приходит из TF_VAR_; выход со строкой подключения — sensitive | 04, 05 |
Экземпляры приложения — for_each по именам, их число — переменная окружения с проверкой | 07 |
Конфигурация балансировщика из шаблона templatefile со списком экземпляров | 04, 07 |
Наружу опубликован только порт балансировщика, и только на 127.0.0.1 | 02 |
Окружения — каталоги envs/dev и envs/prod; состояние — backend pg, у каждого окружения своя схема; строка подключения не в коде | 05, 08 |
Повторный plan после apply — без изменений | 03 |
Тесты terraform test хотя бы для двух модулей: проверка результата и отказ на неверном значении | 08 |
| Тот же код работает в OpenTofu | 01 |
moved — план после переноса должен быть пустым.for_each; проверьте, что удаление одного экземпляра не трогает остальные.envs/dev и envs/prod, перенесите состояние в PostgreSQL (init -migrate-state).server в upstream есть параметр resolve: вместе с директивой resolver 127.0.0.11 (DNS Docker) и zone в блоке upstream адреса обновляются сами. Чтобы apply завершался, когда сервис уже отвечает, у контейнеров есть healthcheck и аргумент wait = true.Подробные требования, что сдаётся и критерии оценивания — в задании на портале.
Вы прошли курс «Основы Terraform». Дальше — «Основы Ansible» (настраивать то, что создал Terraform), «Основы CI/CD» (plan в merge request и apply по кнопке) и «Kubernetes».