WEBVTT

00:00:00.280 --> 00:00:03.780
Сьогоднішня тема – це те, про що майже всі чули, але майже ніхто не може пояснити.

00:00:04.220 --> 00:00:05.900
Серверлес. Що це таке насправді?

00:00:06.020 --> 00:00:08.620
Чи це справді просто код, що працює ніде, чи щось значно більше?

00:00:08.760 --> 00:00:10.260
Давайте з'ясуємо дещо одразу.

00:00:10.520 --> 00:00:12.380
Серверлес не означає відсутність серверів.

00:00:12.480 --> 00:00:16.480
Це означає, що ви про них не думаєте, і ця відмінність змінює все у створенні програмного забезпечення.

00:00:16.640 --> 00:00:21.820
До кінця цього епізоду ви зрозумієте, що таке Azure Functions, як працює ціноутворення і коли їх варто використовувати.

00:00:21.820 --> 00:00:26.960
Ми розберемо це на складові, почавши з найбільшого міфу, що насправді означає серверлес.

00:00:27.100 --> 00:00:28.960
Давайте відразу розвіємо кілька міфів.

00:00:29.120 --> 00:00:32.440
Назва серверлес – це найгірший маркетинговий термін, який будь-коли вигадував Майкрософт.

00:00:32.520 --> 00:00:34.920
Він змушує людей думати, що жодних серверів взагалі не існує.

00:00:35.040 --> 00:00:37.320
Це неправда. Сервери є, і їх дуже багато.

00:00:37.460 --> 00:00:39.180
Просто вам ніколи не доводиться з ними взаємодіяти.

00:00:39.360 --> 00:00:42.980
20 років тому, якщо ви хотіли запустити код в інтернеті, вам доводилося багато працювати.

00:00:42.980 --> 00:00:47.640
Ви орендували віртуальну машину, встановлювали ОС, налаштовували веб-сервер і розгортали програму.

00:00:47.740 --> 00:00:52.440
Потім кожній вихідні ви витрачали на встановлення патчів безпеки та перевірку, чи не впало все о третій годині ночі.

00:00:52.540 --> 00:00:56.480
І ось у чому річ. Ви платили за той сервер незалежно від того, чи працював ваш код.

00:00:56.640 --> 00:00:59.080
Він просто гудів і спалював гроші, поки ви спали.

00:00:59.300 --> 00:01:01.640
Серверлес перевертає цю модель з ніг на голову.

00:01:01.800 --> 00:01:05.160
Ви пишете код, завантажуєте його, а платформа бере на себе все інше.

00:01:05.160 --> 00:01:08.560
Операційну систему, патчі безпеки, масштабування та доступність

00:01:08.560 --> 00:01:11.420
Ваша робота – лише написати важливу для бізнесу логіку.

00:01:11.600 --> 00:01:15.340
Уявіть це як різницю між роботою ресторанної кухні та торговим автоматом.

00:01:15.500 --> 00:01:19.200
Ресторанна кухня потребує персоналу, постійних запасів продуктів та обслуговування.

00:01:19.420 --> 00:01:22.780
Вона коштує грошей щодня, навіть якщо жоден клієнт не зайшов у двері.

00:01:22.780 --> 00:01:27.000
Торговий автомат просто стоїть у кутку, нічого не роблячи, поки хтось не натисне кнопку.

00:01:27.140 --> 00:01:29.740
Тоді він оживає, виконує свою роботу і знову засинає.

00:01:29.740 --> 00:01:32.200
Ви платите за електрику лише тоді, коли він реально працює.

00:01:32.340 --> 00:01:33.940
Це і є сервер-лес у стислому вигляді.

00:01:34.060 --> 00:01:36.100
Azure Functions – це версія такого підходу від Microsoft.

00:01:36.380 --> 00:01:38.680
Вона запускає невеликі фрагменти коду у відповідь на події.

00:01:38.880 --> 00:01:43.100
Ваш код перебуває в режимі сну, доки щось його не розбудить, потім він виконується, завершується і знову засинає.

00:01:43.240 --> 00:01:45.080
Отже, як насправді виглядає цей код?

00:01:45.260 --> 00:01:46.600
Що таке Azure Functions?

00:01:46.600 --> 00:01:49.940
Функція – це окремий фрагмент коду, що виконує одне конкретне завдання.

