WEBVTT

00:00:00.120 --> 00:00:03.980
Dzisiejszy temat jest czymś, o czym słyszał niemal każdy, ale prawie nikt nie potrafi wyjaśnić.

00:00:04.320 --> 00:00:08.640
Serverless. Czym dokładnie jest? Czy to naprawdę tylko kod działający w próżni, czy coś znacznie większego?

00:00:08.940 --> 00:00:12.200
Wyjaśnijmy sobie jedną rzecz. Serverless nie oznacza braku serwerów.

00:00:12.360 --> 00:00:16.400
Oznacza, że nie musisz o nich myśleć, a to rozróżnienie zmienia wszystko w sposobie budowania oprogramowania.

00:00:16.620 --> 00:00:21.780
Pod koniec tego odcinka zrozumiesz, czym właściwie są Azure Functions, jak działa ich cennik i kiedy warto z nich korzystać.

00:00:21.980 --> 00:00:27.120
Rozbijemy to na elementy pierwsze, zaczynając od największego mitu, co tak naprawdę oznacza serverless.

00:00:27.120 --> 00:00:32.080
Obalmy od razu kilka mitów. Nazwa serverless to najgorszy termin marketingowy, jaki wymyślił Microsoft.

00:00:32.400 --> 00:00:34.980
Sprawia, że ludzie myślą, iż serwery w ogóle nie biorą udziału w procesie.

00:00:34.980 --> 00:00:39.120
To nieprawda. Serwery istnieją, jest ich mnóstwo. Po prostu nigdy nie musisz ich dotykać.

00:00:39.220 --> 00:00:42.800
20 lat temu, jeśli chciałeś uruchomić kod w internecie, musiałeś wykonać mnóstwo pracy.

00:00:43.100 --> 00:00:47.740
Wynajmowałeś maszynę wirtualną, instalowałeś system operacyjny, konfigurowałeś serwer w WU i wdrażałeś aplikację.

00:00:47.920 --> 00:00:52.540
Potem spędzałeś każdy weekend na poprawkach bezpieczeństwa i upewnianiu się, że całość nie padnie o 3 nad ranem.

00:00:52.540 --> 00:00:56.440
I w tym rzecz. Płaciłeś za ten serwer, niezależnie od tego, czy twój kod działał, czy nie.

00:00:56.660 --> 00:00:59.260
Działał w tle, marnując pieniądze, podczas gdy ty spałeś.

00:00:59.500 --> 00:01:01.600
Serverless wywraca ten model do góry nogami.

00:01:01.780 --> 00:01:04.960
Piszesz kod, wysyłasz go, a platforma zajmuje się całą resztą.

00:01:05.180 --> 00:01:08.600
Systemem operacyjnym, łatkami bezpieczeństwa, skalowaniem i dostępnością.

00:01:08.760 --> 00:01:11.240
Twoim zadaniem jest tylko napisanie istotnej logiki.

00:01:11.480 --> 00:01:15.640
Pomyśl o tym, jak o różnicy między prowadzeniem kuchni restauracyjnej, a automatem sprzedającym.

00:01:15.640 --> 00:01:19.460
Kuchnia restauracyjna wymaga pełnej obsługi, stałych dostaw i konserwacji.

00:01:19.620 --> 00:01:22.580
Kosztuje codziennie, nawet jeśli nikt nie przekroczy progu.

00:01:23.220 --> 00:01:26.780
Automat w rogu nic nie robi, dopóki ktoś nie naciśnie przycisku.

00:01:27.020 --> 00:01:29.660
Wtedy budzi się do życia, wykonuje zadanie i znów zasypia.

00:01:29.840 --> 00:01:32.080
Płacisz za prąd tylko wtedy, gdy rzeczywiście pracuje.

00:01:32.280 --> 00:01:33.840
Taki właśnie jest serverless w pigułce.

00:01:34.040 --> 00:01:36.260
Azure Functions to wersja Microsoftu tego rozwiązania.

00:01:36.460 --> 00:01:38.740
Uruchamia małe fragmenty kodu w odpowiedzi na zdarzenia.

00:01:38.980 --> 00:01:40.800
Twój kod śpi, dopóki coś go nie wybudzi.

00:01:40.920 --> 00:01:43.000
Potem działa, kończy pracę i znów zasypia.

00:01:43.000 --> 00:01:45.020
Jak więc faktycznie wygląda taki kod?

00:01:45.160 --> 00:01:46.480
Czym są Azure Functions?

00:01:46.700 --> 00:01:49.820
Funkcja to pojedynczy fragment kodu wykonujący jedno konkretne zadanie.

