Shanraq.org Shanraq.org
OpenTofu и Ansible: инфраструктура и настройка как код
IT

Cloud & DevOps: от локального приложения до надёжного сервиса Урок 22 из 24

OpenTofu и Ansible: инфраструктура и настройка как код

Валидируем описание ресурса, формируем inventory и применяем идемпотентную настройку хоста.

Текст переведён с помощью ИИ.

Этот урок начинается с нуля. Незнакомое слово здесь не считается вашим пробелом: мы сначала создадим образ, затем дадим точное значение и только потом применим его.

Где мы находимся

Полётное повторение. В прошлом уроке была опора domain → DNS → public 443 → Caddy → private app:8080; certificate proves name. Не подглядывая, назовите её четыре звена и только затем сравните с записью.

Результат урока

Валидируем описание ресурса, формируем inventory и применяем идемпотентную настройку хоста. Не переходите дальше, пока не можете объяснить, что проверяет каждая команда и какой отказ она обнаруживает.

Сначала знакомый образ

Строитель работает по чертежу, а управляющий ведёт ведомость того, что уже построено. OpenTofu описывает желаемые облачные ресурсы и хранит связь с реальными объектами в state. Ansible похож на инструкцию обустройства комнат: устанавливает пакет и приводит файл к нужному виду.

Аналогия помогает начать рассуждение, но не заменяет устройство технологии. Ниже мы уточним каждое слово.

Опорный сигнал урока

desired code → plan/diff → approve → apply → state; repeat → no surprise

Прочитайте цепочку слева направо. Она отвечает не на вопрос «какую команду запомнить», а на вопрос «почему следующий шаг следует из предыдущего».

Новые слова простыми словами

  • Infrastructure as Code — Описание инфраструктуры в проверяемых версионируемых файлах.
  • State — Чувствительная запись соответствия между кодом и реальными ресурсами.
  • Plan — Предварительный список предполагаемых изменений до применения.
  • Idempotence — Повторный запуск при уже достигнутом состоянии не делает лишних изменений.

Разбираем без спешки

OpenTofu управляет жизненным циклом инфраструктурных ресурсов через state; Ansible приводит ОС к нужной конфигурации по SSH. Код делает изменение обозримым, но state и секреты требуют защиты. Идемпотентный playbook при повторном запуске не должен каждый раз сообщать об изменении.

Сейчас не нужно запоминать формулировку дословно. Найдите в ней причинную связь и привяжите её к опорному сигналу выше.

Сначала предскажите результат

До запуска ответьте на бумаге: что должно измениться, что должно остаться прежним и какой вывод команды подтвердит ваш прогноз? Даже неверный прогноз полезен, если после опыта вы можете объяснить расхождение.

Опыт маленькими шагами

Выполните команды из корня course/cloud-devops-lab. Команды рассчитаны на учебную среду. Перед командой, меняющей сервер или данные, прочитайте её целиком и проверьте текущий каталог. Запускайте блок по одной смысловой группе. После каждой остановитесь и сопоставьте результат со своим прогнозом.

tofu -chdir=infra/opentofu fmt -check 2>/dev/null || true
tofu -chdir=infra/opentofu init -backend=false 2>/dev/null || true
tofu -chdir=infra/opentofu validate 2>/dev/null || true
ansible-playbook --syntax-check -i infra/ansible/inventory.ini.example infra/ansible/site.yml 2>/dev/null || true

Эталонные файлы проекта.

Что именно делает этот опыт

fmt проверяет форму, init -backend=false готовит локальную проверку без удалённого state, validate проверяет структуру. Ansible syntax-check читает playbook без изменения сервера. Ни одна команда урока не вызывает apply.

Что должно получиться

  • Проверка не создаёт облачный ресурс.
  • Команда завершается предсказуемым кодом.
  • Результат можно повторить на чистой среде.

Соберите целое по опорной схеме

Опорная схема 22

Проведите пальцем или карандашом по четырём блокам и расскажите весь урок одним связным объяснением.

Воспроизведите без подсказки

  1. Закройте схему и нарисуйте четыре блока по памяти.
  2. Объясните каждый переход словами «потому что».
  3. Дайте определение одному новому термину, не повторяя текст дословно.
  4. Назовите один сигнал, который доказывает результат.

Найдите и исправьте ошибку

Ошибка: «Код инфраструктуры безопасен, потому что его можно прочитать». Исправление: ошибочный код повторяет ошибку быстрее; нужны plan, review, ограниченные права и защита state.

Задание

Теперь соберите тот же смысл самостоятельно. Можно смотреть на опорную схему; цель — не экзамен на память, а воспроизводимый результат.

Обязательное. Напишите POSIX sh preflight, который требует tofu и ansible-playbook, выполняет fmt/validate и syntax-check, но никогда не вызывает apply. Отправьте только команды или скрипт POSIX sh без реальных ключей и токенов.

Критерии готовности

  • Вы понимаете каждую запускаемую строку.
  • Повторный запуск даёт ожидаемый результат или безопасно объяснённое отличие.
  • В выводе нет настоящих ключей, токенов и паролей.
  • Вы можете показать факт, который подтверждает успех.

Если проверка не прошла, зафиксируйте ожидаемое и фактическое, вернитесь к одному разорванному звену опоры и повторите. Ошибка не отнимает у вас право продолжать обучение.

По желанию. Запишите один возможный отказ и сигнал, по которому вы его заметите.

Открытая перспектива

Следующий урок добавит новую опору: Kubernetes: Deployment, Service, probes и rollout.

Оглавление курса

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить задание

Сначала решите и запустите в VS Code — редактор покажет ошибку на месте. Готовое решение вставьте сюда. Проверяет модель: она укажет на ошибку, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.