00:01:49.940 --> 00:01:54.240
Це все. Це не ціла програма зі сторінкою логіну, базою даних і 20 екранами.

00:01:54.400 --> 00:01:56.100
Це одне ціле спрямоване завдання.

00:01:56.280 --> 00:02:01.300
Уявіться, як вимикач світла у вашому домі або вимкнено, або увімкнено, коли виконується робота, а потім знову вимкнено.

00:02:01.440 --> 00:02:08.340
Традиційний веб-сервер – це протилежність, як залишити світло в усьому домі увімкненим 24 години на добу, 7 днів на тиждень, навіть коли нікого немає вдома.

00:02:08.440 --> 00:02:11.200
Azure Functions підтримує багато різних мов програмування.

00:02:11.200 --> 00:02:15.320
Ви можете використовувати те, що вам зручно – JavaScript, Python, C, Java, PowerShell.

00:02:15.440 --> 00:02:17.160
Тут немає єдиної правильної відповіді.

00:02:17.280 --> 00:02:18.880
Обирайте ту мову, яку ви вже знаєте.

00:02:19.020 --> 00:02:20.960
Тепер розберімося з поширеною плутаниною.

00:02:21.120 --> 00:02:23.160
Function App – це не те саме, що функція.

00:02:23.300 --> 00:02:24.740
Function App – це контейнер.

00:02:24.880 --> 00:02:26.700
Уявіть, це як ящик для інструментів.

00:02:26.820 --> 00:02:29.880
Ви створюєте один Function App і додаєте в цей ящик кілька функцій.

00:02:30.020 --> 00:02:32.940
Кожна функція – це окремий інструмент, що виконує свою власну роботу.

00:02:32.940 --> 00:02:38.580
У вас може бути одна функція для реєстрації користувачів, інша – для обробки завантажених зображень і третя – для надсилання нічних звітів.

00:02:38.720 --> 00:02:41.420
Усі вони знаходяться в одному ящику, але працюють незалежно.

00:02:41.560 --> 00:02:44.400
Ще дещо про функції «Вони за своєю природою не мають стану» – стейтлас.

00:02:44.540 --> 00:02:46.780
Це означає, що вони нічого не пам'ятають між запусками.

00:02:46.920 --> 00:02:49.600
Якщо ваша функція обробила файл і завершила роботу – на цьому все.

00:02:49.760 --> 00:02:52.760
Наступного разу вона запускається з чистого аркуша без жодних спогадів про попередній запуск.

00:02:52.760 --> 00:02:56.340
Це звучить як обмеження, але насправді саме ця особливість робить їх такими потужними.

00:02:56.460 --> 00:02:58.320
Оскільки функції не зберігають пам'ять чи стан,

00:02:58.420 --> 00:03:01.600
Azure може миттєво запустити 100 копій вашої функції під час стрибків трафіку

00:03:01.600 --> 00:03:03.720
і так само швидко вимкнути їх, коли трафік падає.

00:03:03.860 --> 00:03:07.060
Ось як ви отримуєте масштабованість, не сплачуючи за простоюючі сервери.

00:03:07.200 --> 00:03:09.860
Виникає питання, якщо функція просто стоїть і нічого не робить,

00:03:09.940 --> 00:03:11.940
поки щось її не розбудить, то що саме її будить?

00:03:12.080 --> 00:03:13.900
Саме тут на допомогу приходять тригери.

00:03:14.060 --> 00:03:15.060
Тригери – це коли?

00:03:15.060 --> 00:03:18.140
Кожна функція повинна мати рівно один тригер, і це обов'язково.

00:03:18.240 --> 00:03:20.700
Тригер – це подія, яка змушує вашу функцію прокинутися.

00:03:20.880 --> 00:03:23.460
Без нього ваш код просто стоятиме і не робитиме абсолютно нічого.

00:03:23.600 --> 00:03:25.100
Уявіть тригери як дверний дзвінок.

00:03:25.280 --> 00:03:27.140
Ваша функція знаходиться всередині будинку і чекає.

00:03:27.300 --> 00:03:28.800
Вона може чекати нескінченно довго.

00:03:28.980 --> 00:03:31.000
Нічого не станеться, доки хтось не подзвонить у двері.

00:03:31.100 --> 00:03:32.880
Тоді функція миттєво активується, відчиняє двері,