00:01:49.980 --> 00:01:50.480
To wszystko.

00:01:50.740 --> 00:01:54.440
To nie jest cała aplikacja ze stroną logowania, bazą danych i 20 ekranami.

00:01:54.600 --> 00:01:55.900
To jedno konkretne zadanie.

00:01:56.100 --> 00:02:01.200
Pomyśl o tym, jak o włączniku światła w domu albo jest wyłączony, albo włączony, gdy pracuje, a potem znowu wyłączony.

00:02:01.380 --> 00:02:03.040
Tradycyjny serwer www to przeciwieństwo.

00:02:03.140 --> 00:02:08.180
To jak zostawienie zapalonych świateł w całym domu 24 godziny na dobę, 7 dni w tygodniu, nawet gdy nikogo nie ma w środku.

00:02:08.340 --> 00:02:11.340
Azure Functions obsługują mnóstwo różnych języków programowania.

00:02:11.340 --> 00:02:15.400
Możesz użyć tego, w czym czujesz się pewnie, JavaScript, Python, C, Java, PowerShell.

00:02:15.560 --> 00:02:17.160
Nie ma tutaj jednej poprawnej odpowiedzi.

00:02:17.380 --> 00:02:18.660
Wybierz język, który już znasz.

00:02:18.820 --> 00:02:20.700
Teraz wyjaśnijmy pewne powszechne nieporozumienie.

00:02:20.900 --> 00:02:23.180
Aplikacja funkcji Function App to nie to samo, co funkcja.

00:02:23.360 --> 00:02:24.800
Aplikacja funkcji jest kontenerem.

00:02:25.020 --> 00:02:26.680
Pomyśl o niej, jak o skrzynce z narzędziami.

00:02:26.880 --> 00:02:30.000
Tworzysz jedną aplikację funkcji, a wewnątrz tej skrzynki dodajesz wiele funkcji.

00:02:30.220 --> 00:02:32.840
Każda funkcja to osobne narzędzie, które wykonuje własne zadanie.

00:02:32.840 --> 00:02:38.680
Możesz mieć jedną funkcję obsługującą rejestrację użytkowników, drugą przetwarzającą przesłane obrazy, a trzecią wysyłającą nocne raporty.

00:02:38.840 --> 00:02:41.520
Wszystkie żyją w tej samej skrzynce, ale działają niezależnie.

00:02:41.720 --> 00:02:42.880
Jeszcze jedna rzecz o funkcjach.

00:02:43.020 --> 00:02:44.280
Z założenia są bezstanowe.

00:02:44.480 --> 00:02:46.760
Oznacza to, że nie pamiętają niczego pomiędzy uruchomieniami.

00:02:46.960 --> 00:02:49.580
Jeśli twoja funkcja przetworzy plik i zakończy działanie, to wszystko.

00:02:49.800 --> 00:02:52.600
Przy następnym uruchomieniu startuje od zera, nie pamiętając poprzedniego razu.

00:02:52.840 --> 00:02:56.320
Brzmi to jak ograniczenie, ale w rzeczywistości jest cechą, która czyni je tak potężnymi.

00:02:56.320 --> 00:03:03.720
Ponieważ funkcje nie przechowują pamięci ani stanu, Azure może błyskawicznie uruchomić stokopii twojej funkcji przy skoku ruchu i równie szybko je zamknąć, gdy ruch spadnie.

00:03:03.900 --> 00:03:07.080
W ten sposób zyskujesz skalowalność, nie płacąc za bezczynne serwery.

00:03:07.200 --> 00:03:10.760
Oto pytanie, jeśli funkcja po prostu czeka i nic nie robi, dopóki coś jej nie wybudzi.

00:03:10.840 --> 00:03:11.880
To co właściwie ją wybudza?

00:03:12.040 --> 00:03:13.780
Tutaj wkraczają wyzwalacze, triggers.

00:03:14.140 --> 00:03:15.080
Wyzwalacze, czyli kiedy?

00:03:15.300 --> 00:03:18.320
Każda funkcja musi mieć dokładnie jeden wyzwalacz i to nie jest opcjonalne.

00:03:18.520 --> 00:03:20.720
Wyzwalacz to zdarzenie, które wybudza twoją funkcję.

00:03:20.960 --> 00:03:23.300
Bez niego twój kod po prostu czeka i nie robi zupełnie nic.

00:03:23.300 --> 00:03:25.220
Pomyśl o wyzwalaczach jak o dzwonku do drzwi.

