Перейти до вмісту

Модуль 3.8: Azure Functions та Serverless

Складність: [MEDIUM] | Час на виконання: 2 год | Передумови: Модуль 3.4 (Blob Storage), Модуль 3.1 (Entra ID)

Чому цей модуль важливий

Розділ «Чому цей модуль важливий»

У 2022 році e-commerce компанія обробляла фотографії товарів. Процес був простим: клієнт завантажує фото, а сервер робить три копії різного розміру (мініатюра, середня, велика). Вони запускали це на двох потужних віртуалках, які коштували $280 на місяць. Вдень вони обробляли 200 фото на годину, а вночі — нуль. На Чорну п’ятницю прийшло 15 000 фото на годину, сервери “зависли”, і виникла черга на 3 години. Вони перейшли на Azure Functions. Тепер кожне фото обробляється за 2 секунди після завантаження. Система сама виросла до сотень одночасних запусків у пік і вимкнулася вночі. Рахунок впав до $23 на місяць, а черги зникли назавжди.

Azure Functions — це FaaS (Function-as-a-Service) платформа від Microsoft. Ви пишете лише невеликий шматочок коду (функцію), який запускається у відповідь на подію: HTTP-запит, новий файл у сховищі, повідомлення в черзі або таймер. Azure бере на себе все інше: сервери, масштабування та оновлення ОС. Ви платите тільки за мілісекунди, поки ваш код реально працює.

У цьому модулі ви навчитеся обирати плани розміщення, розберетеся, як Triggers та Bindings дозволяють писати менше коду для інтеграції, та дізнаєтеся про Durable Functions для створення складних багатокрокових процесів.


Плани розміщення (Hosting Plans)

Розділ «Плани розміщення (Hosting Plans)»

Від плану залежить, як ваша функція масштабується та скільки вона коштує.

ФункціяConsumptionPremiumDedicated
МасштабуванняАвтоматичне (до 200)Швидке (до 100)Вами (App Service Plan)
Scale to zeroТакОпційно (min 1)Ні
Холодний стартТак (1-5 сек)НемаєНемає
Макс. час роботи5-10 хвилинБезлімітБезліміт
VNet (приватність)НіТакТак
ОплатаЗа кількість запусківЗа годину роботи ВМЗа App Service Plan

Порада: Consumption — найкращий вибір для економії. Premium потрібен, якщо вам критично важливо уникнути затримки при першому запуску (холодний старт) або потрібен доступ до приватної мережі.


Triggers та Bindings: Магія Azure

Розділ «Triggers та Bindings: Магія Azure»

Це те, що робить розробку на Azure Functions надшвидкою.

  • Trigger (Тригер): Визначає, ЧОМУ функція запускається (напр. “новий файл у папці uploads”).
  • Binding (Прив’язка): Визначає, ЯК функція спілкується з іншими сервісами без написання SDK-коду.
    • Input Binding: Функція отримує дані автоматично при старті (напр. читає рядок із бази).
    • Output Binding: Функція записує дані просто через return (напр. кладе файл у сховище або відправляє Email).

Durable Functions: Складні воркфлоу

Розділ «Durable Functions: Складні воркфлоу»

Звичайні функції “забудькуваті” — вони виконують одну задачу і вмирають. Durable Functions дозволяють створювати ланцюжки:

  1. Крок 1: Обробити фото.
  2. Крок 2: Дочекатися схвалення менеджера (може тривати дні!).
  3. Крок 3: Опублікувати на сайт. Azure сам зберігає стан процесу, тому ви не платите за час очікування.

ПомилкаЧому це стаєтьсяЯк виправити
Величезні функції (Monolith)Звичка писати звичайні програмиРозділяйте логіку на дрібні функції. Кожна функція — одна задача
Використання Consumption для APIСкарги на затримкиВикористовуйте Premium або встановіть --min-instances, щоб уникнути холодного старту
Секрети в налаштуваннях (Plain text)“Так швидше працює”Використовуйте Key Vault References у налаштуваннях програми
Відсутність логування”Функція не спрацювала і я не знаю чому”Завжди підключайте Application Insights для детального моніторингу помилок

1. Що таке "Холодний старт" (Cold Start) і як його мінімізувати?

Це затримка, коли функція запускається вперше після простою. Azure треба час, щоб виділити сервер і завантажити ваш код. Щоб його не було, використовуйте Premium Plan або Flex Consumption з постійно “розігрітими” екземплярами.

2. Чи можу я використовувати власні бібліотеки (напр. pandas для Python) у функціях?

Так. Ви просто додаєте їх у файл залежностей (напр. requirements.txt), і Azure встановить їх під час деплою. Але пам’ятайте: що більше бібліотек, то довший холодний старт.


Практична вправа: Створення HTTP API

Розділ «Практична вправа: Створення HTTP API»
  1. Ініціалізуйте проєкт через Azure Functions Core Tools (func init).
  2. Створіть функцію з тригером HTTP.
  3. Додайте Output Binding для Azure Queue Storage.
  4. Напишіть код, який отримує текст із запиту і кладе його в чергу.
  5. Деплой: опублікуйте функцію в Azure і протестуйте через curl.

Переходьте до Модуля 3.9: Azure Key Vault — ви навчитеся безпечно зберігати ключі та паролі, якими користуються ваші функції, та налаштовувати автоматичну ротацію секретів.