00:03:32.960 --> 00:03:34.880
виконує свою роботу і повертається в режим очікування.

00:03:34.880 --> 00:03:37.920
Існує чотири типи тригерів, з якими новачки стикаються найчастіше.

00:03:38.040 --> 00:03:40.620
HTTP-тригер – це найпоширеніша точка відліку.

00:03:40.800 --> 00:03:44.220
Хтось відвідує URL або робить ARRI запит, і ваша функція спрацьовує.

00:03:44.400 --> 00:03:48.040
Саме так ви створюєте легковагові ARRI без налаштування повноцінного веб-сервера.

00:03:48.120 --> 00:03:51.120
Також існує таймерний тригер, який запускається за розкладом.

00:03:51.260 --> 00:03:55.380
Ви задаєте крон-вираз, наприклад, виконання щогодини або о півночі щоночі,

00:03:55.460 --> 00:03:57.700
і ваша функція запускається саме в цей час.

00:03:57.700 --> 00:04:01.920
Це ідеально підходить для завдань з обслуговування, очищення або створення нічних звітів.

00:04:02.020 --> 00:04:05.240
Тригер-блоб об'єкта спрацьовує, коли файл завантажується в Azure Storage.

00:04:05.400 --> 00:04:07.880
Скажімо, хтось завантажує PDF-файл у певну папку.

00:04:08.000 --> 00:04:11.440
Тригер-блоб об'єкта виявляє це завантаження і автоматично запускає вашу функцію.

00:04:11.560 --> 00:04:15.040
Це дуже корисно для обробки зображень, конвертації документів та перевірки файлів.

00:04:15.140 --> 00:04:17.980
А тригер-черги спрацьовує, коли в черзі з'являється повідомлення.

00:04:17.980 --> 00:04:20.880
Черги – це спосіб роз'єднати різні частини вашої системи.

00:04:20.960 --> 00:04:25.280
Один сервіс додає повідомлення в чергу, а ваша функція підхоплює його і обробляє, коли буде готова.

00:04:25.400 --> 00:04:28.680
Це запобігає ситуації, коли один повільний сервіс блокує роботу всього іншого.

00:04:28.860 --> 00:04:29.800
Ось головний момент.

00:04:29.980 --> 00:04:33.400
Коли тригер спрацьовує, він автоматично передає дані у вашу функцію.

00:04:33.540 --> 00:04:36.340
Вам не потрібно опитувати систему або перевіряти, чи щось сталося.

00:04:36.480 --> 00:04:39.500
Тригер надає вам усе необхідне, а ваша функція просто це обробляє.

00:04:39.660 --> 00:04:42.360
Функція без тригера – це просто код, який нічого не робить.

00:04:42.360 --> 00:04:44.340
Тригер – це те, що дає їй призначення.

00:04:44.500 --> 00:04:46.800
Отже, тригер підказує вашій функції, коли працювати.

00:04:46.940 --> 00:04:48.840
Але звідки беруться дані і куди вони йдуть?

00:04:48.940 --> 00:04:51.020
Ось тут на допомогу приходять прив'язки bindings.

00:04:51.200 --> 00:04:53.220
Прив'язки – дані на вхід, дані на вихід.

00:04:53.360 --> 00:04:58.440
Прив'язки – це спосіб вказати функції, які дані читати і куди надсилати результати, не пишучи зайвий код.

00:04:58.580 --> 00:05:00.580
Це звучить складно, тож дозвольте спростити.

00:05:00.780 --> 00:05:01.780
Існує два типи.

00:05:01.920 --> 00:05:04.120
Вхідні прив'язки передають дані у вашу функцію.

00:05:04.280 --> 00:05:06.420
Вихідні прив'язки відправляють дані назовні.

00:05:06.420 --> 00:05:11.740
Без прив'язок вам довелося б щоразу писати коди SDK для взаємодії зі сховищем, базою даних чи чергою.

00:05:11.900 --> 00:05:16.540
Вам довелося б керувати рядками підключення, повторними спробами, серіалізацією та десеріалізацією даних.

00:05:16.660 --> 00:05:19.140
Це занадто багато шабленого коду лише для того, щоб прочитати файл.

00:05:19.240 --> 00:05:21.420
З прив'язками ви просто оголошуєте те, що вам потрібно.