00:03:25.400 --> 00:03:27.160
Twoja funkcja jest wewnątrz domu i czeka.

00:03:27.400 --> 00:03:28.720
Może czekać w nieskończoność.

00:03:28.880 --> 00:03:30.900
Nic się nie dzieje, dopóki ktoś nie zadzwoni do drzwi.

00:03:31.100 --> 00:03:34.680
Wtedy funkcja natychmiast reaguje, otwiera drzwi, wykonuje swoją pracę i wraca do czekania.

00:03:34.900 --> 00:03:38.060
Istnieją cztery wyzwalacze, z którymi początkujący spotykają się najczęściej.

00:03:38.220 --> 00:03:40.460
Wyzwalacz HTTP to najczęstszy punkt startowy.

00:03:40.660 --> 00:03:44.260
Ktoś odwiedza adres URL lub wykonuje wywołanie API, a twoja funkcja się uruchamia.

00:03:44.440 --> 00:03:47.680
W ten sposób budujesz lekkie API bez konfigurowania pełnego serwera www.

00:03:47.680 --> 00:03:51.340
Jest jeszcze wyzwalacz czasowy, timer trigger, który działa zgodnie z harmonogramem.

00:03:51.480 --> 00:03:57.660
Ustawiasz wyrażenie cron, na przykład uruchomienie co godzinę lub o pół nocy, a twoja funkcja uruchamia się dokładnie w tych momentach.

00:03:57.840 --> 00:04:01.840
Idealne rozwiązanie do zadań konserwacyjnych, czyszczenia danych czy generowania nocnych raportów.

00:04:02.020 --> 00:04:05.280
Wyzwalacz typu blob aktywuje się, gdy plik zostanie przesłany do usługi Azure Storage.

00:04:05.500 --> 00:04:08.040
Załóżmy, że ktoś przesyła plik PDF do konkretnego folderu.

00:04:08.220 --> 00:04:11.200
Wyzwalacz blob wykrywa to przesłanie i automatycznie uruchamia twoją funkcję.

00:04:11.420 --> 00:04:14.980
Jest to niezwykle przydatne przy przetwarzaniu obrazów, konwersji dokumentów i weryfikacji plików.

00:04:14.980 --> 00:04:18.120
Z kolei wyzwalacz kolejki aktywuje się, gdy w kolejce pojawi się nowa wiadomość.

00:04:18.240 --> 00:04:20.900
Kolejki pozwalają na odseparowanie różnych części systemu.

00:04:21.060 --> 00:04:25.240
Jeden serwis umieszcza wiadomość w kolejce, a twoja funkcja ją odbiera i przetwarza, gdy jest gotowa.

00:04:25.480 --> 00:04:28.540
Zapobiega to blokowaniu całego systemu przez jeden wolno działający serwis.

00:04:28.680 --> 00:04:29.980
Oto najważniejsza kwestia.

00:04:30.180 --> 00:04:33.420
Gdy wyzwalacz się aktywuje, automatycznie przekazuje dane do twojej funkcji.

00:04:33.620 --> 00:04:36.200
Nie musisz ich odpytywać ani sprawdzać, czy coś się wydarzyło.

00:04:36.380 --> 00:04:39.700
Wyzwalacz dostarcza wszystko, czego potrzebujesz, a twoja funkcja po prostu to przetwarza.

00:04:39.900 --> 00:04:42.380
Funkcja bez wyzwalacza to tylko kod, który nic nie robi.

00:04:42.380 --> 00:04:44.180
To właśnie wyzwalacz nadaje jej cel.

00:04:44.400 --> 00:04:46.780
Wyzwalacz mówi więc twojej funkcji, kiedy ma zostać uruchomiona.

00:04:46.980 --> 00:04:48.740
Ale skąd pochodzą dane i dokąd trafiają?

00:04:48.920 --> 00:04:50.380
Tu właśnie wkraczają powiązania bindings.

00:04:51.120 --> 00:04:53.200
Powiązania, dane wejściowe, dane wyjściowe.

00:04:53.380 --> 00:04:58.440
Powiązania pozwalają określić, jakie dane funkcja ma czytać i gdzie wysyłać wyniki, bez pisania dodatkowego kodu.

00:04:58.720 --> 00:05:00.480
Brzmi skomplikowanie, więc uprośćmy to.

00:05:00.700 --> 00:05:01.720
Istnieją dwa rodzaje.

00:05:01.920 --> 00:05:04.100
Powiązania wejściowe wprowadzają dane do twojej funkcji.

00:05:04.280 --> 00:05:06.420
Powiązania wyjściowe wysyłają dane na zewnątrz.

