Skip to content

Latest commit

 

History

History

02-basics

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

Домашнее задание к занятию «Основы Terraform. Yandex Cloud»

Студент: Александр Недорезов


Задание 1

  1. Изучите проект. В файле variables.tf объявлены переменные для Yandex provider.
  2. Переименуйте файл personal.auto.tfvars_example в personal.auto.tfvars. Заполните переменные: идентификаторы облака, токен доступа. Благодаря .gitignore этот файл не попадёт в публичный репозиторий. Вы можете выбрать иной способ безопасно передать секретные данные в terraform.
  3. Сгенерируйте или используйте свой текущий ssh-ключ. Запишите его открытую часть в переменную vms_ssh_root_key.
  4. Инициализируйте проект, выполните код. Исправьте намеренно допущенные синтаксические ошибки. Ищите внимательно, посимвольно. Ответьте, в чём заключается их суть.
  5. Ответьте, как в процессе обучения могут пригодиться параметры 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 миллисекунд в течение каждой секунды.

Ресурсы успешно созданы: terraform apply yc vm Добавил также в outputs.tf вывод external ip, чтобы не искать его: output Подключаемся по ssh: ssh


Задание 2

  1. Изучите файлы проекта.
  2. Замените все хардкод-значения для ресурсов yandex_compute_image и yandex_compute_instance на отдельные переменные. К названиям переменных ВМ добавьте в начало префикс vm_web_ . Пример: vm_web_name.
  3. Объявите нужные переменные в файле variables.tf, обязательно указывайте тип переменной. Заполните их default прежними значениями из main.tf.
  4. Проверьте terraform plan. Изменений быть не должно.

Ответ:

Добавил необходимые переменные в variables.tf.
В main.tf заменил хардкод-значения, получилось:
resource with vars terraform plan подтвердил, что изменений не обнаружено:
plan


Задание 3

  1. Создайте в корне проекта файл 'vms_platform.tf'. Перенесите в него все переменные первой ВМ.
  2. Скопируйте блок ресурса и создайте с его помощью вторую ВМ в файле main.tf: "netology-develop-platform-db" , cores = 2, memory = 2, core_fraction = 20. Объявите её переменные с префиксом vm_db_ в том же файле ('vms_platform.tf').
  3. Примените изменения.

Ответ:

Создал vms_platform.tf, перенес в него созданные переменные, а также продублировал с vm_db_ префиксом.
В main.tf создал новый ресурс yandex_compute_instance "platform-db": platform-db Результат terraform apply: db apply yc two vms


Задание 4

  1. Объявите в файле outputs.tf output типа map, содержащий { instance_name = external_ip } для каждой из ВМ.
  2. Примените изменения.

В качестве решения приложите вывод значений ip-адресов команды terraform output.

Ответ:

Частично уже было выполнено, просто дополнил вызовом "name": output tf output


Задание 5

  1. В файле locals.tf опишите в одном local-блоке имя каждой ВМ, используйте интерполяцию ${..} с несколькими переменными по примеру из лекции.
  2. Замените переменные с именами ВМ из файла variables.tf на созданные вами local-переменные.
  3. Примените изменения.

Ответ:

Описание в файле locals.tf:
locals

В main.tf теперь используем local.web_name и local.db_name в имени ВМ. Terraform apply изменений не обнаружил: tf apply


Задание 6

  1. Вместо использования трёх переменных ".._cores",".._memory",".._core_fraction" в блоке resources {...}, объедините их в переменные типа map с именами "vm_web_resources" и "vm_db_resources". В качестве продвинутой практики попробуйте создать одну map-переменную vms_resources и уже внутри неё конфиги обеих ВМ — вложенный map.
  2. Также поступите с блоком metadata {serial-port-enable, ssh-keys}, эта переменная должна быть общая для всех ваших ВМ.
  3. Найдите и удалите все более не используемые переменные проекта.
  4. Проверьте terraform plan. Изменений быть не должно.

Ответ:

В vms_platform.tf добавил переменные для ресурсов и метаданных: map vars Как выглядит использование переменных:
vars usage В файлах vms_platform.tf и variables.tf закомментировал ненужные переменные. terraform plan показал, что изменений нет: plan


Задание 7*

Изучите содержимое файла console.tf. Откройте terraform console, выполните следующие задания:

  1. Напишите, какой командой можно отобразить второй элемент списка test_list.

Ответ:

local.test_list[1]

7.1

  1. Найдите длину списка test_list с помощью функции length(<имя переменной>).

Ответ:

length(local.test_list)

7.2

  1. Напишите, какой командой можно отобразить значение ключа admin из map test_map.

Ответ:

local.test_map.admin

7.3

  1. Напишите 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)})"

7.4

В качестве решения предоставьте необходимые команды и их вывод.


Правила приёма работы

В git-репозитории, в котором было выполнено задание к занятию «Введение в Terraform», создайте новую ветку terraform-02, закоммитьте в эту ветку свой финальный код проекта. Ответы на задания и необходимые скриншоты оформите в md-файле в ветке terraform-02.

В качестве результата прикрепите ссылку на ветку terraform-02 в вашем репозитории.