00:05:21.540 --> 00:05:25.420
Ви кажете «Я хочу читати з цього контейнера блоб» або «Я хочу писати в цю чергу».

00:05:25.420 --> 00:05:27.440
Виконувальне середовище бере на себе все інше.

00:05:27.440 --> 00:05:31.240
Воно відкриває з'єднання, считує дані і передає їх у вашу функцію як параметр.

00:05:31.360 --> 00:05:35.500
Коли функція завершує роботу, вона бере результат і записує його туди, куди ви вказали.

00:05:35.660 --> 00:05:37.140
Уявіть прив'язки як труби.

00:05:37.320 --> 00:05:40.560
Ви з'єднуєте свою функцію зі сховищем, базою даних або чергою.

00:05:40.740 --> 00:05:42.840
Дані протікають через ці труби автоматично.

00:05:43.080 --> 00:05:45.360
Вашій функції не потрібно знати, як працюють ці труби.

00:05:45.560 --> 00:05:48.260
Вона просто отримує те, що надходить, і відправляє те, що має вийти.

00:05:48.400 --> 00:05:49.460
Ось конкретний приклад.

00:05:49.460 --> 00:05:51.740
Скажімо, у вас є вхідна прив'язка до блоб-об'єкта.

00:05:51.860 --> 00:05:55.580
Коли ваша функція запускається, вона автоматично считує файл із блоб-сховища та передає його вам як параметр.

00:05:55.720 --> 00:05:57.860
Вам не потрібно писати жодного коду SDK для сховища.

00:05:57.980 --> 00:05:59.780
Ви просто отримуєте дані та обробляєте їх.

00:05:59.920 --> 00:06:01.760
Інший приклад – прив'язка виводу до черги.

00:06:01.920 --> 00:06:04.700
Ваша функція щось опрацьовує і наприкінці повертає значення.

00:06:04.900 --> 00:06:07.940
Середовище виконання бере це значення, все реалізує його та додає до черги.

00:06:08.080 --> 00:06:09.640
Ви не пишете ніякого коду для черги.

00:06:09.780 --> 00:06:11.080
Ви просто повертаєте значення.

00:06:11.080 --> 00:06:12.600
Прив'язки є необов'язковими.

00:06:12.800 --> 00:06:14.580
Їх може бути нуль, одна або багато.

00:06:14.760 --> 00:06:17.460
Деяким функціям потрібен лише тригер без жодних прив'язок.

00:06:17.640 --> 00:06:20.620
Інші можуть мати три або чотири прив'язки до різних службових.

00:06:20.740 --> 00:06:24.160
Поєднання тригерів і прив'язок робить Azure Function з такими потужними.

00:06:24.340 --> 00:06:27.200
Ви пишете бізнес-логіку, сам код для прийняття рішень.

00:06:27.360 --> 00:06:29.440
Платформа бере на себе всю інтеграцію.

00:06:29.660 --> 00:06:33.140
Ваша функція залишається невеликою, цілеспрямованою та зрозумілою.

00:06:33.300 --> 00:06:34.640
Питання ціноутворення

00:06:34.640 --> 00:06:37.300
Ціноутворення – це те, що дивує більшість початківців.

00:06:37.440 --> 00:06:39.820
Для більшості людей план споживання «Консампшенплен» є типовим вибором

00:06:39.820 --> 00:06:41.820
і в 90% випадків варто починати саме з нього.

00:06:41.980 --> 00:06:42.940
Ось як це працює.

00:06:43.080 --> 00:06:45.440
Ви платите лише тоді, коли ваша функція реально виконується.

00:06:45.580 --> 00:06:47.400
Коли вона неактивна, ви нічого не платите.

00:06:47.580 --> 00:06:48.800
Нуль, жодної копійки.

00:06:48.980 --> 00:06:50.840
Рахунок складається з двох компонентів.

00:06:50.940 --> 00:06:54.160
По-перше, кількість виконань, скільки разів спрацювала ваша функція.

00:06:54.160 --> 00:06:57.620
По-друге, час виконання, що вимірюється в так званих «ГБ-секундах».

00:06:57.620 --> 00:07:01.320
Це, по суті, тривалість роботи вашої функції, помножена на використаний обсяг пам'яті.

00:07:01.600 --> 00:07:02.960
Безкоштовна квота є щедрою.