00:05:06.420 --> 00:05:11.760
Bez nich musiałbyś pisać kod SDK za każdym razem, gdy chcesz połączyć się z kątem magazynu, bazą danych czy kolejką.

00:05:12.020 --> 00:05:16.620
Musiałbyś obsługiwać parametry połączenia, ponowne próby, serializację danych i deserializację odpowiedzi.

00:05:16.760 --> 00:05:19.100
To mnóstwo dodatkowego kodu tylko po to, by odczytać plik.

00:05:19.300 --> 00:05:21.580
Dzięki powiązaniom po prostu deklarujesz, czego potrzebujesz.

00:05:21.780 --> 00:05:23.520
Mówisz, chcę czytać z tego kontenera blob.

00:05:23.720 --> 00:05:25.200
Albo chcę pisać do tej kolejki.

00:05:25.420 --> 00:05:27.380
Środowisko uruchomieniowe zajmuje się resztą.

00:05:27.580 --> 00:05:31.040
Otwiera połączenie, odczytuje dane i przekazuje je do funkcji jako parametr.

00:05:31.040 --> 00:05:35.420
Gdy funkcja kończy pracę, bierze wartość zwrotną i zapisuje ją we wskazanym miejscu.

00:05:35.620 --> 00:05:37.320
Wyobraź sobie powiązania jako rury.

00:05:37.540 --> 00:05:40.580
Łączysz funkcję z kątem magazynu, bazą danych lub kolejką.

00:05:40.860 --> 00:05:42.720
Dane płyną tymi rurami automatycznie.

00:05:42.920 --> 00:05:45.140
Twoja funkcja nie musi wiedzieć, jak te rury działają.

00:05:45.340 --> 00:05:48.360
Po prostu odbiera to, co przez nie przepływa i wysyła to, co ma wyjść na zewnątrz.

00:05:48.500 --> 00:05:49.480
Oto konkretny przykład.

00:05:49.740 --> 00:05:51.640
Załóżmy, że masz powiązanie wejściowe typu blob.

00:05:51.840 --> 00:05:55.520
Gdy Twoja funkcja się uruchamia, automatycznie odczytuje plik z magazynu blob i przekazuje go jako parametr.

00:05:55.520 --> 00:05:57.900
Nie musisz pisać żadnego kodu SDK do obsługi magazynu.

00:05:58.020 --> 00:05:59.760
Po prostu otrzymujesz dane i je przetwarzasz.

00:05:59.940 --> 00:06:00.500
Inny przykład.

00:06:00.640 --> 00:06:01.840
Wiązanie wyjściowe kolejki.

00:06:02.020 --> 00:06:04.600
Twoja funkcja coś przetwarza, a na końcu zwracasz wartość.

00:06:04.780 --> 00:06:08.100
Środowisko uruchomieniowe przejmuje tę wartość, serializuje ją i umieszcza w kolejce.

00:06:08.280 --> 00:06:09.660
Nie piszesz żadnego kodu kolejki.

00:06:09.840 --> 00:06:11.080
Po prostu zwracasz wartość.

00:06:11.260 --> 00:06:12.500
Wiązania są opcjonalne.

00:06:12.740 --> 00:06:14.240
Możesz mieć zero, jedno lub wiele.

00:06:14.500 --> 00:06:17.340
Niektóre funkcje potrzebują tylko wyzwalacza, bez żadnych wiązań.

00:06:17.500 --> 00:06:20.520
Inne mogą mieć trzy lub cztery wiązania łączące się z różnymi usługami.

00:06:20.520 --> 00:06:24.120
Połączenie wyzwalaczy i wiązań sprawia, że Azure Functions są tak potężne.

00:06:24.260 --> 00:06:27.360
Piszesz logikę biznesową, czyli faktyczny kod podejmujący decyzje.

00:06:27.500 --> 00:06:29.520
Platforma zajmuje się całą integracją.

00:06:29.740 --> 00:06:33.100
Twoja funkcja pozostaje mała, skoncentrowana i łatwa do zrozumienia.

00:06:33.720 --> 00:06:34.440
Kwestia cen.

00:06:34.640 --> 00:06:37.220
Cennik jest tym, co najbardziej zaskakuje początkujących.

00:06:37.400 --> 00:06:42.060
Dla większości osób plan zużycia Consumption Plan jest domyślnym wyborem i w 90% przypadków powinieneś od niego zacząć.

00:06:42.160 --> 00:06:42.920
Oto jak to działa.

