- Установить и настроить Terrafrom.
- Научиться использовать готовый код.
- Скачайте и установите Terraform версии >=1.8.4 . Приложите скриншот вывода команды
terraform --version
. - Скачайте на свой ПК этот git-репозиторий. Исходный код для выполнения задания расположен в директории 01/src.
- Убедитесь, что в вашей ОС установлен docker.
- Репозиторий с ссылкой на зеркало для установки и настройки Terraform: ссылка.
- Установка docker: ссылка.
Внимание!! Обязательно предоставляем на проверку получившийся код в виде ссылки на ваш github-репозиторий!
- Перейдите в каталог src. Скачайте все необходимые зависимости, использованные в проекте.
- Изучите файл .gitignore. В каком terraform-файле, согласно этому .gitignore, допустимо сохранить личную, секретную информацию?(логины,пароли,ключи,токены итд)
- Выполните код проекта. Найдите в state-файле секретное содержимое созданного ресурса random_password, пришлите в качестве ответа конкретный ключ и его значение.
- Раскомментируйте блок кода, примерно расположенный на строчках 29–42 файла main.tf.
Выполните команду
terraform validate
. Объясните, в чём заключаются намеренно допущенные ошибки. Исправьте их. - Выполните код. В качестве ответа приложите: исправленный фрагмент кода и вывод команды
docker ps
. - Замените имя docker-контейнера в блоке кода на
hello_world
. Не перепутайте имя контейнера и имя образа. Мы всё ещё продолжаем использовать name = "nginx:latest". Выполните командуterraform apply -auto-approve
. Объясните своими словами, в чём может быть опасность применения ключа-auto-approve
. Догадайтесь или нагуглите зачем может пригодиться данный ключ? В качестве ответа дополнительно приложите вывод командыdocker ps
. - Уничтожьте созданные ресурсы с помощью terraform. Убедитесь, что все ресурсы удалены. Приложите содержимое файла terraform.tfstate.
- Объясните, почему при этом не был удалён docker-образ nginx:latest. Ответ ОБЯЗАТЕЛЬНО НАЙДИТЕ В ПРЕДОСТАВЛЕННОМ КОДЕ, а затем ОБЯЗАТЕЛЬНО ПОДКРЕПИТЕ строчкой из документации terraform провайдера docker. (ищите в классификаторе resource docker_image )
Настоятельно рекомендуем выполнять все задания со звёздочкой. Они помогут глубже разобраться в материале.
Задания со звёздочкой дополнительные, не обязательные к выполнению и никак не повлияют на получение вами зачёта по этому домашнему заданию.
- Создайте в облаке ВМ. Сделайте это через web-консоль, чтобы не слить по незнанию токен от облака в github(это тема следующей лекции). Если хотите - попробуйте сделать это через terraform, прочитав документацию yandex cloud. Используйте файл
personal.auto.tfvars
и гитигнор или иной, безопасный способ передачи токена! - Подключитесь к ВМ по ssh и установите стек docker.
- Найдите в документации docker provider способ настроить подключение terraform на вашей рабочей станции к remote docker context вашей ВМ через ssh.
- Используя terraform и remote docker context, скачайте и запустите на вашей ВМ контейнер
mysql:8
на порту127.0.0.1:3306
, передайте ENV-переменные. Сгенерируйте разные пароли через random_password и передайте их в контейнер, используя интерполяцию из примера с nginx.(name = "example_${random_password.random_string.result}"
, двойные кавычки и фигурные скобки обязательны!)
environment:
- "MYSQL_ROOT_PASSWORD=${...}"
- MYSQL_DATABASE=wordpress
- MYSQL_USER=wordpress
- "MYSQL_PASSWORD=${...}"
- MYSQL_ROOT_HOST="%"
- Зайдите на вашу ВМ , подключитесь к контейнеру и проверьте наличие секретных env-переменных с помощью команды
env
. Запишите ваш финальный код в репозиторий.
- Установите opentofu(fork terraform с лицензией Mozilla Public License, version 2.0) любой версии
- Попробуйте выполнить тот же код с помощью
tofu apply
, а не terraform apply.
Домашняя работа оформляется в отдельном GitHub-репозитории в файле README.md.
Выполненное домашнее задание пришлите ссылкой на .md-файл в вашем репозитории.
Зачёт ставится, если:
- выполнены все задания,
- ответы даны в развёрнутой форме,
- приложены соответствующие скриншоты и файлы проекта,
- в выполненных заданиях нет противоречий и нарушения логики.
На доработку работу отправят, если:
- задание выполнено частично или не выполнено вообще,
- в логике выполнения заданий есть противоречия и существенные недостатки.