00:07:03.140 --> 00:07:07.460
Ви отримуєте 1 мільйон виконань на місяць і 400 тисяч гігабайтів секунд абсолютно безкоштовно.

00:07:07.620 --> 00:07:11.480
Для більшості малих проєктів, хобі-додатків та прототипів ви ніколи не заплатите ні цента.

00:07:11.620 --> 00:07:12.040
Ніколи.

00:07:12.200 --> 00:07:15.120
Якщо ви перевищите безкоштовну квоту, тарифи все одно залишаються дуже низькими.

00:07:15.120 --> 00:07:16.880
20 центів за мільйон виконань.

00:07:16.980 --> 00:07:17.800
Це не помилка.

00:07:17.980 --> 00:07:19.580
20 центів за мільйон запусків.

00:07:19.720 --> 00:07:22.500
Уявіться, як оплату за електрику лише тоді, коли ви клацаєте вимикач.

00:07:22.640 --> 00:07:25.320
Немає щомісячної базової плати за наявність проводки у стінах.

00:07:25.420 --> 00:07:27.120
Ви платите лише за енергію, яку фактично використовуєте.

00:07:27.780 --> 00:07:29.220
Звісно, існують і інші плани.

00:07:29.380 --> 00:07:31.900
Flex Consumption новіший і надає підтримку віртуальних мереж.

00:07:32.000 --> 00:07:35.260
Premium підтримує ваші функції завжди гарячими, тому затримок при холодному старті немає.

00:07:35.260 --> 00:07:38.500
Dedicated надає вам фіксовані потужності на традиційному плані App Service.

00:07:38.700 --> 00:07:41.420
Але для початку роботи Consumption це майже завжди правильний вибір.

00:07:41.540 --> 00:07:42.900
Однак є одне застереження.

00:07:43.080 --> 00:07:46.440
Безкоштовна квота розподіляється між усіма вашими функціональними додатками в межах однієї підписки.

00:07:46.600 --> 00:07:49.940
Якщо у вас 10 додатків, вони всі використовують той самий мільйон безкоштовних виконань.

00:07:50.060 --> 00:07:52.900
Тож слідкуйте за цим, якщо почнете створювати більше кількох додатків.

00:07:52.900 --> 00:07:54.280
Ціноутворення чудове.

00:07:54.380 --> 00:07:56.480
Але давайте перейдемо до реального прикладу.

00:07:56.480 --> 00:07:58.020
Сценарій із реального життя.

00:07:58.180 --> 00:08:01.140
Уявіть, що ви керуєте веб-сайтом, куди користувачі завантажують фотопрофілю.

00:08:01.280 --> 00:08:03.980
Ці зображення величезні, наприклад, по 10 МБ кожне.

00:08:04.100 --> 00:08:06.000
І це спричиняє кілька реальних проблем.

00:08:06.220 --> 00:08:09.920
Великі файли дорожче зберігати, вони сповільнюють сайт при завантаженні сторінок

00:08:09.920 --> 00:08:12.600
і дратують користувачів, які змушені чекати на фото.

00:08:12.600 --> 00:08:16.080
Отже, вам потрібен спосіб автоматичного стиснення цих зображень.

00:08:16.200 --> 00:08:19.720
Без Azure Functions вам довелося б створювати фоновий робочий процес з нуля.

00:08:19.720 --> 00:08:23.800
Це означає пошук окремого сервера, налаштування черги для керування навантаженням

00:08:23.800 --> 00:08:25.800
та написання коду для всіх цих компонентів.

00:08:25.920 --> 00:08:29.580
Це купа зайвої складності для такої простої справи, як стиснення зображення.

00:08:29.760 --> 00:08:33.460
З Azure Functions вам потрібен лише один тригер-блоб-сховища та одна функція.

00:08:33.640 --> 00:08:35.040
Жодних турбот про сервери.

00:08:35.200 --> 00:08:37.040
Дозвольте пояснити, як це працює.

00:08:37.160 --> 00:08:40.740
Користувач завантажує фото на ваш сайт і файл потрапляє в Azure Blob Storage.

00:08:40.940 --> 00:08:43.860
Щойно він з'являється там, автоматично спрацьовує тригер-блоб-сховища.

00:08:43.860 --> 00:08:48.260
Ваша функція прокидається, запускає код стиснення і зберігає зменшену версію назаду у сховище.