00:06:43.140 --> 00:06:45.500
Płacisz tylko wtedy, gdy twoja funkcja rzeczywiście działa.

00:06:45.720 --> 00:06:47.460
Kiedy jest bezczynna, nic nie płacisz.

00:06:47.660 --> 00:06:48.600
Zero ani grosza.

00:06:48.600 --> 00:06:50.720
Na rachunek składają się dwa elementy.

00:06:50.840 --> 00:06:54.120
Po pierwsze, liczba wykonań, czyli jak często uruchamia się twoja funkcja.

00:06:54.320 --> 00:06:56.760
Po drugie, czas wykonania, mierzony w tak zwanej.

00:06:56.920 --> 00:06:57.800
GB sekundach.

00:06:57.920 --> 00:07:01.340
To w zasadzie czas działania twojej funkcji pomnożony przez ilość użytej pamięci.

00:07:01.580 --> 00:07:02.840
Darmowy limit jest hojny.

00:07:03.060 --> 00:07:07.240
Dostajesz 1 milion wykonań miesięcznie i 400 tysięcy gigabajtów w sekund całkowicie za darmo.

00:07:07.460 --> 00:07:11.620
W przypadku większości małych projektów, aplikacji hobbystycznych i prototypów nigdy nie zapłacisz ani grosza.

00:07:11.820 --> 00:07:12.120
Nigdy.

00:07:12.340 --> 00:07:15.020
Jeśli przekroczysz darmowy limit, stawki są nadal niezwykle niskie.

00:07:15.020 --> 00:07:16.700
20 centów za milion wykonań.

00:07:16.700 --> 00:07:19.580
To nie jest błąd w druku. 20 centów za milion uruchomień.

00:07:19.700 --> 00:07:22.420
Pomyśl o tym, jak opłaceniu za prąd tylko wtedy, gdy włączasz przełącznik.

00:07:22.580 --> 00:07:25.440
Nie ma miesięcznej opłaty podstawowej za samo posiadanie instalacji elektrycznej w ścianach.

00:07:25.600 --> 00:07:27.680
Płacisz tylko za energię, którą faktycznie zużyjesz.

00:07:27.860 --> 00:07:29.040
Istnieją też inne plany.

00:07:29.240 --> 00:07:31.980
Flex Consumption jest nowszy i zapewnia wsparcie dla sieci wirtualnych.

00:07:32.140 --> 00:07:35.180
Premium utrzymuje funkcje w gotowości, więc nie ma opóźnienia typu cold start.

00:07:35.400 --> 00:07:38.440
Dedicated zapewnia stałą wydajność w ramach tradycyjnego planu App Service.

00:07:38.640 --> 00:07:41.620
Ale na początek plan Consumption jest właściwym wyborem prawie za każdym razem.

00:07:41.620 --> 00:07:42.720
Jedno ostrzeżenie.

00:07:42.960 --> 00:07:46.260
Darmowy limit jest współdzielony przez wszystkie twoje aplikacje funkcji w tej samej subskrypcji.

00:07:46.480 --> 00:07:50.080
Jeśli masz 10 aplikacji funkcji, wszystkie korzystają z tego samego jednego miliona darmowych wykonań.

00:07:50.220 --> 00:07:52.800
Więc miej na to oko, jeśli zaczniesz tworzyć ich więcej niż kilka.

00:07:53.000 --> 00:07:56.540
Cennik jest świetny, ale urealnijmy to za pomocą konkretnego przykładu.

00:07:56.740 --> 00:07:58.000
Scenariusz z prawdziwego życia.

00:07:58.260 --> 00:08:01.320
Wyobraź sobie, że prowadzisz stronę, na której użytkownicy wgrywają zdjęcia profilowe.

00:08:01.480 --> 00:08:03.920
Te obrazy są ogromne, mają po 10 megabajtów.

00:08:04.040 --> 00:08:05.980
A to powoduje kilka realnych problemów.

00:08:06.180 --> 00:08:09.800
Duże pliki kosztują więcej w przechowywaniu, spowalniają stronę przy ładowaniu

00:08:09.800 --> 00:08:12.640
i irytują użytkowników, którzy muszą czekać na zdjęcia.

00:08:12.860 --> 00:08:16.160
Potrzebujesz więc sposobu na automatyczne zmniejszanie tych obrazów.

00:08:16.340 --> 00:08:19.680
Bez Azure Functions musiałbyś stworzyć pracownika w tle od zera.

00:08:19.920 --> 00:08:25.620
Oznacza to zdobycie osobnego serwera, konfigurację kolejki zadań i pisanie kodu do obsługi wszystkich elementów.

