- Изучите проект. В файле variables.tf объявлены переменные для Yandex provider.
- Переименуйте файл personal.auto.tfvars_example в personal.auto.tfvars. Заполните переменные: идентификаторы облака, токен доступа. Благодаря .gitignore этот файл не попадёт в публичный репозиторий. Вы можете выбрать иной способ безопасно передать секретные данные в terraform.
- Сгенерируйте или используйте свой текущий ssh-ключ. Запишите его открытую часть в переменную vms_ssh_root_key.
- Инициализируйте проект, выполните код. Исправьте намеренно допущенные синтаксические ошибки. Ищите внимательно, посимвольно. Ответьте, в чём заключается их суть.
- Ответьте, как в процессе обучения могут пригодиться параметры
preemptible = true
иcore_fraction=5
в параметрах ВМ. Ответ в документации Yandex Cloud.
В качестве решения приложите:
- скриншот ЛК Yandex Cloud с созданной ВМ;
- скриншот успешного подключения к консоли ВМ через ssh. К OS ubuntu необходимо подключаться под пользователем ubuntu: "ssh ubuntu@vm_ip_address";
- ответы на вопросы.
При инициализации ошибки были в объявлении ресурса "yandex_compute_instance":
platform_id = "standart-v4"
- должно бытьstandard
а также есть всего v1-v3 версии. Для запуска укажемstandard-v1
(по доке)cores = 1
- минимальное количество ядер 2 (по доке)Параметры
preemptible
иcore_fraction
помогут сэкономить предоставленный грант на использовании ресурсов:
preemptible = true
- прерываемая ВМ, т.е. работает не более 24 часов и может быть остановлена Compute Cloud в любой моментcore_fraction = 5
- уровень производительности vCPU (от 5% до 100%), т.е. доля вычислительного времени физических ядер, которую гарантирует vCPU. При уровне производительности 5% ВМ будет иметь доступ к физическим ядрам как минимум 5% времени — 50 миллисекунд в течение каждой секунды.Ресурсы успешно созданы: Добавил также в outputs.tf вывод external ip, чтобы не искать его: Подключаемся по ssh:
- Изучите файлы проекта.
- Замените все хардкод-значения для ресурсов yandex_compute_image и yandex_compute_instance на отдельные переменные. К названиям переменных ВМ добавьте в начало префикс vm_web_ . Пример: vm_web_name.
- Объявите нужные переменные в файле variables.tf, обязательно указывайте тип переменной. Заполните их default прежними значениями из main.tf.
- Проверьте terraform plan. Изменений быть не должно.
Добавил необходимые переменные в variables.tf.
В main.tf заменил хардкод-значения, получилось:
terraform plan
подтвердил, что изменений не обнаружено:
- Создайте в корне проекта файл 'vms_platform.tf'. Перенесите в него все переменные первой ВМ.
- Скопируйте блок ресурса и создайте с его помощью вторую ВМ в файле main.tf: "netology-develop-platform-db" , cores = 2, memory = 2, core_fraction = 20. Объявите её переменные с префиксом vm_db_ в том же файле ('vms_platform.tf').
- Примените изменения.
Создал vms_platform.tf, перенес в него созданные переменные, а также продублировал с vm_db_ префиксом.
В main.tf создал новый ресурсyandex_compute_instance
"platform-db": Результатterraform apply
:
- Объявите в файле outputs.tf output типа map, содержащий { instance_name = external_ip } для каждой из ВМ.
- Примените изменения.
В качестве решения приложите вывод значений ip-адресов команды terraform output
.
Частично уже было выполнено, просто дополнил вызовом "name":
- В файле locals.tf опишите в одном local-блоке имя каждой ВМ, используйте интерполяцию ${..} с несколькими переменными по примеру из лекции.
- Замените переменные с именами ВМ из файла variables.tf на созданные вами local-переменные.
- Примените изменения.
Описание в файле locals.tf:
В main.tf теперь используем
local.web_name
иlocal.db_name
в имени ВМ. Terraformapply
изменений не обнаружил:
- Вместо использования трёх переменных ".._cores",".._memory",".._core_fraction" в блоке resources {...}, объедините их в переменные типа map с именами "vm_web_resources" и "vm_db_resources". В качестве продвинутой практики попробуйте создать одну map-переменную vms_resources и уже внутри неё конфиги обеих ВМ — вложенный map.
- Также поступите с блоком metadata {serial-port-enable, ssh-keys}, эта переменная должна быть общая для всех ваших ВМ.
- Найдите и удалите все более не используемые переменные проекта.
- Проверьте terraform plan. Изменений быть не должно.
В vms_platform.tf добавил переменные для ресурсов и метаданных: Как выглядит использование переменных:
В файлах vms_platform.tf и variables.tf закомментировал ненужные переменные.terraform plan
показал, что изменений нет:
Изучите содержимое файла console.tf. Откройте terraform console, выполните следующие задания:
- Напишите, какой командой можно отобразить второй элемент списка test_list.
local.test_list[1]
- Найдите длину списка test_list с помощью функции length(<имя переменной>).
length(local.test_list)
- Напишите, какой командой можно отобразить значение ключа admin из map test_map.
local.test_map.admin
- Напишите interpolation-выражение, результатом которого будет: "John is admin for production server based on OS ubuntu-20-04 with X vcpu, Y ram and Z virtual disks", используйте данные из переменных test_list, test_map, servers и функцию length() для подстановки значений.
Просто обращаемся к ключам, также добавил вывод списка disks с помощью
join
"${local.test_map.admin} is admin for ${local.test_list[2]} server based on OS ${local.servers[local.test_list[2]].image} with ${local.servers[local.test_list[2]].cpu} vcpu, ${local.servers[local.test_list[2]].ram} ram, and ${length(local.servers[local.test_list[2]].disks)} virtual disks (${join(", ", local.servers[local.test_list[2]].disks)})"
В качестве решения предоставьте необходимые команды и их вывод.
В git-репозитории, в котором было выполнено задание к занятию «Введение в Terraform», создайте новую ветку terraform-02, закоммитьте в эту ветку свой финальный код проекта. Ответы на задания и необходимые скриншоты оформите в md-файле в ветке terraform-02.
В качестве результата прикрепите ссылку на ветку terraform-02 в вашем репозитории.