- Создать свои ресурсы в облаке Yandex Cloud с помощью Terraform.
- Освоить работу с переменными Terraform.
- Зарегистрирован аккаунт в Yandex Cloud. Использован промокод на грант.
- Установлен инструмент Yandex CLI.
- Исходный код для выполнения задания расположен в директории 02/src.
- Ознакомьтесь с документацией к security-groups в Yandex Cloud. Этот функционал понадобится к следующей лекции.
Внимание!! Обязательно предоставляем на проверку получившийся код в виде ссылки на ваш github-репозиторий!
В качестве ответа всегда полностью прикладывайте ваш terraform-код в git. Убедитесь что ваша версия Terraform ~>1.8.4
- Изучите проект. В файле variables.tf объявлены переменные для Yandex provider.
- Создайте сервисный аккаунт и ключ. service_account_key_file.
- Сгенерируйте новый или используйте свой текущий ssh-ключ. Запишите его открытую(public) часть в переменную vms_ssh_public_root_key.
- Инициализируйте проект, выполните код. Исправьте намеренно допущенные синтаксические ошибки. Ищите внимательно, посимвольно. Ответьте, в чём заключается их суть.
- Подключитесь к консоли ВМ через ssh и выполните команду
curl ifconfig.me
. Примечание: К OS ubuntu "out of a box, те из коробки" необходимо подключаться под пользователем ubuntu:"ssh ubuntu@vm_ip_address"
. Предварительно убедитесь, что ваш ключ добавлен в ssh-агент:eval $(ssh-agent) && ssh-add
Вы познакомитесь с тем как при создании ВМ создать своего пользователя в блоке metadata в следующей лекции.; - Ответьте, как в процессе обучения могут пригодиться параметры
preemptible = true
иcore_fraction=5
в параметрах ВМ.
В качестве решения приложите:
- скриншот ЛК Yandex Cloud с созданной ВМ, где видно внешний ip-адрес;
- скриншот консоли, curl должен отобразить тот же внешний ip-адрес;
- ответы на вопросы.
- Замените все хардкод-значения для ресурсов yandex_compute_image и yandex_compute_instance на отдельные переменные. К названиям переменных ВМ добавьте в начало префикс vm_web_ . Пример: vm_web_name.
- Объявите нужные переменные в файле variables.tf, обязательно указывайте тип переменной. Заполните их default прежними значениями из 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'). ВМ должна работать в зоне "ru-central1-b" - Примените изменения.
- Объявите в файле outputs.tf один output , содержащий: instance_name, external_ip, fqdn для каждой из ВМ в удобном лично для вас формате.(без хардкода!!!)
- Примените изменения.
В качестве решения приложите вывод значений ip-адресов команды terraform output
.
- В файле locals.tf опишите в одном local-блоке имя каждой ВМ, используйте интерполяцию ${..} с НЕСКОЛЬКИМИ переменными по примеру из лекции.
- Замените переменные внутри ресурса ВМ на созданные вами local-переменные.
- Примените изменения.
-
Вместо использования трёх переменных ".._cores",".._memory",".._core_fraction" в блоке resources {...}, объедините их в единую map-переменную vms_resources и внутри неё конфиги обеих ВМ в виде вложенного map(object).
пример из terraform.tfvars: vms_resources = { web={ cores=2 memory=2 core_fraction=5 hdd_size=10 hdd_type="network-hdd" ... }, db= { cores=2 memory=4 core_fraction=20 hdd_size=10 hdd_type="network-ssd" ... } }
-
Создайте и используйте отдельную map(object) переменную для блока metadata, она должна быть общая для всех ваших ВМ.
пример из terraform.tfvars: metadata = { serial-port-enable = 1 ssh-keys = "ubuntu:ssh-ed25519 AAAAC..." }
-
Найдите и закоментируйте все, более не используемые переменные проекта.
-
Проверьте terraform plan. Изменений быть не должно.
Настоятельно рекомендуем выполнять все задания со звёздочкой.
Они помогут глубже разобраться в материале. Задания со звёздочкой дополнительные, не обязательные к выполнению и никак не повлияют на получение вами зачёта по этому домашнему заданию.
Изучите содержимое файла console.tf. Откройте terraform console, выполните следующие задания:
- Напишите, какой командой можно отобразить второй элемент списка test_list.
- Найдите длину списка test_list с помощью функции length(<имя переменной>).
- Напишите, какой командой можно отобразить значение ключа admin из map test_map.
- Напишите 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() для подстановки значений.
Примечание: если не догадаетесь как вычленить слово "admin", погуглите: "terraform get keys of map"
В качестве решения предоставьте необходимые команды и их вывод.
- Напишите и проверьте переменную test и полное описание ее type в соответствии со значением из terraform.tfvars:
test = [
{
"dev1" = [
"ssh -o 'StrictHostKeyChecking=no' [email protected]",
"10.0.1.7",
]
},
{
"dev2" = [
"ssh -o 'StrictHostKeyChecking=no' [email protected]",
"10.0.2.29",
]
},
{
"prod1" = [
"ssh -o 'StrictHostKeyChecking=no' [email protected]",
"10.0.1.30",
]
},
]
- Напишите выражение в terraform console, которое позволит вычленить строку "ssh -o 'StrictHostKeyChecking=no' [email protected]" из этой переменной.
Используя инструкцию https://cloud.yandex.ru/ru/docs/vpc/operations/create-nat-gateway#tf_1, настройте для ваших ВМ nat_gateway. Для проверки уберите внешний IP адрес (nat=false) у ваших ВМ и проверьте доступ в интернет с ВМ, подключившись к ней через serial console. Для подключения предварительно через ssh измените пароль пользователя: sudo passwd ubuntu
Правила приёма работыДля подключения предварительно через ssh измените пароль пользователя: sudo passwd ubuntu
В качестве результата прикрепите ссылку на MD файл с описанием выполненой работы в вашем репозитории. Так же в репозитории должен присутсвовать ваш финальный код проекта.
Важно. Удалите все созданные ресурсы.
Зачёт ставится, если:
- выполнены все задания,
- ответы даны в развёрнутой форме,
- приложены соответствующие скриншоты и файлы проекта,
- в выполненных заданиях нет противоречий и нарушения логики.
На доработку работу отправят, если:
- задание выполнено частично или не выполнено вообще,
- в логике выполнения заданий есть противоречия и существенные недостатки.