00:08:25.740 --> 00:08:29.480
To mnóstwo niepotrzebnej złożoności jak na tak prostą rzecz, jak zmniejszenie obrazu.

00:08:29.720 --> 00:08:33.220
Dzięki Azure Functions potrzebujesz tylko jednego wyzwalacza typu blob i jednej funkcji.

00:08:33.440 --> 00:08:35.300
Żadnych serwerów, o które trzeba się martwić.

00:08:35.420 --> 00:08:37.040
Pozwól, że pokażę Ci, jak to działa.

00:08:37.040 --> 00:08:40.780
Użytkownik wgrywa zdjęcie na stronę, a plik trafia do pamięci Azure Blob Storage.

00:08:40.940 --> 00:08:43.900
W momencie pojawienia się pliku automatycznie uruchamia się wyzwalacz typu blob.

00:08:44.060 --> 00:08:48.340
Twoja funkcja budzi się, wykonuje kod kompresji i zapisuje mniejszą wersję z powrotem w pamięci.

00:08:48.580 --> 00:08:50.180
Wszystko to dzieje się w ciągu sekund.

00:08:50.360 --> 00:08:54.520
Użytkownik nigdy nie czeka, ponieważ cały proces odbywa się w tle, całkowicie niewidocznie.

00:08:54.740 --> 00:08:59.100
Oto kolejny codzienny przykład wysyłanie e-maila powitalnego, gdy ktoś rejestruje się w Twoim serwisie.

00:08:59.300 --> 00:09:02.100
Wyzwalacz HTTP przechwytuje żądanie rejestracji z Twojej strony.

00:09:02.100 --> 00:09:07.060
Twoja funkcja uruchamia się, pobiera adres e-mail użytkownika, wysyła wiadomość powitalną przez SendGrid i gotowe.

00:09:07.220 --> 00:09:09.220
Użytkownik otrzymuje e-mail niemal natychmiast.

00:09:09.440 --> 00:09:13.800
Żadnego serwera pocztowego, żadnej kolejki wysyłania, tylko jedna funkcja, jedno zadanie, koniec.

00:09:13.940 --> 00:09:16.700
To dokładnie te zadania, do których zaprojektowano Azure Functions.

00:09:16.920 --> 00:09:19.120
Małe, skoncentrowane zadania sterowane zdarzeniami.

00:09:19.340 --> 00:09:24.760
Nie ogromne aplikacje czy złożone procesy, tylko jedna rzecz zrobiona dobrze, wywołana przez coś, co dzieje się gdzie indziej.

00:09:24.760 --> 00:09:29.740
Kiedy używać Azure Functions? Kiedy więc sięgnąć po funkcje, a kiedy użyć czegoś innego?

00:09:29.900 --> 00:09:31.500
Oto szybki sposób na decyzję.

00:09:31.720 --> 00:09:35.740
Zadaj sobie pytanie, czy zadanie jest krótkie, sterowane zdarzeniami i czy jest bezstanowe.

00:09:35.960 --> 00:09:39.840
Jeśli odpowiedziałeś tak na wszystkie trzy Azure Functions, to prawdopodobnie właściwe narzędzie.

00:09:40.080 --> 00:09:41.920
Zacznijmy od dobrych przypadków użycia.

00:09:42.080 --> 00:09:44.180
API i webhooki to idealne dopasowanie.

00:09:44.440 --> 00:09:51.680
Potrzebujesz lekkiego punktu końcowego, który odpowiada na żądanie HTTP, wykonuje jedną rzecz i zwraca wynik dokładnie do tego stworzono wyzwalacze HTTP.

00:09:51.680 --> 00:09:54.500
Przetwarzanie plików i obrazów to kolejny ważny przykład.

00:09:54.700 --> 00:09:59.480
Plik trafia do pamięci, funkcja uruchamia się, przetwarza go i zapisuje wynik, wszystko bez serwera.

00:09:59.660 --> 00:10:04.740
Zaplanowane zadania, takie jak nocne czyszczenie czy generowanie raportów, świetnie sprawdzają się z wyzwalaczami czasowymi.

00:10:04.980 --> 00:10:07.800
Transformacja danych w potokach ETL również jest powszechna.

00:10:08.020 --> 00:10:12.880
Funkcje stanowią doskonałe spoiwo integracyjne, łącząc usługi, które naturalnie ze sobą nie współpracują.

00:10:13.100 --> 00:10:16.000
Teraz porozmawiajmy o tym, kiedy funkcje nie są dobrym rozwiązaniem.