00:08:48.420 --> 00:08:50.340
Все це відбувається за лічені секунди.

00:08:50.480 --> 00:08:54.600
Користувач не чекає, бо весь процес відбувається у фоновому режимі абсолютно непомітно.

00:08:54.760 --> 00:08:59.100
Ось ще один повсякденний приклад – надсилання вітального листа, коли хтось реєструється у вашому сервісі.

00:08:59.220 --> 00:09:02.140
HTTP-тригер перехоплює запит на реєстрацію з вашого сайту.

00:09:02.340 --> 00:09:04.880
Ваша функція активується, бере адресу електронної пошти користувача,

00:09:04.980 --> 00:09:07.180
надсилає вітальне повідомлення через SendGrid і все готово.

00:09:07.180 --> 00:09:09.160
Користувач отримує лист майже миттєво.

00:09:09.300 --> 00:09:11.860
Не потрібно налаштовувати поштовий сервер чи чергу відправлення.

00:09:12.020 --> 00:09:14.020
Лише одна функція, одна робота і готово.

00:09:14.180 --> 00:09:16.680
Саме для таких завдань і були створені Azure Functions.

00:09:16.840 --> 00:09:19.060
Невеликі, цілеспрямовані, подієві завдання.

00:09:19.240 --> 00:09:21.320
Немасивні додатки, нескладні робочі процеси,

00:09:21.400 --> 00:09:24.440
а одна добре виконана справа ініційована подією десь в іншому місці.

00:09:24.580 --> 00:09:26.520
Коли використовувати Azure Functions?

00:09:26.520 --> 00:09:29.920
Тож коли варто братися за функцію, а коли краще використати щось інше?

00:09:30.040 --> 00:09:31.840
Ось швидкий спосіб прийняти рішення.

00:09:31.840 --> 00:09:35.780
Запитайте себе, чи є завдання коротким, чи воно подієве і чи є воно безстатусним.

00:09:35.960 --> 00:09:37.720
Якщо ви відповіли так на всі три питання,

00:09:37.840 --> 00:09:39.740
Azure Functions – ймовірно правильний інструмент.

00:09:39.980 --> 00:09:41.900
Почнемо з вдалих варіантів використання.

00:09:42.080 --> 00:09:44.300
ARRI та WEBHOOK ідеально для цього підходять.

00:09:44.460 --> 00:09:47.680
Вам потрібна легка кінцева точка, яка відповідає на HTTP-запит,

00:09:47.820 --> 00:09:51.760
виконує одну дію і повертає результат саме для цього створені HTTP-тригери.

00:09:51.760 --> 00:09:54.480
Обробка файлів та зображень – ще один важливий випадок.

00:09:54.620 --> 00:09:57.000
Файл потрапляє у сховище, функція запускається,

00:09:57.000 --> 00:09:59.720
обробляє його і зберігає результат, і все це без сервера.

00:09:59.900 --> 00:10:03.080
Заплановані завдання, як отнічне очищення або створення звітів,

00:10:03.200 --> 00:10:04.540
чудово працюють із таймерами.

00:10:04.700 --> 00:10:07.980
Перетворення даних для ETL-конвейерів також є поширеним явищем.

00:10:08.160 --> 00:10:10.200
Функції ідеально підходять для інтеграції,

00:10:10.320 --> 00:10:12.920
поєднуючи сервіси, які не взаємодіють самі по собі.

00:10:13.040 --> 00:10:16.040
Тепер поговоримо про те, коли функції не є найкращим рішенням.

00:10:16.180 --> 00:10:18.920
Довготривалі процеси – це проблема, оскільки в плані споживання

00:10:18.920 --> 00:10:21.520
функції мають ліміт часу 5 хвилин за замовчуванням

00:10:21.520 --> 00:10:23.480
або до 10 хвилин, якщо налаштувати.

00:10:23.640 --> 00:10:26.520
Якщо ваше завдання триває довше, вам потрібне інше рішення.

00:10:26.720 --> 00:10:28.800
Станові додатки – ще одна невідповідність.

00:10:28.960 --> 00:10:31.220
Функції нічого не запам'ятовують між запусками.

00:10:31.420 --> 00:10:33.000
Якщо вам потрібно підтримувати стан сеансу

00:10:33.000 --> 00:10:35.700
або відстежувати прогрес між кроками, це суперечить їхній архітектурі.

