# Лабораторна робота №6 (ч.1) ## Розгортання обчислювальних сервісів в Azure та управління ними (Azure Virtual Machines, App Service, Container Instance) ## Мета Ознайомитися з основними обчислювальними сервісами платформи Microsoft Azure та навчитися розгортати і управляти ними на практиці. Дослідити принципи створення і конфігурації віртуальних машин (Azure Virtual Machines, Azure Virtual Machine Scale Sets), хмарних вебзастосунків (Azure App Service) та контейнерних екземплярів (Azure Container Instances). Сформувати навички вибору відповідного сервісу залежно від сценарію використання, оптимізації параметрів продуктивності та вартості, а також управління станом, масштабуванням і доступом до обчислювальних ресурсів у хмарному середовищі. ## Хід роботи 1. Перевірити політику Allowed resource deployment regions та обрати один з регіонів. Створити Virtual Machine Azure Portal. В головному пошуку на Azure Portal знайти Virtual Machine та обрати опцію Create. Далі заповнити поля: **Basics** (змінювати тільки вказані поля): - **Subscription**: обрати підписку Azure for Students; - **Resource group**: створити нову, назвавши rg-vm-xxx-yyy-zzz, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - **Virtual machine name**: vm-xxx-yyy-zzz-001, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - **Region**: обрати серед доступних, що вказані в політиці регіонів, яка застосовується для навчальних Subscriptions Azure for Students; - **Availability options**: Availability set; - **Availability set**: Create new - **Name**: as-xxx-yyy-zzz-001, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - **Fault domains**: 2; - **Update domains**: 6; - Зберегти налаштування Availability set; - **Security type**: Trusted launch virtual machines; - **Image**: Windows Server 2025 Datacenter — x64 Gen2; - **Size:** Standard_B2s — 2 vcpus, 4 GiB memory; - **Username:** аналогічний username, як і в Azure Cloud Shell, типу ki251_mvv; - **Password:** довільний безпечний пароль не менше 12 символів, що буде містити букви, цифри, спец. символи (у звіті не вказувати); - **Public inbound ports:** None; **Disks** (змінювати тільки вказані поля): - **OS disk type:** Standard SSD (locally-redundant storage); - **Create and attach a new disk:** - **Standard SSD (locally-redundant storage);** - **Size: 32 GiB;** - **Delete disk with VM:** check; - Зберегти зміни, натиснувши **Ok**; **Networking** (змінювати тільки вказані поля): - **Virtual network**: Edit virtual network - Замінити адресний простір на 10.xxx.0.0/16, де xxx — номер варіанту групи; - Редагувати існуючий subnet, обравши в **IPv4 address range** попередньо створений (10.xxx.0.0/16) та зменшити кількість доступних адрес в subnet, **обравши префікс (Size) — /29**; - Зберегти зміни; - Перейти у вкладу **Review + Create** та після валідації натиснути **Create**. 2. Дозволити доступ за протоколом RDP до новоствореної віртуальної машини. Перейти в налаштування **Virtual Machine** > **Networking** > **Network settings** та натиснути **Create port rule** > **Inbound port rule**. Далі вказати наступне: - **Source**: My IP address; - **Source port ranges**: `*`; - **Destination**: Any; - **Service**: RDP; - **Action**: Allow; - **Priority**: 110; - **Name**: allow-rdp; - **Description**: Allow RDP connection from my current public IP address; - Зберегти правило. 3. В налаштування віртуальної машини перейти у **Connect** > **Connect** та натиснути **Check access** та переконатись, що ви маєте доступ за протоколом RDP до віртуальної машини, про що буде сигналізувати надпис «Port 3389 is accessible from source IP(s)». Після цього натиснути **Download RDP file**. 4. Підключитись до віртуальної машини, використовуючи Microsoft Remote Desktop Connection client, відкривши завантажений файл. Після цього ввести логін та пароль, що були задані під час створення віртуальної машини для підключення до неї. 5. Відкрити File Explorer та зафіксувати наявні Devices and drives (Windows (C:), Temporary Storage (D:), DVD Drive (E:)). Важливо зазначити, що на даному етапі відсутній Data drive, що було створено під час створення віртуальної машини. Для того, щоб він відображався у File Explorer та його можна було використовувати, необхідно клікнути правою кнопкою миші по Start Menu Icon та обрати **Disk Management**, де система запропонує ініаціалізувати наявний диск. Натискаємо OK. Далі знаходимо наш диск (орієнтовно Disk 2, розміром 31.98 GB), клікаємо по нерозміченій області, та обираємо **Create new simple volume** і далі погоджуємось з усіма налаштуваннями за замовчуванням і натискаємо **Finish**. У File Explorer переконуємось, що появився новий Volume, розміром 31.9 GB. 6. Відкрити PowerShell, та виконати команду: ```powershell Install-WindowsFeature -name Web-Server -IncludeManagementTools ``` Після її виконання, відкрити Azure Portal, перейти до створеної раніше віртуальної машини та у вкладці **Overview**, скопіювати значення **Primary NIC public IP** та відрити вебсторінку, доступну за цією адресою у новій вкладці браузеру, використовуючи протокол HTTP (не HTTPS!). Очікувано, ми отримаємо помилку. 7. Дозволити доступ за протоколом HTTP до віртуальної машини. Перейти в налаштування **Virtual Machine** > **Networking** > **Network settings** та натиснути **Create port rule** > **Inbound port rule**. Далі вказати наступне: - **Source**: Any; - **Source port ranges**: `*`; - **Destination**: Any; - **Service**: HTTP; - **Action**: Allow; - **Priority**: 120; - **Name**: allow-http; - **Description**: Allow HTTP connections from any location; - Зберегти правило. 8. У новому вікні браузері вставити попередньо скопійовану IP-адресу та переконатись, що ви отримали доступ до стандартної сторінки вебсерверу Internet Information Services (IIS). 9. Відключитись від RDP-підключення та видаляємо усі ресурси, що було попередньо створено. 10. Використовуючи Azure Portal, в пошуку знайти Virtual Machine Scale Set та обрати Create. Далі заповнити поля: **Basics** (змінювати тільки вказані поля): - **Subscription**: обрати підписку Azure for Students; - **Resource group**: створити нову, назвавши rg-vmss-xxx-yyy-zzz, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - **Virtual machine scale set name**: vmss-xxx-yyy-zzz-001, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - **Availability zone**: Zone 1, Zone 2; - **Orchestration mode**: Flexible; - **Scaling mode**: Manually update the capacity: Maintain a fixed amount of instances; - **Instance count**: 2; - **Image**: Ubuntu Server 24.04 LTS - x64 Gen2; - **VM architecture**: x64; - **Size**: Standard_B2s; - **Authentication type**: SSH public key; - **Username**: аналогічний username, як і в Azure Cloud Shell, типу ki251_mvv; - **SSH public key source**: Generate new key pair; - **SSH Key Type**: Ed25519 SSH Format; **Disks** (змінювати тільки вказані поля): - **OS disk type:** Standard SSD (locally-redundant storage); **Networking** (змінювати тільки вказані поля): - **Select a load balancer**: Create a load balancer - **Name**: lb-xxx-yyy-zzz-001, де xxx — скорочена назва обраного, серед доступних в політиці, регіонів, яка застосовується для навчальних Subscriptions Azure for Students, [відповідно до цього файлу](https://github.com/Azure/terraform-azurerm-caf-enterprise-scale/blob/main/modules/connectivity/locals.geo_codes.tf.json), що містить відповідність між повною та скороченою назвою регіону, а yyy — ініціали студента, zzz — номер варіанту; - Натиснути **Create** та зафіксувати зміни для Load balancer; **Advanced** (змінювати тільки вказані поля): - **Custom data and cloud init:** вказати Custom data, яка встановить вебсервер NGINX на усіх машинах Virtual Machine Scale Set і запише в його сторінку за замовчуванням "Hello from $(hostname)", де буде підставлено власне hostname машини: ```yaml package_update: true packages: - nginx write_files: - path: /var/www/html/index.html permissions: "0644" content: | placeholder runcmd: # Ensure nginx is enabled and running - systemctl enable nginx - systemctl restart nginx # Write a simple default page with the instance hostname - bash -lc 'echo "Hello from $(hostname)" > /var/www/html/index.html' ``` - Перейти у вкладу **Review + Create** та після валідації натиснути **Create**. 11. Перейти до щойно створеного Virtual Machine Scale Set, у вкладці **Overview** > **Properties** > **Networking** клікнути на імʼя попередньо створеного **Load balancer**. Після переходу в Load balancer, обрати **Monitoring** > **Insights**. Тут можна спостерігати статус Health probes віртуальних машин у складі Virtual Machine Scale Set. Можливо, треба певний час, щоб машини перейшли у статус Healthy. Після цього у **Load balancer** > **Settings** > **Frontend IP configuration** та скопіювати значення **IP address**. Виконати в Azure Cloud Shell (PowerShell) наступну команду, замінивши 1.2.3.4 на значення скопійованої адреси: ```powershell 1..10 | ForEach-Object { (Invoke-WebRequest -Uri "http://**1.2.3.4**").Content } ``` > Так було продемонстровано, що NGINX успішно працює на усіх машинах > у складі Virtual Machine Scale Set і що Load Balancer здійснює > балансування навантаження вебтрафіку. 12. Перейти у налаштування Virtual Machine Scale Set > **Instances**. На даний момент після створення їх має бути 2. Обрати довільний та клікнути Delete. 13. Додати правило для горизонтального масштабування Virtual machine scale set, коли навантаження на CPU буде вище 70% більше 5 хв поспіль. Перейти у **Availability + scale** > **Scaling** > **Configure** > **Custom autoscale**. Залишити поля **Autoscale setting name**, **Resource group**, **Predictive autoscale** без змін. У полях - **Scale mode** обрати **Scale based on a metric**; - в **Rules** обрати **Add a rule** та задати наступні значення: - **Operator**: Greater than; - **Metric threshold to trigger scale action**: 70%; - **Duration (minutes)**: 5; - **Time grain statistic**: Average; - **Time aggregation**: Average; - **Operation**: Increase count by; - **Cool down (minutes)**: 5; - **instance count**: **1**; **В Instance limits задати:** - Minimum: 1; - Maximum: 2; - Default: 1. Решту лишити за замовчуванням. Зберегти зміни, натиснувши **Save** вгорі. 14. Перебуваючи в цьому ж меню додати правило для Scale in, для сценарію, коли навантаження спадає та потрібно зменшити кількість машин у Virtual Machine Scale Set. Клікнути **Add a rule** та задати наступні значення: - **Operator**: Less than; - **Metric threshold to trigger scale action**: 30%; - **Duration (minutes)**: 5; - **Operation**: Decrease count by; - **instance count**: 1; - Натиснути **Add** та потім **Save**. 15. Протестувати правило масштабування на основі метрики. У **Virtual Machine Scale Set** > **Instances**, клікнути на доступну віртуальну машину, всередині якої перейти в **Operation** > **Run command** > **RunShellScript**, вставити наступний скрипт та виконати його. ```bash while :; do :; done & ``` Даний скрипт згенерує навантаження на систему, що призведе до горизонтального масштабування інстансів Virtual Machine Scale Set. 16. Повернутись у **Virtual Machine Scale Set** > **Instances** та через 5 хв (як було задано у правилі) оновити список та переконатись, що відбулось масштабування. Якщо воно не відбулось, крок 15 можна повторити та знову зачекати. 17. Завершити на віртуальній машині процеси, що було створено у кроці 15 та зачекати, поки кількість інстансів у Virtual Machine Scale Set не знизиться знову. 18. Видалити усі попередньо створені ресурси. Переконатись, що у Subscription більше немає ресурсів, що використовували би кредити.