00:10:16.000 --> 00:10:23.560
Długotrwałe procesy stanowią problem, ponieważ w planie zużycia funkcje mają domyślny limit czasu 5 minut, który można zwiększyć do 10 po konfiguracji.

00:10:23.780 --> 00:10:26.460
Jeśli Twoje zadanie trwa dłużej, potrzebujesz czegoś innego.

00:10:26.680 --> 00:10:28.680
Aplikacje stanowe również do nich nie pasują.

00:10:28.920 --> 00:10:31.220
Funkcje nie zapamiętują niczego pomiędzy uruchomieniami.

00:10:31.480 --> 00:10:35.480
Jeśli musisz utrzymać stan sesji lub śledzić postępy między krokami, działasz wbrew ich założeniom.

00:10:35.660 --> 00:10:38.020
Obciążające zadania obliczeniowe również się nie sprawdzają.

00:10:38.020 --> 00:10:42.780
Jeśli potrzebujesz stałego użycia procesora przez minuty lub godziny, lepszym wyborem będzie maszyna wirtualna lub kontener.

00:10:43.000 --> 00:10:48.320
Złożone przepływy pracy, w których jedno zadanie zależy od drugiego, lepiej obsłużą Durable Functions lub Logic Apps.

00:10:48.500 --> 00:10:50.160
Oto szybki przegląd alternatyw.

00:10:50.320 --> 00:10:53.360
Azure Logic Apps to opcja no-code służąca do łączenia usług.

00:10:53.600 --> 00:10:57.320
Jeśli nie musisz pisać własnego kodu, Logic Apps wykona pracę za pomocą wizualnego projektanta.

00:10:57.520 --> 00:11:01.240
Azure App Service jest przeznaczony dla pełnych aplikacji internetowych działających 24 siódmych.

00:11:01.360 --> 00:11:04.820
Jeśli potrzebujesz kompletnej witryny lub API, które jest zawsze dostępne, to jest Twoje narzędzie.

00:11:04.820 --> 00:11:08.900
Azure Container Apps oferuje konteneryzowane mikrousługi z większą kontrolą nad środowiskiem uruchomieniowym.

00:11:09.060 --> 00:11:13.100
A Azure Virtual Machines daje pełną kontrolę nad systemem operacyjnym, jeśli tego potrzebujesz.

00:11:13.260 --> 00:11:14.240
Oto prosta zasada.

00:11:14.500 --> 00:11:19.080
Jeśli potrafisz opisać zadanie w jednym zdaniu, prawdopodobnie jest ono dobrym kandydatem na funkcję.

00:11:19.280 --> 00:11:20.980
Kompresuj obrazy po ich przesłaniu.

00:11:21.260 --> 00:11:23.560
Wyślij powitalny e-mail, gdy ktoś się zarejestruje.

00:11:23.720 --> 00:11:26.020
Uruchamiaj zadanie czyszczenia każdej nocy o północy.

00:11:26.220 --> 00:11:28.260
Jedno zdanie, jedno zadanie, jedna funkcja.

00:11:28.420 --> 00:11:30.680
Typowe błędy początkujących, których należy unikać.

00:11:30.680 --> 00:11:33.280
Teraz porozmawiajmy o kilku rzeczach, na które trzeba uważać.

00:11:33.280 --> 00:11:35.820
To błędy, które przytrafiają się niemal każdemu na początku.

00:11:36.100 --> 00:11:39.400
Częstym błędem początkujących jest myślenie, że funkcje są zawsze darmowe.

00:11:39.620 --> 00:11:47.460
Darmowy limit jest hojny milion wykonań brzmi jak dużo, ale jeśli twoja funkcja stanie się popularna lub zostanie zaatakowana przez bota, te wykonania szybko się sumują.

00:11:47.720 --> 00:11:52.500
Dlatego monitoruj użycie ustaw alert budżetowy w Azure i unikaj niespodziewanych rachunków pod koniec miesiąca.

00:11:52.700 --> 00:11:54.880
Innym błędem jest ignorowanie zimnych startów.

00:11:55.060 --> 00:11:57.880
Pierwsze uruchomienie funkcji po okresie bezczynności trwa dłużej.

00:11:58.100 --> 00:12:00.180
W planie zużycia może to zająć kilka sekund.

00:12:00.180 --> 00:12:02.360
W większości przypadków jest to w porządku.

00:12:02.360 --> 00:12:08.860
Jeśli jednak tworzysz API wrażliwe na opóźnienia, gdzie liczy się każda milisekunda, rozważ plan premium lub włącz zawsze gotowe instancje.