00:10:35.820 --> 00:10:38.180
Важкі обчислювальні навантаження також не підходять.

00:10:38.320 --> 00:10:40.480
Якщо вам потрібен тривалий час роботи процесора,

00:10:40.600 --> 00:10:42.680
краще обрати віртуальну машину або контейнер.

00:10:42.680 --> 00:10:45.600
Складні робочі процеси, де одне завдання залежить від іншого,

00:10:45.720 --> 00:10:48.300
краще обробляти через Jura Ball Functions або Logic Apps.

00:10:48.460 --> 00:10:50.060
Ось короткий огляд альтернатив.

00:10:50.200 --> 00:10:53.480
Azure Logic Apps – це варіант без написання коду для підключення сервісів.

00:10:53.620 --> 00:10:55.080
Якщо вам не потрібно писати власний код,

00:10:55.200 --> 00:10:57.480
Logic Apps впораються із завданням через візуальний редактор.

00:10:57.600 --> 00:10:59.760
Azure App Service призначений для повноцінних веб-додатків,

00:10:59.860 --> 00:11:01.200
що працюють 24 сьомих.

00:11:01.360 --> 00:11:03.140
Якщо вам потрібен повноцінний сайт або ARRI,

00:11:03.260 --> 00:11:04.720
що працює постійно, це ваш інструмент.

00:11:04.960 --> 00:11:07.200
Azure Container Apps надає контейнеризовані мікросервіси

00:11:07.200 --> 00:11:08.940
з більшим контролем над середовищем виконання.

00:11:09.080 --> 00:11:12.160
А Azure Virtual Machines дає повний контроль над операційною системою,

00:11:12.280 --> 00:11:13.040
якщо це потрібно.

00:11:13.160 --> 00:11:14.200
Ось просте правило.

00:11:14.380 --> 00:11:16.740
Якщо ви можете описати завдання одним реченням,

00:11:16.800 --> 00:11:18.900
це, імовірно, чудовий кандидат для функції.

00:11:19.080 --> 00:11:21.060
Стиснути зображення після завантаження.

00:11:21.220 --> 00:11:23.780
Надіслати привітальний лист після реєстрації користувача.

00:11:23.940 --> 00:11:25.980
Виконувати очищення щоночі о півночі.

00:11:26.100 --> 00:11:28.320
Одне речення, одне завдання, одна функція.

00:11:28.440 --> 00:11:30.620
Поширені помилки новачків, яких варто уникати.

00:11:30.620 --> 00:11:33.340
Тепер поговоримо про кілька моментів, на які варто звернути увагу.

00:11:33.440 --> 00:11:36.000
Це помилки, на яких майже всі спідкуються на початку.

00:11:36.140 --> 00:11:39.420
Типова помилка новачків – думати, що функції завжди безкоштовні.

00:11:39.660 --> 00:11:42.440
Безкоштовний ліміт щедрий, мільйон виконань звучить вагомо,

00:11:42.540 --> 00:11:45.920
але якщо ваша функція стане популярною або зазнає атаки ботів,

00:11:46.040 --> 00:11:47.400
ліміт швидко вичерпається.

00:11:47.560 --> 00:11:50.120
Тож стежте за використанням, налаштуйте бюджетні сповіщення Azure

00:11:50.120 --> 00:11:52.440
і не отримуйте несподіваних рахунків наприкінці місяця.

00:11:52.440 --> 00:11:54.780
Ще одна помилка – ігнорування холодних стартів.

00:11:54.880 --> 00:11:58.100
Коли функція запускається після періоду бездіяльності, це займає більше часу.

00:11:58.220 --> 00:12:00.360
У плані споживання це може тривати кілька секунд.

00:12:00.580 --> 00:12:02.180
Для більшості випадків це прийнятно.

00:12:02.400 --> 00:12:04.520
Але якщо ви створюєте арі, чутливий до затримок,

00:12:04.620 --> 00:12:06.820
де важлива кожна мілісекунда, розгляньте преміум-план

00:12:06.820 --> 00:12:08.680
або увімкніть постійно готові екземпляри.

00:12:08.800 --> 00:12:11.660
І ще одна помилка – написання функцій, які працюють надто довго.

00:12:11.660 --> 00:12:15.580
План споживання має тайм-аут – 5 хвилин за замовчуванням, максимум 10 хвилин.