00:12:09.080 --> 00:12:11.580
Jest jeszcze pisanie funkcji, które działają zbyt długo.

00:12:11.780 --> 00:12:15.480
Plan zużycia ma limit czasu domyślnie 5 minut, maksymalnie 10 minut.

00:12:15.720 --> 00:12:19.880
Jeśli twoja funkcja przetwarza plik przez 15 minut, zostanie przerwana w połowie.

00:12:20.100 --> 00:12:23.340
Podziel to zadanie na mniejsze części lub użyj innego planu hostingu.

00:12:23.580 --> 00:12:27.080
Kolejnym łatwym do przeoczenia błędem jest brak wdrożenia przez uruchom z pakietu.

00:12:27.080 --> 00:12:31.660
To prosta zmiana konfiguracji, która poprawia zimny start i zwiększa niezawodność wdrożeń.

00:12:31.800 --> 00:12:34.820
Zamiast kopiować pojedyncze pliki, wdrażasz spakowany plik zip.

00:12:35.060 --> 00:12:36.880
Wystarczy zaznaczyć jedno pole w portalu.

00:12:37.000 --> 00:12:37.340
Zrób to.

00:12:37.540 --> 00:12:40.740
Wystawianie punktów końcowych HTTP bez uwierzytelniania to kolejna pułapka.

00:12:40.980 --> 00:12:44.580
Łatwo jest zostawić funkcję jako anonimową podczas testów i zapomnieć ją zabezpieczyć.

00:12:44.740 --> 00:12:46.780
Ustaw poziom autoryzacji poprawnie od samego początku.

00:12:47.080 --> 00:12:48.800
Używaj kluczy funkcyjnych lub administracyjnych.

00:12:48.940 --> 00:12:50.020
Nie zostawiaj otwartych drzwi.

00:12:50.240 --> 00:12:52.760
Wielokrotne używanie kont magazynu dla wielu aplikacji funkcji to również problem.

00:12:52.760 --> 00:12:55.020
W środowisku deweloperskim współdzielenie jest w porządku.

00:12:55.180 --> 00:12:58.000
Na produkcji każda aplikacja funkcji powinna mieć własne konto magazynu.

00:12:58.160 --> 00:13:01.920
W przeciwnym razie pojawiają się problemy z hałaśliwym sąsiadem, gdzie ruch jednej funkcji spowalnia inne.

00:13:02.120 --> 00:13:04.300
I wreszcie brak włączenia Application Insights.

00:13:04.560 --> 00:13:05.860
Bez tego lecisz na ślepo.

00:13:06.060 --> 00:13:08.480
Nie zobaczysz awarii, błędów ani problemów z wydajnością.

00:13:08.660 --> 00:13:11.520
Nie dowiesz się, czy funkcja działa za długo lub czy kończy się cichym błędem.

00:13:11.740 --> 00:13:12.880
Włącz to od pierwszego dnia.

00:13:13.140 --> 00:13:15.600
Zajmuje to 30 sekund i oszczędza godziny debugowania.

00:13:15.600 --> 00:13:19.660
Złota zasada tego wszystkiego to utrzymywanie funkcji jako małych, skoncentrowanych i bezstanowych.

00:13:19.900 --> 00:13:21.640
Jedno zadanie na funkcję, nic więcej.

00:13:21.860 --> 00:13:23.020
Więc oto cały system.

00:13:23.220 --> 00:13:27.020
Azure Functions to serverless computing, który uruchamia małe fragmenty kodu w odpowiedzi na zdarzenia.

00:13:27.220 --> 00:13:29.360
Płacisz tylko wtedy, gdy twój kod jest uruchomiony.

00:13:29.560 --> 00:13:33.060
Wyzwalacze mówią funkcji, kiedy się obudzić, powiązania łączą ją z potrzebnymi danymi,

00:13:33.120 --> 00:13:35.960
a plan zużycia sprawia, że jest niemal darmowa dla małych projektów.

00:13:36.120 --> 00:13:40.600
Twoim najlepszym krokiem teraz jest utworzenie prostej funkcji wyzwalanej przez HTTP w portalu Azure.

00:13:40.820 --> 00:13:42.800
Zajmuje to 5 minut i nic nie kosztuje.

00:13:42.800 --> 00:13:46.660
Zasubskrybuj Microsoft Knowledge Nugget, aby otrzymywać więcej wyjaśnień prostym językiem

00:13:46.660 --> 00:13:49.300
i udostępnij to komuś, kto ciągle pyta, co oznacza serverless.

00:13:49.480 --> 00:13:49.720
Frau.