00:12:15.700 --> 00:12:18.120
Якщо ваша функція обробляє файл 15 хвилин,

00:12:18.240 --> 00:12:20.060
її буде примусово зупинено на півдорозі.

00:12:20.200 --> 00:12:23.440
Розбийте це завдання на менші частини або оберіть інший план розміщення.

00:12:23.640 --> 00:12:27.040
Ще одна часта помилка – не використовувати розгортання, запуск із пакета.

00:12:27.200 --> 00:12:30.200
Це проста зміна конфігурації, що покращує холодний старт

00:12:30.200 --> 00:12:31.740
і робить розгортання надійнішим.

00:12:31.900 --> 00:12:34.880
Замість копіювання окремих файлів ви розгортаєте zip-пакет.

00:12:34.880 --> 00:12:37.340
Це одна позначка на порталі – просто зробіть це.

00:12:37.500 --> 00:12:40.760
Відкриття HTTP endpoint-пинтів без автентифікації – ще одна пастка.

00:12:40.960 --> 00:12:43.100
Легко залишити функцію анонімною під час тестування,

00:12:43.220 --> 00:12:44.500
а потім забути обмежити доступ.

00:12:44.680 --> 00:12:46.820
Встановлюйте рівень авторизації правильно з самого початку.

00:12:47.000 --> 00:12:48.660
Використовуйте ключі функції або адміністратора.

00:12:48.800 --> 00:12:49.960
Не залишайте двері відчиненими.

00:12:50.120 --> 00:12:51.540
Використання одного облікового запису зберігання

00:12:51.540 --> 00:12:53.060
для кількох функціональних застосунків – теж проблема.

00:12:53.060 --> 00:12:55.000
Під час розробки спільно використовувати їх можна.

00:12:55.000 --> 00:12:56.840
У робочому середовищі кожен застосунок повинен мати

00:12:56.840 --> 00:12:58.080
власний обліковий запис зберігання.

00:12:58.240 --> 00:12:59.920
Інакше виникне проблема галасливого сусіда,

00:13:00.020 --> 00:13:01.840
коли трафік однієї функції сповільнює іншу.

00:13:01.940 --> 00:13:04.320
І нарешті – відмова від увімкнення Application Insights.

00:13:04.520 --> 00:13:05.920
Без нього ви працюєте на осліп.

00:13:06.060 --> 00:13:08.480
Ви не бачите мете збоїв, помилок чи проблем із продуктивністю.

00:13:08.620 --> 00:13:10.340
Ви не знатімєте, чи працює функція занадто довго,

00:13:10.400 --> 00:13:11.600
чи завершується з помилкою тихо.

00:13:11.740 --> 00:13:12.960
Увімкніть це з першого дня.

00:13:12.960 --> 00:13:15.700
Це займає 30 секунд і рятує від годин налагодження.

00:13:15.840 --> 00:13:18.040
Головне правило всього цього – функції мають бути малими,

00:13:18.160 --> 00:13:19.460
цілеспрямованими та безстановою.

00:13:19.620 --> 00:13:21.840
Одне завдання на одну функцію – нічого більше.

00:13:21.960 --> 00:13:23.100
Отже, це вся система.

00:13:23.280 --> 00:13:25.020
Azure Functions – це безсерверні обчислення,

00:13:25.120 --> 00:13:27.040
що запускають фрагменти коду у відповідь на події.

00:13:27.220 --> 00:13:29.340
Ви платите лише тоді, коли ваш код виконується.

00:13:29.480 --> 00:13:31.380
Тригери вказують функції, коли прокидатися,

00:13:31.480 --> 00:13:33.320
прив'язки підключають її до потрібних даних,

00:13:33.380 --> 00:13:36.080
а план споживання робить її майже безкоштовною для малих проєктів.

00:13:36.080 --> 00:13:40.580
Ваш найкращий крок зараз – створити просту функцію з HTTP тригером на порталі Azure.

00:13:40.740 --> 00:13:43.000
Це займає 5 хвилин і нічого не коштує.

00:13:43.140 --> 00:13:46.000
Підпишіться на Microsoft Knowledge Nuggets для простих пояснень

00:13:46.000 --> 00:13:49.340
і поділіться цим із тим, хто постійно запитує, що таке серверлес.

00:13:49.500 --> 00:13:49.760
Фрав.
